当前位置:   article > 正文

10进制计数器Verilog编程_用verilog编写程序完成一位十进制计数器设计,16位板子,计数结果通过数码管显示,计

用verilog编写程序完成一位十进制计数器设计,16位板子,计数结果通过数码管显示,计

计数器不仅能用于对时钟脉冲计数,还可以用于分频,定时,产生节拍脉冲序列以及进行数字运算等,分为同步计数器和异步计数器,在同步计数器中,当时钟脉冲的输入时,触发器的翻转是同时发生的。而在异步计数中,触发器的翻转有先有后,不是同时发生的。

1.同步四位二进制加法计数器:

各触发器的驱动方程:

T0 = 1;

T1 = Q0

T2 = Q0Q1

T3 = Q0Q1Q2

2.四位10进制的计数器

在四位二进制计数器的基础上修改,当计算到1001时,则下一个clk状态回到0000

驱动方程:

T0 = 1;

T1 = Q0Q3`

T2 = Q0Q1

T3 = Q0Q1Q2 + Q0Q3`

verilog编程比较简单:用一个always块即可实现:

  1. `timescale 1ns/10ps
  2. module counter10(clk,rst,count);
  3. input clk,rst;
  4. output [3:0] count;
  5. reg [3:0] q;
  6. assign count = q;
  7. always@(posedge clk)
  8. begin
  9. if(!rst)
  10. q <= 0;
  11. else if(q >= 4'd9)
  12. q <= 0;
  13. else
  14. q <= q + 1;
  15. end
  16. endmodule

编写一个testbench

  1. module counter10_tb();
  2. reg rst;
  3. reg clk;
  4. wire [3:0] count;
  5. counter10 wt(.clk(clk),.rst(rst), .count(count));
  6. initial
  7. begin
  8. rst <= 0;
  9. clk <= 0;
  10. #50 rst <= 1;
  11. #2000 rst <= 0;
  12. end
  13. always
  14. #10 clk = ~clk;
  15. endmodule

通过vcs仿真:vcs add10 -R -gui +v2k

得到的波形:

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

闽ICP备14008679号