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 progettazione | Banco di prova | |
|---|---|---|
| Scopo | Implementa l'hardware | Verifica 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
endmodulePunti chiave
- Il testbench non ha porte
regsi usa per i segnali che cambiano (ingressi al DUT)wiresi usa per i segnali provenienti dal DUT (uscite)
- Il modulo in fase di test si chiama DUT (dispositivo in prova)
$finishtermina la simulazione
Nelle lezioni successive vedremo come creare stimoli, visualizzare i risultati e usare altre funzionalità del banco di prova.
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:
- Dichiara
regper gli ingressiaeb - Dichiara
wireper l'uscitac - Istanzia
and_gatecon il nomedute 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
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori14Fondamenti del testbench
Cos'è un testbenchCreazione degli stimoliVisualizzazione e monitoraggioDumpfile e DumpvarsUso dei task di sistemaRiepilogo - testbench completo3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online