当前位置:   article > 正文

【数电实验】实验 5 数码管动态扫描显示电路设计_两位十进制加法计数器数码管动态扫描显示电路

两位十进制加法计数器数码管动态扫描显示电路

【2023-11-16:修改Y为4位宽,支持显示学号8和9】

实验要求

一、实验目的

1. 学习动态扫描显示数码管的使用。

2. 学习数据选择器及其信号分配方法。

3. 巩固 Verilog HDL 层次化设计电路的方法。

利用modelsim仿真

模块代码

1.modelsim仿真代码

  1. `timescale 1 ps/1 ps
  2. module ljq_2344_5_vlg_tst();
  3. reg clk;
  4. reg en;
  5. wire [2:0] DIG;
  6. wire [1:0] Q;
  7. wire [3:0] Y;
  8. wire [6:0] codeout;
  9. wire [4:0] seg;
  10. ljq_2344_5 i1 (
  11. .DIG(DIG),
  12. .Q(Q),
  13. .Y(Y),
  14. .clk(clk),
  15. .codeout(codeout),
  16. .en(en),
  17. .seg(seg)
  18. );
  19. initial begin
  20. en = 1;
  21. clk = 1;
  22. end
  23. reg [25:0] counter = 26'b0;
  24. always begin
  25. #25 clk = ~clk;
  26. counter = counter + 1'b1;
  27. if(counter[20]) begin
  28. en = ~en;
  29. counter = 26'b0;
  30. end
  31. end
  32. endmodule

2.程序源代码

  1. module ljq_2344_5 (clk,en,DIG,seg,codeout,Y,Q);
  2. input clk,en; //时钟和使能信号
  3. output [1:0] Q; //计数信号
  4. output [3:0] Y;
  5. output [2:0] DIG; //位选信号,SEG3~SEG0,根据Q值变化
  6. output [6:0] codeout; //七段数码管译码信号
  7. output [4:0] seg; //位选信号,SEG7~SEG4, 恒为0
  8. wire clk1000;
  9. //调用子模块
  10. ljq_2344_5_0 clk_(clk, clk1000);
  11. ljq_2344_5_1 counter(clk1000,Q,en);
  12. ljq_2344_5_2 segswitch(Q,DIG,seg);
  13. ljq_2344_5_3 numselect(Q,Y);
  14. ljq_2344_5_4 decoder(Y,codeout);
  15. endmodule
  1. module ljq_2344_5_0(clk,clk1000);//分频器
  2. parameter clkin=50000000;
  3. parameter clkout=1000;
  4. input clk;
  5. output reg clk1000=0;
  6. reg [20:0] count;
  7. always @(posedge clk)
  8. begin
  9. if (count<(clkin/(2*clkout)-1))
  10. begin
  11. count<=count+1'b1;
  12. clk1000<=clk1000;
  13. end
  14. else
  15. begin
  16. clk1000<=~clk1000;
  17. count<=0;
  18. end
  19. end
  20. endmodule
  1. module ljq_2344_5_1(clk,Q,en); //3-digit计数器
  2. input clk,en;
  3. output reg[1:0]Q=2'b00;
  4. always @(posedge clk)
  5. if(en==1'b1)
  6. begin
  7. if(Q==2'd3)
  8. Q<=2'd1;
  9. else
  10. Q<=2'd1+Q;
  11. end
  12. else
  13. begin
  14. Q <= 2'd0;
  15. end
  16. endmodule
  1. module ljq_2344_5_2(x,DIG,seg); //2-3线译码器
  2. input [1:0] x;
  3. output reg[2:0] DIG; //位选信号
  4. output [4:0]seg; //位选信号
  5. assign seg=4'b0000;
  6. always @(x)
  7. begin
  8. case(x)
  9. 2'd1:DIG <= 4'b0001; //数码管SEG1亮
  10. 2'd2:DIG <= 4'b0010; //数码管SEG2亮
  11. 2'd3:DIG <= 4'b0100; //数码管SEG3亮
  12. default:DIG <= 4'b0; //默认不亮
  13. endcase
  14. end
  15. endmodule
  1. module ljq_2344_5_3(SEL,Y); //数据选择器
  2. input [1:0] SEL;
  3. output reg[3:0] Y;
  4. always @(SEL)
  5. begin
  6. case(SEL)
  7. 2'd1:Y <= 4'b0100;
  8. 2'd2:Y <= 4'b0100;
  9. 2'd3:Y <= 4'b0011;
  10. default: Y <=4'b0;
  11. endcase
  12. end
  13. endmodule
  1. module ljq_2344_5_4 (Y,codeout); //译码器
  2. input[3:0] Y;
  3. output[6:0] codeout;
  4. reg [6:0]codeout;
  5. always@(Y)
  6. begin
  7. case(Y)
  8. 4'd0 : codeout=7'b1111110;
  9. 4'd1 : codeout=7'b0110000;
  10. 4'd2 : codeout=7'b1101101;
  11. 4'd3 : codeout=7'b1111001;
  12. 4'd4 : codeout=7'b0110011;
  13. 4'd5 : codeout=7'b1011011;
  14. 4'd6 : codeout=7'b1011111;
  15. 4'd7 : codeout=7'b1110000;
  16. 4'd8 : codeout=7'b1111111;
  17. 4'd9 : codeout=7'b1111011;
  18. default: codeout=7'bx;
  19. endcase
  20. end
  21. endmodule

RTL电路图

验收波形图

引脚分配表(EP4CE6E22C8)

​​​​​​​

标准参考:

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/574882
推荐阅读
相关标签
  

闽ICP备14008679号