Menu
Coddy logo textTech

Vérification de la sortie

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

challenge icon

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 :

  1. Ajouter $dumpfile pour créer un fichier de forme d'onde nommé traffic.vcd
  2. Ajouter $dumpvars pour vider tous les signaux dans le banc d'essai
  3. 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