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)
endmodulePiù 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;Sfida
Aggiungi le istruzioni assign mancanti in base alle attività.
Cosa fare:
- Fai in modo che
and_resultsia uguale ainput_a AND input_b(bit a bit) - Fai in modo che
or_resultsia uguale ainput_a OR input_b(bit a bit) - Fai in modo che
xor_resultsia uguale ainput_a XOR input_b(bit a bit) - Fai in modo che
not_resultsia uguale aNOT 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
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