Menu
Coddy logo textTech

Cos'è un testbench

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

Un testbench è un modulo Verilog speciale usato per testare un altro modulo. Fornisce degli input al tuo progetto e verifica se gli output sono corretti.

Perché abbiamo bisogno di un banco di prova?

Quando crei un modulo, devi assicurarti che funzioni correttamente. Un banco di prova ti consente di:

  • Applicare valori di input diversi al tuo modulo
  • Osservare gli output
  • Controlla se le uscite corrispondono a ciò che ti aspetti
  • Fallo automaticamente senza test manuali

Modulo di progettazione vs banco di prova

 Modulo di progettazioneBanco di prova
ScopoImplementa l'hardwareVerifica il modulo di progettazione
Ha porte?Sì (ingressi e uscite)No (autonomo)
Sintetizzabile?SìNo (solo simulazione)

Esempio semplice di testbench

module testbench;              // Nessuna porta!

  // Gli ingressi e le uscite provengono dal modulo che stiamo testando (il DUT).
  reg a, b;                    // reg per gli ingressi
  wire c;                      // wire per l'uscita
  

  // Questa è un'istanziazione del modulo: crea una copia del modulo and_gate e la chiama dut
  and_gate dut (               // Istanzia DUT
    .a(a),
    .b(b),
    .c(c)
  );

  // Questo è un blocco initial che applica valori di test agli ingressi del modulo in esame.
  initial begin                // Applica i valori di test
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    $finish;
  end
endmodule

Punti chiave

  • Il testbench non ha porte
  • reg si usa per i segnali che cambiano (ingressi al DUT)
  • wire si usa per i segnali provenienti dal DUT (uscite)
  • Il modulo in fase di test si chiama DUT (dispositivo in prova)
  • $finish termina la simulazione

Nelle lezioni successive vedremo come creare stimoli, visualizzare i risultati e usare altre funzionalità del banco di prova.

challenge icon

Sfida

Ti viene fornito un modulo di porta AND. Il tuo compito è aggiungere le parti mancanti al suo testbench.

Cosa fare:

Aggiungi le seguenti parti al testbench:

  1. Dichiara reg per gli ingressi a e b
  2. Dichiara wire per l'uscita c
  3. Istanzia and_gate con il nome dut e collega le porte

Provalo tu

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

module testbench;
  
  // Tarea 1: Declara reg para las entradas a y b
  
  
  // Tarea 2: Declara wire para la salida c
  

  // Tarea 3: Instancia and_gate con el nombre dut
  // Conecta .a(a), .b(b), .c(c)


  initial begin
    a = 0; b = 0; #10 $display("%d & %d = %d", a, b, c);
    a = 0; b = 1; #10 $display("%d & %d = %d", a, b, c);
    a = 1; b = 0; #10 $display("%d & %d = %d", a, b, c);
    a = 1; b = 1; #10 $display("%d & %d = %d", a, b, c);
    $finish;
  end
endmodule
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Verilog online