异步计数器(也称为ripple-through counter)的特点是每一位触发器的输出作为下一位触发器的时钟输入,因此计数速度会因为级联触发器的传播延迟而受到限制。这种计数器的最大工作频率通常低于同步计数器。
一、电路符号
输入信号:时钟信号clk,复位端rst。输出信号:计数输出端q[3..0]
二、设计代码
module yibu_cnt(q,clk,rst);
output [3:0] q;
input rst,clk;
reg[3:0]q;
reg[3:0]qn;always @(posedge clk)beginif(!rst)begin q[0]=0; qn[0]=1;endelsebegin q[0]=~q[0];qn[0]=~q[0];endendalways@(posedge qn[0])beginif(!rst)begin q[1]=0;qn[1]=1;endelsebegin q[1]=~q[1];qn[1]=~q[1];endendalways@(posedge qn[1])beginif(!rst)begin q[2]=0;qn[2]=1;endelsebegin q[2]=~q[2];qn[2]=~q[2];endendalways@(posedge qn[2])beginif(!rst)begin q[3]=0;qn[3]=1;endelsebegin q[3]=~q[3];qn[3]=~q[3];endend
endmodule
三、仿真代码
module yibu_cnt_tb;reg rst;
reg clk;wire [3:0] q;// 实例化被测试模块
yibu_cnt uut (.q(q), .clk(clk), .rst(rst)
);// 时钟信号生成
initial beginclk = 0;forever #10 clk = ~clk; // 产生一个周期为10ns的时钟信号
end// 测试序列
initial beginrst =1; #10;rst =0; #10;rst =1; #300;$finish;
endinitial begin$monitor("Time = %t, rst = %b, clk = %b, q = %b", $time, rst, clk, q);
endendmodule