涟漪 counter 是一个异步计数器,其中除了第一个触发器之外的所有触发器都由前一个触发器的输出计时。
设计
模块dff(输入d,输入clk,输入rstn,输出reg q,输出qn);总是@ (posedge clk 或 negedge rstn) if (!rstn) q <=0;否则 q <=d;分配 qn =~q;endmodulemodule 纹波(输入时钟,输入 rstn,输出 [3:0] 输出);线 q0;线 qn0;线 q1;线 qn1;线 q2;线材qn2;线 q3;线材qn3; dff dff0 ( .d (qn0), .clk (clk), .rstn (rstn), .q (q0), .qn (qn0)); dff dff1 ( .d (qn1), .clk (q0), .rstn (rstn), .q (q1), .qn (qn1)); dff dff2 ( .d (qn2), .clk (q1), .rstn (rstn), .q (q2), .qn (qn2)); dff dff3 ( .d (qn3), .clk (q2), .rstn (rstn), .q (q3), .qn (qn3));赋值 ={qn3, qn2, qn1, qn0};endmodule
硬件原理图
测试平台
模块 tb_ripple;注册时钟;注册;电线 [3:0] 输出;纹波 r0 (.clk (clk), .rstn (rstn), .out (out));总是 #5 clk =~clk;初始开始 rstn <=0;时钟 <=0;重复(4)@(posedge clk); rstn <=1;重复(25)@(posedge clk); $完成;结束模块
Verilog