Écriture du Testbench
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 82 sur 90.
Défi
Dans cette leçon, vous allez créer un testbench pour vérifier que le contrôleur de feu de circulation fonctionne correctement.
À faire :
Créez un testbench qui :
- Déclare des signaux (
regpour clk et reset,wirepour red, yellow, green) - Instancie le module
traffic_lightavec le nomuut - Génère une horloge qui bascule toutes les 1 unité de temps
- Applique le reset pendant 2 unités de temps, puis le relâche
- Exécute la simulation pendant 100 unités de temps
Essayez vous-même
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
reg [5:0] counter;
// Affectations de sortie
always @(*) begin
case (state)
0: begin green = 1; yellow = 0; red = 0; end
1: begin green = 0; yellow = 1; red = 0; end
2: begin green = 0; yellow = 0; red = 1; end
default: begin green = 0; yellow = 0; red = 1; end
endcase
end
// Machine d'états avec temporisation
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2;
counter <= 0;
end else begin
if (counter == 0) begin
case (state)
0: begin
state <= 1;
counter <= 10;
end
1: begin
state <= 2;
counter <= 40;
end
2: begin
state <= 0;
counter <= 30;
end
endcase
end else begin
counter <= counter - 1;
end
end
end
endmodule
module testbench;
// TODO: Déclarer reg pour clk et reset
// TODO: Déclarer wire pour red, yellow, green
// TODO: Instancier le module traffic_light avec le nom uut
// Connecter clk, reset, red, yellow, green
// TODO: Générer l'horloge (basculer toutes les 1 unités de temps)
initial begin
$display("Traffic Light Test");
// TODO: Initialiser clk à 0
// TODO: Appliquer reset (reset=1 pendant 2 unités de temps, puis reset=0)
// TODO: Exécuter la simulation pendant 100 unités de temps
$display("Test complete");
$finish;
end
endmoduleToutes 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