Diseño e Implementación de Contador Ripple Asíncrono en Verilog
Un contador ripple es un contador asíncrono en el que todos los flip-flops, excepto el primero, son relojados por la salida del flip-flop precedente.
Diseño
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
Esquema Hardware
Testbench
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
- Dominar Verilog: Tutorial completo para diseño de circuitos digitales
- Dominar la concatenación en Verilog: Guía práctica
- Comprender las asignaciones en Verilog: tipos, sintaxis y mejores prácticas
- Bloqueante vs. No bloqueante en Verilog: Diferencias clave explicadas
- Dominar las funciones en Verilog para diseño RTL eficiente
- Comprender las Tasks en Verilog: Funciones vs Tasks, sintaxis y uso
- Generador de reloj en Verilog: Guía de diseño e implementación
- Dominar las funciones matemáticas en Verilog para diseño de hardware eficiente
- Dominar $timeformat en Verilog: Control de precisión y visualización
- Diseño de Contador Mod-N en Verilog: Módulo Parametrizado y Testbench
- Módulo Contador Gray en Verilog – Generador de Código Gray de 4 Bits