Conception et Implémentation d'un Compteur Ripple Asynchrone en Verilog
Un compteur ripple est un compteur asynchrone dans lequel tous les bascules, sauf la première, sont horlogées par la sortie de la bascule précédente.
Conception
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
Schéma matériel
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
- Maîtriser Verilog : Tutoriel complet pour la conception de circuits numériques
- Maîtriser la concaténation Verilog : Guide pratique
- Comprendre les affectations Verilog : Types, Syntaxe et Bonnes Pratiques
- Verilog Blocking vs Non-Blocking : Différences Clés Expliquées
- Maîtriser les Fonctions Verilog pour une Conception RTL Efficace
- Comprendre les Tasks Verilog : Fonctions vs Tasks, Syntaxe et Utilisation
- Générateur d'Horloge Verilog : Guide de Conception et d'Implémentation
- Maîtriser les Fonctions Mathématiques Verilog pour une Conception Matérielle Efficace
- Maîtriser Verilog $timeformat : Contrôle de Précision et d'Affichage