Verilog 异步脉冲计数器设计与实现
脉冲 计数器是一种异步计数器,除第一个触发器外,其余触发器的时钟由前一个触发器的输出驱动。
设计
module dff (
input d,
input clk,
input rstn,
output reg q,
output qn
);
always @ (posedge clk or negedge rstn)
if (!rstn) q <= 0;
else q <= d;
assign qn = ~q;
endmodule
module ripple (
input clk,
input rstn,
output [3:0] out
);
wire 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) );
assign out = {qn3, qn2, qn1, qn0};
endmodule
硬件原理图
测试平台
module tb_ripple;
reg clk;
reg rstn;
wire [3:0] out;
ripple r0 ( .clk (clk), .rstn (rstn), .out (out) );
always #5 clk = ~clk;
initial begin
rstn <= 0;
clk <= 0;
repeat (4) @ (posedge clk);
rstn <= 1;
repeat (25) @ (posedge clk);
$finish;
end
endmodule
Verilog
- Verilog基础:设计你的第一个与门
- Verilog 入门:数字电路设计完整教程
- 掌握 Verilog 拼接操作:实用指南
- 深入理解 Verilog 赋值语句:类型、语法与最佳实践
- Verilog阻塞与非阻塞赋值:关键区别详解
- 掌握Verilog函数:高效RTL设计的复用利器
- 理解Verilog任务:函数vs任务、语法与用法全解析
- Verilog 时钟发生器设计与实现指南
- 掌握 Verilog 数学函数:高效硬件设计的利器
- 掌握 Verilog $timeformat:精度控制与显示格式化
- Verilog 模 N 计数器设计:参数化模块与测试平台
- Verilog 格雷码计数器模块:4 位格雷码生成器