级联模 60 计数器
计数器的级联就是用两片或者两片以上的 M 进制计数器通过级联方式构成模值更高的
计数器,一般的级联方式有异步级联方式和同步级联方式两种。异步级联方式就是几片 M
进制计数器的时钟脉冲不是同一个外接时钟端,而是利用进位/借位输出或输出脉冲作为高
位片的时钟脉冲 clk 的输入,使高位片状态翻转;同步级联方式就是将各片的时钟脉冲连接
在一起,在同一个外接时钟脉冲 clk 的作用下,各位的进位是由低位片的进位/借位输出控
制高片位的计数控制端。
下面描述的是一个模 60 计数器,该计数器通过将模 10 计数器和模 6 计数器级联的方
式构成,每当模 10 计数器计数到 1001 时,模 6 计数器就会计数加 1,直至计数到 60 时,
即模 6 计数器到达 0101、模 10 计数器到达 1001 时,计数状态又回到 00000000,然后重新
计数。
级联模 60 计数器的 verilog HDL 设计代码如下:
1. modulecounter60(clk,rst_n,en,dout,co);
2. inputclk,rst_n,en;
3. outputco;
4. output[7:0]dout;
5. wireco10_1,co10,co6;
6. wire[3:0]dout10,dout6;
7. count10U1(.clk(clk),.rst_n(rst_n),.en(en),.dout(dout10),.co(c
o10_1));
8. count6U2(.clk(clk),.rst_n(rst_n),.en(co10),.dout(dout6),.co(c
o6));
9. andU3(co,co10,co6);
10. andU4(co10,en,co10_1);
11. assigndout={dout6,dout10};
12. endmodule
13.
14. //模 10 计数器
15. modulecount10(clk,rst_n,en,dout,co);
16. inputclk,rst_n,en;
17. outputco;
18. output[3:0]dout;
19. reg[3:0]dout;
20.
21. always@(posedgeclkornegedgerst_n)
22. begin
23. if(!rst_n)
24. dout<=4'b0000;
25. elseif(en==1'b1)
26. begin
评论0