Асинхронный рипл-счётчик на Verilog: проектирование и реализация
Рипл-счётчик (asynchronous ripple counter) — асинхронный счётчик, где все триггеры, кроме первого, тактируются выходом предыдущего.
Проект
module dff (
input d, clk, 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, 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, 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 для эффективного RTL дизайна
- Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
- Генератор тактового сигнала в Verilog: проектирование и реализация
- Мастерство математических функций Verilog для эффективного аппаратного дизайна
- Мастерство $timeformat в Verilog: точность и контроль отображения времени
- Параметризованный Mod-N счётчик на Verilog: модуль и тестбенч