Menu
Coddy logo textTech

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 sistemaScopo
$timeRestituisce il tempo corrente della simulazione
$finishTermina la simulazione
$stopMette in pausa la simulazione
$randomGenera 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
endmodule
challenge icon

Sfida

Aggiungi le attività di sistema mancanti a questo testbench.

Cosa fare:

  1. Aggiungi $display per stampare l’ora corrente all’inizio
  2. Aggiungi $display per stampare l’ora corrente alla fine
  3. Aggiungi $finish per 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
endmodule
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Verilog online