当前位置:   article > 正文

北邮数电实验作业参考 #利用74LS138实现全加器_74ls138译码器verilog代码

74ls138译码器verilog代码

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

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

题目:

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

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

顶层模块:

  1. // 模块 hw_7: 根据输入按键控制LED灯的亮灭,并通过加法器和7段显示模块展示计算结果
  2. module hw_7(
  3. input clk, rst, // 输入信号:时钟(clk)和复位(rst)
  4. input key1, key2, key3, key4, // 输入按键,用于控制操作
  5. output reg si_led, ci_led, // 输出信号:单个LED指示灯(si_led, ci_led)用于显示加法器的结果
  6. output [8:0] seg_led, // 7段显示的输出
  7. output reg [2:0] led // LED灯组,通过按键控制亮灭
  8. );
  9. wire siled; // 加法器的和输出信号
  10. wire ciled; // 加法器的进位输出信号
  11. // 时钟上升沿触发的always块
  12. always @(posedge clk) begin
  13. if (!rst) begin
  14. // 如果复位信号激活,则将所有LED设置为预定初始状态
  15. led[0] <= 1'b1; // 初始状态,所有LED灯亮
  16. led[1] <= 1'b1;
  17. led[2] <= 1'b1;
  18. si_led <= 1'b1; // 加法结果和进位结果LED初始化为亮
  19. ci_led <= 1'b1;
  20. end else begin
  21. // 根据按键状态更新LED灯
  22. led[2] <= key1; // key1控制led[2]
  23. led[1] <= key2; // key2控制led[1]
  24. led[0] <= key3; // key3控制led[0]
  25. si_led <= ~siled; // 反转加法器的和输出,用于控制si_led
  26. ci_led <= ~ciled; // 反转加法器的进位输出,用于控制ci_led
  27. end
  28. end
  29. // 加法器模块实例化
  30. adder_ m1(
  31. .a(led), // 将led作为加法器的输入
  32. .g1(1'b1), .g2(1'b0), .g3(1'b0), // 控制信号
  33. .si(siled), // 和输出连接到siled
  34. .ci(ciled) // 进位输出连接到ciled
  35. );
  36. // 7段显示模块实例化
  37. segment m2(
  38. .bcd({key1, key2, key3, key4}), // 将按键状态作为输入
  39. .seg_led(seg_led) // 连接到7段显示的输出
  40. );
  41. endmodule

74LS138译码器:

  1. module sl138(
  2. input g1, g2, g3, // 地址选通端口,控制译码器是否激活
  3. input [2:0] a, // 3位输入地址,决定哪一位输出应该被激活
  4. output reg [7:0] y // 8位输出,每一位对应一个输出线
  5. );
  6. // 初始化输出为全高电平
  7. reg [7:0] y = 0;
  8. // 监听选通端口和地址输入的变化
  9. always @(g1 or g2 or g3 or a) begin
  10. // 当选通条件满足时(g1高,g2和g3低)
  11. if (g1 && ~g2 && ~g3) begin
  12. case (a) // 根据输入地址a选择输出
  13. // 每种情况下激活对应的输出线,使其变为低电平
  14. 7: y = 8'b01111111; // 激活第7位
  15. 6: y = 8'b10111111; // 激活第6
  16. 5: y = 8'b11011111; // 激活第5位
  17. 4: y = 8'b11101111; // 激活第4
  18. 3: y = 8'b11110111; // 激活第3位
  19. 2: y = 8'b11111011; // 激活第2
  20. 1: y = 8'b11111101; // 激活第1位
  21. 0: y = 8'b11111110; // 激活第0
  22. // 如果地址不在07之间,则所有输出保持高电平
  23. default: y = 8'b11111111;
  24. endcase
  25. end else begin
  26. // 如果选通条件不满足,则所有输出保持高电平
  27. y = 8'b11111111;
  28. end
  29. end
  30. endmodule

全加器:

  1. // 模块 adder_: 通过调用38线译码器实现特定的加法逻辑
  2. module adder_(
  3. input [2:0] a, // 输入a,假定同时代表了加法器的两个加数和一个进位输入
  4. input g1, g2, g3, // 译码器的控制输入
  5. output si, ci // 加法器的和(si)和进位(ci)输出
  6. );
  7. wire [7:0] m; // 译码器的8位输出
  8. // 实例化38线译码器 sl138
  9. sl138 u1(
  10. .g1(g1),
  11. .g2(g2),
  12. .g3(g3),
  13. .a(a),
  14. .y(m) // 连接译码器的输出到m
  15. );
  16. // 根据译码器的输出计算加法器的和和进位
  17. assign si = ~m[1] | ~m[2] | ~m[4] | ~m[7]; // 和输出的逻辑表达式
  18. assign ci = ~m[3] | ~m[5] | ~m[6] | ~m[7]; // 进位输出的逻辑表达式
  19. endmodule

 

                                                                   管脚图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/463478
推荐阅读
相关标签
  

闽ICP备14008679号