Menu
Coddy logo textTech

Scrivere il testbench

Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 82 di 90.

challenge icon

Sfida

In questa lezione creerai un testbench per verificare che il controller del semaforo funzioni correttamente.

Cosa fare:

Crea un testbench che:

  1. Dichiara i segnali (reg per clk e reset, wire per red, yellow, green)
  2. Istanzia il modulo traffic_light con il nome uut
  3. Genera un clock che cambia stato ogni 1 unità di tempo
  4. Applica il reset per 2 unità di tempo, poi lo disattiva
  5. Esegue la simulazione per 100 unità di tempo

La simulazione viene verificata in base a ciò che stampa, quindi anche il blocco initial deve produrre esattamente queste righe:

  1. Stampa Traffic Light Test con $display prima di impostare il clock e il reset
  2. Dopo le 100 unità di tempo, stampa Test complete con $display
  3. Termina la simulazione con $finish, che aggiunge una propria riga all'output

Provalo tu

module traffic_light (
  input clk,
  input reset,
  output reg red,
  output reg yellow,
  output reg green
);

  reg [1:0] state;
  reg [5:0] counter;

  // Assegnazioni delle uscite
  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

  // Macchina a stati con temporizzazione
  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: Dichiara variabili reg per clk e reset
  
  // TODO: Dichiara variabili wire per red, yellow, green
  

  // TODO: Istanzia il modulo traffic_light con il nome uut
  // Collega clk, reset, red, yellow, green
  

  // TODO: Genera il clock (inverti il segnale ogni 1 unità di tempo)
  

  initial begin
    $display("Traffic Light Test");
    
    // TODO: Inizializza clk a 0
    
    // TODO: Applica reset (reset=1 per 2 unità di tempo, poi reset=0)
    
    
    // TODO: Esegui la simulazione per 100 unità di tempo
    
    
    $display("Test complete");
    $finish;
  end
endmodule

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Verilog online