Menu
CoddyTech

Assegnazioni con operatori

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

Una volta compresa l'assegnazione continua, puoi combinarla con gli operatori per creare logiche utili. L'istruzione assign può usare qualsiasi operatore per pilotare un wire.

Sintassi di base

assign wire_name = expression;

L’espressione può includere:

  • Operatori aritmetici (+, -, *, /)
  • Operatori bit a bit (&, |, ^, ~)
  • Operatori logici (&&, ||, !)
  • Operatori di confronto (>, <, ==, !=)
  • Operatori di shift (<<, >>)
  • Operatore condizionale (? :)

Esempi con operatori diversi

AND bit a bit:

assign out = a & b;

Addizione:

assign sum = a + b;

Confronto:

assign is_greater = (a > b);

Condizionale (multiplexer):

assign out = sel ? a : b;

Spostamento:

assign shifted = data << 2;

Concatenazione:

assign bus = {high_byte, low_byte};

Esempio di codice

module assign_operators (
  input [3:0] a, b,
  input sel,
  output [3:0] and_out,
  output [4:0] sum_out,
  output is_equal,
  output [3:0] mux_out
);
  
  assign and_out = a & b;           // AND bit a bit
  assign sum_out = a + b;           // Addizione
  assign is_equal = (a == b);       // Confronto
  assign mux_out = sel ? a : b;     // Condizionale (multiplexer)
  
endmodule

Più operatori in un'unica assegnazione

Puoi combinare gli operatori in una singola espressione:

assign result = (a & b) | (c ^ d);
assign final = (a + b) > (c - d);
assign parity = ^data;   // XOR di riduzione (numero dispari di 1)

Precedenza degli operatori

Verilog segue la precedenza standard degli operatori. Usa le parentesi ( ) per rendere chiara la tua intenzione:

// Poco chiaro
assign out = a & b | c;

// Chiaro
assign out = (a & b) | c;
challenge icon

Sfida

Aggiungi le istruzioni assign mancanti in base alle attività.

Cosa fare:

  1. Imposta and_result uguale a input_a AND input_b (bit a bit)
  2. Imposta or_result uguale a input_a OR input_b (bit a bit)
  3. Imposta xor_result uguale a input_a XOR input_b (bit a bit)
  4. Imposta not_result uguale a NOT input_a (bit a bit)

Provalo tu

module assign_challenge (
  input input_a,
  input input_b,
  output and_result,
  output or_result,
  output xor_result,
  output not_result
);
  
  // TODO: Aggiungi istruzioni assign per:
  // and_result = input_a & input_b
  // or_result  = input_a | input_b
  // xor_result = input_a ^ input_b
  // not_result = ~input_a

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