可逆计数器
可逆计数器是一种双向计数器,可以进行递增计数,也可以进行递减计数,根据计数控制
信号的不同,在时钟脉冲的作用下,计数器可以进行加 1 或减 1 的操作。
下面描述的是一个位宽为 4 的可逆计数器,即该计数器在不同控制信号下可以分别实现加
法计数和减法计数的功能。
rst 为同步复位信号,当 rst = 1 时,dout = 4’b0000;当 load = 1 时,输入信号 din 通过 dout
输出; 若 add_en = 1 时,计数器在每个时钟上升沿实现加 1 的操作,即实现加法计数功能;
若 add_en = 0 时,计数器在每个时钟上升沿实现减 1 的操作,即实现减法计数功能。
其 verilog HDL 设计代码如下:
1. modulecounter_i(clk,rst,load,add_en,din,dout);
2. inputclk,rst,load,add_en;
3. input[3:0]din;
4. output[3:0]dout;
5. reg[3:0]dout;
6.
7. always@(posedgeclk)
8. begin
9. if(rst==1'b1)
10. dout<=4'b0000;
11. elseif(load==1'b1)
12. dout<=din;
13. elseif(add_en==1'b1)
14. begin
15. if(dout==4'b1111)//如果 dout 为 15 时,则输出清零;
16. dout<=4'b0000;
17. else
18. dout<=dout+1'b1;
19. end
20. else
21. begin
22. if(dout==4'b0000)//递减计数器计数到 dout=4'b0000
时,则置位为 4'b1111
23. dout<=4'b1111;
24. else
25. dout<=dout-1'b1;
26. end
27. end
28. endmodule