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 sauvegarde de forme d’onde et vérifier que le contrôleur de feux de circulation fonctionne correctement.
Jusqu’à présent, le banc de test était masqué et ajouté à votre module. À cette étape, le banc de test fait partie de votre fichier : conservez le module traffic_light de l’étape précédente (temporisation du compteur, aucune entrée next) et ajoutez un module testbench en dessous. Si votre fichier ne contient pas encore de module testbench, copiez celui-ci :
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: Add $dumpfile to create "traffic.vcd"
// TODO: Add $dumpvars to dump all signals (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À faire :
Mettez à jour le banc de test pour :
- Ajouter
$dumpfilepour créer un fichier de forme d’onde nommétraffic.vcd - Ajouter
$dumpvarspour sauvegarder tous les signaux du banc de test - Exécuter la simulation et vérifier la sortie
Le test compare la sortie complète du simulateur : le banc de test doit donc afficher exactement ce que le banc de test ci-dessus affiche, et rien d’autre : l’en-tête $display("Traffic Light Test"), une ligne $monitor à chaque changement des feux, une horloge qui change d’état à chaque unité de temps, la désactivation de la réinitialisation au temps 2 et $finish après #90. N’ajoutez pas d’autres lignes $display (pas de "Test complete").
Sortie attendue (le simulateur ajoute lui-même une dernière ligne $finish called at 92) :
VCD info: dumpfile traffic.vcd opened for output.
Traffic Light Test
Time 0: red=1, yellow=0, green=0
Time 3: red=0, yellow=0, green=1
Time 65: red=0, yellow=1, green=0
Time 87: red=1, yellow=0, green=0Essayez vous-même
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// États : 0=Vert, 1=Jaune, 2=Rouge
reg [1:0] state;
reg [5:0] counter;
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2; // Commence au Rouge
counter <= 0;
end else begin
if (counter == 0) begin
// Changer d'état
if (state == 0) begin // Vert -> Jaune
state <= 1;
counter <= 10; // Le jaune dure 10 secondes
end else if (state == 1) begin // Jaune -> Rouge
state <= 2;
counter <= 40; // Le rouge dure 40 secondes
end else begin // Rouge -> Vert
state <= 0;
counter <= 30; // Le vert 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 VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Affectations et portes
Affectation continueAffectation avec opérateursPrimitives de portes intégréesPortes AND, OR et NOTPortes XOR et XNORRécapitulatif - Circuit de portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'une 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 RepeatBoucle ForeverInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres dimensionnésNombres non dimensionnésNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats des nombres6Modules
Structure d’un modulePorts d’entrée et de sortiePorts InoutInstantiation d’un moduleAssociation des ports par nomAssociation des ports par ordreRécapitulatif - Construire un module9Blocs procéduraux
Bloc alwaysBloc initialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - always vs initial12Projet de multiplexeur
Conception d’un multiplexeur 2 vers 1Conception d’un multiplexeur 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à étatsEntraînez-vous par vous-même : Compilateur Verilog en ligne