Menu
Coddy logo textTech

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
endmodule

Ogni 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

MetodoIdeale perEsempio
Assegnazioni sequenzialiTest semplicia = 0; b = 0; #10;
Ciclo forTestare tutte le combinazionifor (i = 0; i < 4; i++)
Ciclo repeatRipetere schemirepeat (10) #5 clk = ~clk;
Ciclo foreverSegnali continuiforever #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;
end

Metodo 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;
end

Questo 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;
end

Metodo 4: Ciclo infinito

Utile per segnali continui come i clock.

initial begin
  clk = 0;
  forever #5 clk = ~clk;
end

Regole importanti

RegolaSpiegazione
Usa ritardi tra le assegnazioni dello stimolo#10 consente al DUT di rispondere
Usa reg per i segnali di stimoloPerché cambiano nel tempo
Aggiungi $finish alla finePer arrestare la simulazione
challenge icon

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):

  1. Su ogni riga, imposta i valori di x e y
  2. Aggiungi #10 per un ritardo
  3. Aggiungi $display per 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
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