Vérification de la sortie
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 83 sur 90.
Défi
Dans cette leçon, vous allez ajouter des commandes de vidage de forme d'onde (waveform dump) et vérifier que le contrôleur de feux de circulation fonctionne correctement.
Ce qu'il faut faire :
Mettez à jour le banc d'essai (testbench) pour :
- Ajouter
$dumpfilepour créer un fichier de forme d'onde nommétraffic.vcd - Ajouter
$dumpvarspour vider tous les signaux dans le banc d'essai - Exécuter la simulation et vérifier la forme d'onde
Essayez vous-même
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// États : 0=Green, 1=Yellow, 2=Red
reg [1:0] state;
reg [5:0] counter;
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2; // Démarrer au Red
counter <= 0;
end else begin
if (counter == 0) begin
// Changer d'état
if (state == 0) begin // Green -> Yellow
state <= 1;
counter <= 10; // Yellow dure 10 secondes
end else if (state == 1) begin // Yellow -> Red
state <= 2;
counter <= 40; // Red dure 40 secondes
end else begin // Red -> Green
state <= 0;
counter <= 30; // Green dure 30 secondes
end
end else begin
counter <= counter - 1;
end
end
end
// Logique de sortie
always @(*) begin
red = (state == 2);
yellow = (state == 1);
green = (state == 0);
end
endmodule
module testbench;
reg clk, reset;
wire red, yellow, green;
traffic_light uut (
.clk(clk),
.reset(reset),
.red(red),
.yellow(yellow),
.green(green)
);
always #1 clk = ~clk;
initial begin
// TODO: Ajouter $dumpfile pour créer "traffic.vcd"
// TODO: Ajouter $dumpvars pour dumper tous les signaux (0, testbench)
$display("Traffic Light Test");
$monitor("Time %0t: red=%b, yellow=%b, green=%b", $time, red, yellow, green);
clk = 0;
reset = 1;
#2 reset = 0;
#90;
$finish;
end
endmodule
Toutes les leçons de Fondamentaux
1Introduction
Qu'est-ce que VerilogHardware vs SoftwareNiveaux d'abstraction de conceptionVotre premier moduleCommentaires4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Assignation et portes logiques
Assignation continueAssignation avec opérateursPrimitives de portes intégréesPortes AND OR NOTPortes XOR XNORRécapitulatif - Circuit à portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'ALU2Types de données
Type WireType RegEntiers et RéelsVecteursTableauxParamètresRécapitulatif - Déclarer des signaux5Opérateurs - Partie 2
Opérateurs logiquesOpérateurs de réductionOpérateurs de décalageOpérateur de concaténationOpérateur conditionnelRécapitulatif - Défi sur les opérateurs11Boucles
Boucle ForBoucle WhileBoucle RépéterBoucle InfinieInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres avec tailleNombres sans tailleNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats de nombres6Modules
Structure d'un modulePorts d'entrée et de sortiePorts InoutInstanciation de moduleMappage de ports par nomMappage de ports par ordreRécapitulatif - Créer un module9Blocs procéduraux
Bloc AlwaysBloc InitialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - Always vs Initial12Projet Multiplexeur
Conception d'un Mux 2 vers 1Conception d'un Mux 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à états