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 capture de formes d'ondes et vérifier que le contrôleur de feu de circulation fonctionne correctement.

À faire :

Mettez à jour le testbench pour :

  1. Ajouter $dumpfile pour créer un fichier de forme d'onde nommé traffic.vcd
  2. Ajouter $dumpvars pour enregistrer tous les signaux du testbench
  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=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