Menu
Coddy logo textTech

Assegnazioni con operatori

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

Una volta compreso l’assegnamento continuo, puoi combinarlo con gli operatori per creare logica utile. 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;

Scorrimento:

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 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 un'unica 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. Fai in modo che and_result sia uguale a input_a AND input_b (bit a bit)
  2. Fai in modo che or_result sia uguale a input_a OR input_b (bit a bit)
  3. Fai in modo che xor_result sia uguale a input_a XOR input_b (bit a bit)
  4. Fai in modo che not_result sia 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