Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

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

  1. Maîtriser Verilog : Tutoriel complet pour la conception de circuits numériques
  2. Maîtriser la concaténation Verilog : Guide pratique
  3. Comprendre les affectations Verilog : Types, Syntaxe et Bonnes Pratiques
  4. Verilog Blocking vs Non-Blocking : Différences Clés Expliquées
  5. Maîtriser les Fonctions Verilog pour une Conception RTL Efficace
  6. Comprendre les Tasks Verilog : Fonctions vs Tasks, Syntaxe et Utilisation
  7. Générateur d'Horloge Verilog : Guide de Conception et d'Implémentation
  8. Maîtriser les Fonctions Mathématiques Verilog pour une Conception Matérielle Efficace
  9. Maîtriser Verilog $timeformat : Contrôle de Précision et d'Affichage