Menu
Coddy logo textTech

Istruzione if

Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 52 di 90.

L'istruzione if è un blocco decisionale che esegue il codice solo quando una condizione è vera. L'istruzione if verifica una condizione.

Se la condizione è vera (1), viene eseguito il codice al suo interno. Se la condizione è falsa (0), il codice viene saltato.

Sintassi:

if (condition) begin
  // Il codice viene eseguito quando condition è true
end

Esempio semplice

if (reset) begin
  count = 0;
end

In questo esempio:

  • begin e end vengono usati per indicare l'inizio e la fine del blocco di codice
  • Se reset è 1 (vero), viene eseguito il codice tra begin e end → count diventa 0
  • Se reset è 0 (falso), il codice al suo interno viene saltato → non succede nulla

begin e end funzionano come le parentesi graffe { } in altri linguaggi di programmazione. Raggruppano le istruzioni in modo che Verilog sappia quale codice appartiene alla condizione if. Anche se qui c’è una sola istruzione, usare begin e end è comunque una buona pratica per mantenere la coerenza.

Istruzione if in un blocco always

always @(posedge clk) begin
  if (reset)
    count <= 0;
end

Nota: per una singola istruzione, begin e end sono facoltativi. Ad esempio, nel blocco always qui sopra non è necessario begin/end dopo if, perché contiene una sola istruzione.

La condizione può essere qualsiasi espressione

if (a > b) begin
  max = a;
end

if (a && b) begin
  out = 1;
end

if (data == 8'hFF) begin
  match = 1;
end

Regole importanti

RegolaSpiegazione
La condizione può essere qualsiasi espressioneI valori diversi da zero (e noti) sono considerati veri, lo zero è considerato falso
begin / end necessari per più istruzioniCome { } in altri linguaggi
Senza begin/end, segue una sola istruzioneSolo la riga successiva
challenge icon

Sfida

Cosa fare:

  1. Aggiungi l'istruzione if mancante per farlo funzionare.
  • Quando enable è 1, out dovrebbe essere uguale a a & b
  • Quando enable è 0, out dovrebbe rimanere 0 (senza cambiare)

Il codice iniziale inizializza out = 0 e verifica entrambi i casi.

Provalo tu

module if_challenge;
  reg a, b, enable;
  reg out = 0;
  
  initial begin
    a = 1;
    b = 1;
    
    // Caso di test 1: enable = 1
    enable = 1;
    // TODO: aggiungi un'istruzione if (out = a & b)
    $display("enable=1: out = %d (should be 1)", out);
    
    // Caso di test 2: enable = 0
    enable = 0;
    out = 0; 
    // TODO: out deve rimanere 0
    $display("enable=0: out = %d (should be 0)", out);
    
    $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