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

Implémenter la logique séquentielle avec les blocs 'always' Verilog

Article précédent montrait exemples bloc always pour logique combinatoire. Bloc always aussi principalement utilisé pour logique séquentielle avec éléments mémoire comme bascules retenant valeurs.

Bascule JK

Bascule JK stocke valeurs avec 2 entrées données j, k, reset rstn, horloge clk. Table de vérité ci-dessous, typiquement implémentée avec portes NAND.

rstnjkqCommentaires
0000Reset actif -> sortie toujours 0
100Holdj=k=0 -> sortie inchangée
1011k=1 -> sortie devient 1
1100k=0 -> sortie devient 0
111Togglej=k=1 -> sortie bascule

Code Verilog comportemental pour bascule JK :

module jk_ff (input j, k, rstn, clk, output reg q);
always @ (posedge clk or negedge rstn) begin
    if (!rstn) q <= 0;
    else q <= (j & ~q) | (~k & q);
end
endmodule

Testbench

Déclarer variables testbench, démarrer horloge avec bloc always simple, instancier design, connecter ports. q type wire (connecté sortie design qui le pilote activement). Autres entrées type reg pour pilotage dans bloc procédural initial.

Stimulus : initialise entrées à 0, désactive reset après délai. Boucle for pour piloter j, k valeurs aléatoires à moments aléatoires. Attendre puis finir simulation.

module tb; reg j, k, rstn, clk; wire q; integer i; reg [2:0] dly;
always #10 clk = ~clk;
jk_ff u0 (.j(j), .k(k), .clk(clk), .rstn(rstn), .q(q));
initial begin {j, k, rstn, clk} <= 0; #10 rstn <= 1;
for (i = 0; i < 10; i = i+1) begin dly = $random; #(dly) j <= $random; #(dly) k <= $random; end #20 $finish; end
endmodule

Voir onde simulation : au front montant clk, sortie q change selon état j, k comme table vérité.

Implémenter la logique séquentielle avec les blocs  always  Verilog

Compteur Modulo-10

Compteurs MOD-N comptent jusqu'à N-1 puis rebouclent à zéro. Nécessitent log2N bascules. Code Verilog compteur MOD-10 comptant à chaque horloge tant que reset désactivé. Paramètres Verilog permettent compteur MOD-N plus évolutif.

module mod10_counter (input clk, input rstn, output reg[3:0] out);
always @ (posedge clk) begin
    if (!rstn) out <= 0;
    else begin if (out == 10) out <= 0; else out <= out + 1; end
end
endmodule

Testbench

Variables déclarées, module instancié, horloge modélisée avec always. Stimulus : valeurs par défaut à 0ns, désactive reset après 10ns, design tourne un moment.

module tb; reg clk, rstn; reg [3:0] out;
mod10_counter u0 (.clk(clk), .rstn(rstn), .out(out));
always #10 clk = ~clk;
initial begin {clk, rstn} <= 0; #10 rstn <= 1; #450 $finish; end
endmodule

Compteur compte 0 à 9, reboucle à 0, recommence.

Implémenter la logique séquentielle avec les blocs  always  Verilog

Registre à décalage gauche 4-bit

Registre à décalage gauche 4-bit : entrée d dans LSB, tous bits décalés gauche de 1. Ex: d=0, valeur initiale 0011 -> 0110 au front suivant.

module lshift_4b_reg (input d, input clk, input rstn, output reg [3:0] out);
always @ (posedge clk) begin
    if (!rstn) out <= 0;
    else out <= {out[2:0], d};
end
endmodule

Testbench

Template similaire : variables, instanciation, horloge, stimulus. Boucle for 20 itérations valeurs aléatoires pour d.

module tb; reg clk, rstn, d; wire [3:0] out; integer i;
lshift_4b_reg u0 (.d(d), .clk(clk), .rstn(rstn), .out(out));
always #10 clk = ~clk;
initial begin {clk, rstn, d} <= 0; #10 rstn <= 1;
for (i = 0; i < 20; i=i+1) begin @(posedge clk) d <= $random; end #10 $finish; end
endmodule

Chaque bit décalé gauche de 1, nouvelle valeur d appliquée au LSB.

Implémenter la logique séquentielle avec les blocs  always  Verilog

Verilog

  1. Maîtriser VHDL et Verilog : écrire une logique combinatoire et séquentielle propre
  2. Circuit avec interrupteur : guide pratique des circuits électriques de base
  3. Circuits intégrés : fondamentaux des portes logiques numériques
  4. Automates programmables (PLC) : commande numérique moderne pour systèmes industriels
  5. Comprendre l'algèbre de Boole : des fondements logiques aux circuits numériques
  6. Maîtriser la simplification logique avec les cartes de Karnaugh
  7. Conception d'un Compteur Mod-N en Verilog : Module Paramétré et Testbench
  8. Module Compteur Gray en Verilog – Générateur de Code Gray 4 bits
  9. Obtenir des finitions parfaites avec les machines de rectification de précision Okamoto