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
endAssegnazioni bloccanti nei blocchi always (logica combinatoria)
always @(*) begin
temp = a & b; // Passaggio 1
out = temp | c; // Passaggio 2 (usa temp dal passaggio 1)
endL'ordine è importante. Questo va bene per la logica combinatoria.
Bloccante vs non bloccante
Bloccante (=) | Non bloccante (<=) | |
|---|---|---|
| Esecuzione | Uno dopo l’altro | Tutti insieme |
| La riga successiva attende? | Sì | No |
| Usi | Logica combinatoria | Logica sequenziale (flip-flop) |
Importante: non usare assegnazioni bloccanti per i flip-flop
Sfida
Aggiungi le assegnazioni bloccanti mancanti per scambiare i valori di x e y usando una variabile temporanea.
Cosa fare:
- Assegna il valore di
xatemp(salva x in temp) - Assegna il valore di
yax(sposta y in x) - Assegna il valore di
tempay(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
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 operatori3Sistema 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