Menu
Coddy logo textTech

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;
ParteSignificato
assignParola chiave che avvia l'assegnazione continua
wire_nameIl wire pilotato (non può essere reg)
expressionIl 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
endmodule

Output:

a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1

Ogni 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
endmodule

Tutte 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
challenge icon

Sfida

Cosa fare:

  1. Aggiungi l'assegnazione continua mancante che rende z uguale a x 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
  

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