Menu
Coddy logo textTech

Écriture du Testbench

Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 82 sur 90.

challenge icon

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 :

  1. Déclare des signaux (reg pour clk et reset, wire pour red, yellow, green)
  2. Instancie le module traffic_light avec le nom uut
  3. Génère une horloge qui bascule toutes les 1 unité de temps
  4. Applique le reset pendant 2 unités de temps, puis le relâche
  5. 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
endmodule

Toutes les leçons de Fondamentaux