Menu
Coddy logo textTech

Assegnazione bloccante

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

Verilog ha due tipi di assegnazioni procedurali: bloccanti (=) e non bloccanti (<=). In questa lezione, ci concentreremo sull’assegnazione bloccante.

L'assegnazione bloccante usa l'operatore =. Si chiama «bloccante» perché blocca l'esecuzione dell'istruzione successiva finché l'assegnazione corrente non è completata. Il codice viene eseguito passo dopo passo, in ordine.

Sintassi:

variable = expression;

Quando usare l'assegnazione bloccante

L'assegnazione bloccante (=) si usa per la logica combinatoria: circuiti in cui le uscite cambiano immediatamente quando cambiano gli ingressi, senza clock e senza memoria.

Esempi di logica combinatoria:

  • Porte AND / OR / XOR
  • Addizionatori e sottrattori
  • Multiplexer
  • Decodificatori

Esempio in Verilog:

always @(*) begin
  sum = a + b;      // Assegnazione bloccante
  carry = a & b;    // Assegnazione bloccante
end

Assegnazioni bloccanti nei blocchi always (logica combinatoria)

always @(*) begin
  temp = a & b;    // Passaggio 1
  out = temp | c;  // Passaggio 2 (usa temp dal passaggio 1)
end

L'ordine è importante. Questo va bene per la logica combinatoria.

Bloccante vs non bloccante

 Bloccante (=)Non bloccante (<=)
EsecuzioneUno dopo l’altroTutti insieme
La riga successiva attende?SìNo
UsiLogica combinatoriaLogica sequenziale (flip-flop)

Importante: non usare assegnazioni bloccanti per i flip-flop

challenge icon

Sfida

Aggiungi le assegnazioni bloccanti mancanti per scambiare i valori di x e y usando una variabile temporanea.

Cosa fare:

  1. Assegna il valore di x a temp (salva x in temp)
  2. Assegna il valore di y a x (sposta y in x)
  3. Assegna il valore di temp a y (sposta x salvato in y)

Provalo tu

module swap;
  reg x, y;
  reg temp;
  
  initial begin
    x = 1;
    y = 0;
    
    $display("Before swap: x=%d, y=%d", x, y);
    
    // TODO: Passo 1 - Assegna x a temp
    
    // TODO: Passo 2 - Assegna y a x
    
    // TODO: Passo 3 - Assegna temp a y
    
    $display("After swap: x=%d, y=%d", x, y);
    $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