Scrivere il testbench
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 45 di 90.
Sfida
Ora dobbiamo verificare che il semisommatore funzioni correttamente. Aggiungi il codice di test all'interno del blocco initial.
Importante: prima di aggiungere il test, devi modificare le porte del modulo affinché il test possa funzionare correttamente.
Cosa fare:
Passaggio 1: modifica le dichiarazioni delle porte
- Modifica
input a, binreg a, b(usa il punto e virgola) - Modifica
output sum, carryinwire sum, carry(usa il punto e virgola) - Rimuovi completamente le porte del modulo (il modulo non deve avere
( ))
Passaggio 2: aggiungi il codice di test
- Aggiungi un blocco
initial begin - All'interno del blocco, aggiungi:
$display("a b | sum carry");
a = 0; b = 0; #1 $display("%d %d | %d %d", a, b, sum, carry);
a = 0; b = 1; #1 $display("%d %d | %d %d", a, b, sum, carry);
a = 1; b = 0; #1 $display("%d %d | %d %d", a, b, sum, carry);
a = 1; b = 1; #1 $display("%d %d | %d %d", a, b, sum, carry);
- Aggiungi
$finish;per terminare il test - Aggiungi
endper chiudere il blocco initial
Provalo tu
module half_adder (
input a,
input b,
output sum,
output carry
);
assign sum = a ^ b;
assign carry = a & b;
endmoduleTutte 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 operatori3Sistema 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