Visualizzazione e monitoraggio
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 75 di 90.
$display e $monitor sono task di sistema usati per stampare informazioni dalla simulazione. Ti aiutano a vedere cosa sta succedendo all'interno del tuo progetto.
$display
$display stampa un messaggio una volta nel momento in cui viene eseguito.
Sintassi:
$display("message", variables);Esempio:
initial begin
$display("Simulation started");
#10;
$display("Time 10");
#10;
$display("Time 20");
endOutput:
Simulation started
Time 10
Time 20$monitor
$monitor stampa un messaggio automaticamente ogni volta che una qualsiasi delle sue variabili cambia.
Sintassi:
$monitor("message", variables);Esempio:
initial begin
a = 0; b = 0;
$monitor("Time %0t: a=%b, b=%b", $time, a, b);
#10 a = 1;
#10 b = 1;
#10 a = 0;
endOutput:
Time 0: a=0, b=0
Time 10: a=1, b=0
Time 20: a=1, b=1
Time 30: a=0, b=1$display vs $monitor
| $display | $monitor | |
|---|---|---|
| Quando stampa | Una volta quando viene eseguito | Ogni volta che una variabile cambia |
| Quante volte | Tutte le volte che lo chiami | Continuamente (finché non cambia) |
| Da usare per | Intestazioni, messaggi di test | Monitorare i segnali che cambiano |
Specificatori di formato comuni
| Specificatore | Significato | Esempio |
|---|---|---|
%b | Binario | $display("%b", a); |
%d | Decimale | $display("%d", count); |
%h | Esadecimale | $display("%h", data); |
%t | Tempo | $display("%t", $time); |
%0t | Tempo (senza spazi) | $display("%0t", $time); |
%s | Stringa | $display("%s", "Hello"); |
Regole importanti
| Regola | Spiegazione |
|---|---|
$display stampa una volta | Utile per intestazioni e risultati finali |
$monitor stampa a ogni modifica | Utile per monitorare i segnali |
È attivo un solo $monitor | L'ultimo sostituisce il precedente |
Usa $finish per fermare | Altrimenti la simulazione potrebbe continuare all'infinito |
Sfida
Aggiungi le istruzioni $display e $monitor mancanti a questo testbench.
Cosa fare:
- Aggiungi
$displayper stampare un'intestazione: "Testing OR Gate" - Aggiungi
$monitorper stampare il tempo, x, y e z ogni volta che cambia un segnale. Formato: "Time %0t: x=%b, y=%b, z=%b" - Aggiungi
$displayalla fine per stampare "Test complete"
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
// TODO: Añade el encabezado con $display "Testing OR Gate"
// TODO: Añade $monitor para seguir el tiempo, x, y, z
// Formato: "Time %0t: x=%b, y=%b, z=%b"
// Aplica los estímulos
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
// TODO: Añade $display "Test complete"
$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