北邮数电实验作业参考 #利用74LS138实现全加器

这篇具有很好参考价值的文章主要介绍了北邮数电实验作业参考 #利用74LS138实现全加器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

各位好我是Toporanger  本人只会写代码 不会教人 毕竟自己的代码也是改来改去最终成功的 如果有不够精简的地方还请见谅 

我会先贴下代码 然后贴上管脚的绑定图  无论是拿来救急还是作为参考都希望帮助到你们

题目:

1. Verilog HDL设计一个3-8译码器74LS138,并用该译码器实现全加器。要求:调试通过,直接贴代码也可。

2. Verilog HDL设计一个七段显示译码器,该译码器输入为BCD码,输出驱动七段数码管。要求:将七段显示译码器封装为模块,然后在顶层模块调用该译码器驱动七段数码管,并在开发板上验证通过,直接贴代码也可。

顶层模块:

// 模块 hw_7: 根据输入按键控制LED灯的亮灭,并通过加法器和7段显示模块展示计算结果
module hw_7(
    input clk, rst,            // 输入信号:时钟(clk)和复位(rst)
    input key1, key2, key3, key4, // 输入按键,用于控制操作
    output reg si_led, ci_led, // 输出信号:单个LED指示灯(si_led, ci_led)用于显示加法器的结果
    output [8:0] seg_led,      // 7段显示的输出
    output reg [2:0] led       // LED灯组,通过按键控制亮灭
);

    wire siled; // 加法器的和输出信号
    wire ciled; // 加法器的进位输出信号

    // 时钟上升沿触发的always块
    always @(posedge clk) begin
        if (!rst) begin
            // 如果复位信号激活,则将所有LED设置为预定初始状态
            led[0] <= 1'b1; // 初始状态,所有LED灯亮
            led[1] <= 1'b1;
            led[2] <= 1'b1;
            si_led <= 1'b1; // 加法结果和进位结果LED初始化为亮
            ci_led <= 1'b1;
        end else begin
            // 根据按键状态更新LED灯
            led[2] <= key1; // key1控制led[2]
            led[1] <= key2; // key2控制led[1]
            led[0] <= key3; // key3控制led[0]
            si_led <= ~siled; // 反转加法器的和输出,用于控制si_led
            ci_led <= ~ciled; // 反转加法器的进位输出,用于控制ci_led
        end
    end

    // 加法器模块实例化
    adder_ m1(
        .a(led), // 将led作为加法器的输入
        .g1(1'b1), .g2(1'b0), .g3(1'b0), // 控制信号
        .si(siled), // 和输出连接到siled
        .ci(ciled)  // 进位输出连接到ciled
    );

    // 7段显示模块实例化
    segment m2(
        .bcd({key1, key2, key3, key4}), // 将按键状态作为输入
        .seg_led(seg_led) // 连接到7段显示的输出
    );
endmodule

74LS138译码器:

module sl138(
    input g1, g2, g3, // 地址选通端口,控制译码器是否激活
    input [2:0] a,    // 3位输入地址,决定哪一位输出应该被激活
    output reg [7:0] y // 8位输出,每一位对应一个输出线
);

    // 初始化输出为全高电平
    reg [7:0] y = 0; 

    // 监听选通端口和地址输入的变化
    always @(g1 or g2 or g3 or a) begin
        // 当选通条件满足时(g1高,g2和g3低)
        if (g1 && ~g2 && ~g3) begin
            case (a) // 根据输入地址a选择输出
                // 每种情况下激活对应的输出线,使其变为低电平
                7: y = 8'b01111111; // 激活第7位
                6: y = 8'b10111111; // 激活第6位
                5: y = 8'b11011111; // 激活第5位
                4: y = 8'b11101111; // 激活第4位
                3: y = 8'b11110111; // 激活第3位
                2: y = 8'b11111011; // 激活第2位
                1: y = 8'b11111101; // 激活第1位
                0: y = 8'b11111110; // 激活第0位
                // 如果地址不在0到7之间,则所有输出保持高电平
                default: y = 8'b11111111;
            endcase
        end else begin
            // 如果选通条件不满足,则所有输出保持高电平
            y = 8'b11111111;
        end
    end
endmodule

全加器:

// 模块 adder_: 通过调用3到8线译码器实现特定的加法逻辑
module adder_(
    input [2:0] a, // 输入a,假定同时代表了加法器的两个加数和一个进位输入
    input g1, g2, g3, // 译码器的控制输入
    output si, ci // 加法器的和(si)和进位(ci)输出
);
    wire [7:0] m; // 译码器的8位输出

    // 实例化3到8线译码器 sl138
    sl138 u1(
        .g1(g1),
        .g2(g2),
        .g3(g3),
        .a(a),
        .y(m) // 连接译码器的输出到m
    );

    // 根据译码器的输出计算加法器的和和进位
 
    assign si = ~m[1] | ~m[2] | ~m[4] | ~m[7]; // 和输出的逻辑表达式
    assign ci = ~m[3] | ~m[5] | ~m[6] | ~m[7]; // 进位输出的逻辑表达式
endmodule

 

                                                                   管脚图74ls138译码器verilog代码,fpga开发文章来源地址https://www.toymoban.com/news/detail-855223.html

到了这里,关于北邮数电实验作业参考 #利用74LS138实现全加器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包