Assegnazione continua
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 37 di 90.
Nell'hardware, una connessione è un filo fisico che collega due punti di un circuito. Una volta posizionato il filo, la connessione è permanente e sempre attiva. Se cambia un'estremità, l'altra cambia immediatamente.
In Verilog, ci serve un modo per modellare questo comportamento. Vogliamo trasferire un valore su un filo e mantenerlo collegato per sempre. Il processo per farlo si chiama assegnazione continua.
L'assegnazione continua usa la parola chiave assign per creare una connessione permanente tra un wire e un'espressione. Il wire assume continuamente il valore dell'espressione, proprio come un filo fisico.
Immaginalo come saldare un filo anziché scrivere un valore una sola volta.
Sintassi
assign wire_name = expression;| Parte | Significato |
|---|---|
assign | Parola chiave che avvia l'assegnazione continua |
wire_name | Il wire pilotato (non può essere reg) |
expression | Il valore che pilota il wire |
Esempio semplice
wire out;
assign out = a & b;Questo significa: out è sempre uguale a a AND b. Ogni volta che a o b cambia, out cambia immediatamente.
Come funziona
A differenza di un reg che memorizza un valore, un wire con assegnazione continua viene aggiornato costantemente:
module continuous_demo;
reg a, b;
wire c;
assign c = a & b; // c sigue el resultado de a AND b en todo momento
initial begin
a = 0; b = 0;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0
a = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0 (1&0=0)
b = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=1 (1&1=1)
$finish;
end
endmoduleOutput:
a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1Ogni volta che a o b cambia, c si aggiorna automaticamente.
Assegnazioni multiple
Puoi avere più assegnazioni continue in un modulo:
module multiple_assign (
input a, b, c,
output x, y
);
assign x = a & b;
assign y = x | c; // y dipende da x
endmoduleTutte le assegnazioni vengono eseguite in parallelo, continuamente.
Usi comuni
Le assegnazioni continue vengono usate per:
- Logica combinatoria semplice (AND, OR, XOR)
- Collegare i fili tra loro
- Creare buffer tri-state
- Pilotare le uscite tramite espressioni combinatorie
Sfida
Cosa fare:
- Aggiungi l'assegnazione continua mancante che rende
zuguale ax AND y.
Provalo tu
module continuous_challenge (
input x,
input y,
output z
);
// TODO: Aggiungi l'assegnazione continua mancante che rende z uguale a x AND y
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