Uso dei task di sistema
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 77 di 90.
I task di sistema sono comandi integrati in Verilog che iniziano con il simbolo del dollaro ($). Svolgono funzioni utili, come stampare messaggi, terminare la simulazione e creare file di forme d’onda.
Abbiamo già trattato $display, $monitor, $dumpfile e $dumpvars nelle lezioni precedenti. In questa lezione esamineremo altre attività di sistema utili nei testbench.
Attività di sistema aggiuntive
| Attività di sistema | Scopo |
|---|---|
$time | Restituisce il tempo corrente della simulazione |
$finish | Termina la simulazione |
$stop | Mette in pausa la simulazione |
$random | Genera un numero casuale |
$time
Restituisce il tempo corrente della simulazione. Utile per tenere traccia di quando si verificano gli eventi.
$display("Current time is %0t", $time);$finish
Termina la simulazione. Usalo sempre alla fine del tuo testbench.
$finish;$stop
Mette in pausa la simulazione. Può essere ripresa con un comando del simulatore. Utile per il debug.
$stop;$random
Genera un numero casuale. Utile per creare stimoli di test casuali.
reg [7:0] rand_value;
rand_value = $random;Esempio con più task di sistema
module system_tasks_demo;
reg [7:0] data;
integer i;
initial begin
$display("Simulation started at time %0t", $time);
for (i = 0; i < 5; i = i + 1) begin
data = $random;
$display("Random value %d: %b", i, data);
end
$stop;
#10 $display("Resumed at time %0t", $time);
$display("Simulation finished at time %0t", $time);
$finish;
end
endmoduleSfida
Aggiungi le attività di sistema mancanti a questo testbench.
Cosa fare:
- Aggiungi
$displayper stampare l’ora corrente all’inizio - Aggiungi
$displayper stampare l’ora corrente alla fine - Aggiungi
$finishper terminare la simulazione
Provalo tu
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// TODO: Aggiungi $display con l'ora corrente all'inizio
// Formato: "Start time: %0t"
$monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
// TODO: Aggiungi $display con l'ora corrente alla fine
// Formato: "End time: %0t"
// TODO: Aggiungi $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