Creazione degli stimoli
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 74 di 90.
Stimulus si riferisce ai valori di input che applichi al tuo progetto per verificare che funzioni correttamente. Modificando gli input e osservando gli output, puoi verificare che il tuo progetto si comporti come previsto.
Pensalo come se stessi testando una macchina: premi diversi pulsanti (stimoli) e osserva cosa succede (output). Creare buoni stimoli è una parte essenziale della scrittura di un testbench.
Per esempio, osserva lo stimolo nel seguente testbench:
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// LO STIMOLO INIZIA QUI
// Caso di test 1: entrambi gli ingressi sono 0
a = 0; b = 0; #10;
// Caso di test 2: a=0, b=1
a = 0; b = 1; #10;
// Caso di test 3: a=1, b=0
a = 1; b = 0; #10;
// Caso di test 4: entrambi gli ingressi sono 1
a = 1; b = 1; #10;
// LO STIMOLO FINISCE QUI
$finish;
end
endmoduleOgni stimolo viene applicato, poi attendiamo 10 unità di tempo (#10) prima dello stimolo successivo. Questo dà al DUT il tempo di produrre un output.
Metodi per creare lo stimolo
| Metodo | Ideale per | Esempio |
|---|---|---|
| Assegnazioni sequenziali | Test semplici | a = 0; b = 0; #10; |
| Ciclo for | Testare tutte le combinazioni | for (i = 0; i < 4; i++) |
| Ciclo repeat | Ripetere schemi | repeat (10) #5 clk = ~clk; |
| Ciclo forever | Segnali continui | forever #5 clk = ~clk; |
Metodo 1: Assegnazioni sequenziali
Il modo più semplice per creare uno stimolo. Assegni i valori uno alla volta con dei ritardi.
initial begin
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$finish;
endMetodo 2: ciclo for
Utile quando vuoi testare tutte le possibili combinazioni di input.
integer i;
initial begin
for (i = 0; i < 4; i = i + 1) begin
{a, b} = i;
#10;
end
$finish;
endQuesto verifica: 00, 01, 10, 11.
Metodo 3: Ciclo repeat
Utile per ripetere lo stesso stimolo molte volte.
initial begin
a = 0; b = 1;
repeat (10) begin
#10 a = ~a;
end
$finish;
endMetodo 4: Ciclo infinito
Utile per segnali continui come i clock.
initial begin
clk = 0;
forever #5 clk = ~clk;
endRegole importanti
| Regola | Spiegazione |
|---|---|
| Usa ritardi tra le assegnazioni dello stimolo | #10 consente al DUT di rispondere |
Usa reg per i segnali di stimolo | Perché cambiano nel tempo |
Aggiungi $finish alla fine | Per arrestare la simulazione |
Sfida
Ti viene fornito un modulo porta OR. Il tuo compito è aggiungere gli stimoli mancanti e le istruzioni $display per stampare i risultati.
Cosa fare:
Aggiungi stimoli per testare tutte e quattro le combinazioni di input (00, 01, 10, 11):
- Su ogni riga, imposta i valori di
xey - Aggiungi
#10per un ritardo - Aggiungi
$displayper stampare il risultato
<strong>$display</strong> dovrebbe essere così:
$display("%d %d | %d", x, y, z);Provalo tu
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
$display("x y | z");
$display("---------");
// TODO: Añade estímulos y muestra el resultado para 0 0
// TODO: Añade estímulos y muestra el resultado para 0 1
// TODO: Añade estímulos y muestra el resultado para 1 0
// TODO: Añade estímulos y muestra el resultado para 1 1
$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