实现一个4位BCD计数器,clk是时钟,reset是同步复位端,reset为1时复位,ena为进位输出标志,低位向高位进位时为1。
先写一个BCD计数器模块。
在这个计数器中,需要主要的是,使能端=0时,输出信号保持不变,使能端为1时,输出信号增加。复位信号优先级大于使能信号大于时钟信号。
module decade_cont(
input clk,
input reset, // Synchronous active-high reset
input enable,
output [3:0] q
);
always@(posedge clk)begin
q <= 4'b0;
if(reset)
q <= 4'b0;
else if(!enable)
q <= q;
else if(q == 4'h9)
q <= 4'b0;
else
q <= q + 1'b1;
end
endmodule
顶层模块用到4个子模块,cont0的使能端始终为1,则4位十进制数的个位一直为0~9循环,ena[1]=1标志着计数从个位进到十位,所以个位为9时,ena[1]输出为1;ena[2]=1标志着计数从十位进到百位,所以个位十位均为9时,ena[2]=1;ena[3] 同样如此。
module top_module (
input c