Operatori di riduzione
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 25 di 90.
Gli operatori di riduzione agiscono su tutti i bit di un singolo vettore e li riducono a un risultato di un singolo bit. A differenza degli operatori bitwise, che confrontano due numeri bit per bit, gli operatori di riduzione prendono un numero ed eseguono un’operazione su tutti i suoi bit per produrre un unico risultato.
| Operatore | Operazione | Risultato |
|---|---|---|
& | AND di riduzione | 1 se tutti i bit sono 1 |
| | OR di riduzione | 1 se almeno un bit è 1 |
^ | XOR di riduzione | 1 se un numero dispari di bit è 1 |
~& | NAND di riduzione | 0 se tutti i bit sono 1 |
~| | NOR di riduzione | 0 se almeno un bit è 1 |
~^ | XNOR di riduzione | 1 se un numero pari di bit è 1 |
Come funzionano
AND di riduzione (<strong>&</strong>):
&4'b1111 = 1 // all bits are 1
&4'b1011 = 0 // non tutti i bit sono 1
&4'b0000 = 0 // all bits are 0OR di riduzione (<strong>|</strong>):
|4'b0000 = 0 // no bits are 1
|4'b0100 = 1 // almeno un bit è 1
|4'b1111 = 1 // all bits are 1XOR di riduzione (<strong>^</strong>):
^4'b1010 = 0 // two 1's (even) → 0
^4'b1000 = 1 // one 1 (odd) → 1
^4'b1111 = 0 // quattro 1 (pari) → 0Esempio di codice
module reduction_demo;
reg [3:0] a, b, c;
reg and_red, or_red, xor_red;
initial begin
a = 4'b1111;
b = 4'b1010;
c = 4'b1000;
and_red = &a; // 1111 → 1
or_red = |b; // 1010 → 1
xor_red = ^c; // 1000 → 1
$display("&4'b1111 = %d", and_red);
$display("|4'b1010 = %d", or_red);
$display("^4'b1000 = %d", xor_red);
$finish;
end
endmoduleOutput:
&4'b1111 = 1
|4'b1010 = 1
^4'b1000 = 1Usi comuni
Verifica se tutti i bit sono 1:
all_ones = &data; // 1 se data == 8'b11111111Verifica se almeno un bit è 1:
any_one = |data; // 1 se data != 0Verifica la parità (numero dispari di 1):
odd_parity = ^data; // 1 se il numero di 1 è dispariVerifica se tutti i bit sono 0:
all_zeros = ~|data; // 1 se data == 0Sfida
Scrivi le espressioni di riduzione corrette per ciascun compito.
Cosa fare:
- Verifica se tutti i bit di
asono 1 e memorizza il risultato inall_ones - Verifica se almeno un bit di
bè 1 e memorizza il risultato inany_one - Verifica se
cha un numero dispari di 1 e memorizza il risultato inodd_parity
Provalo tu
module reduction_challenge;
reg [3:0] a, b, c;
reg all_ones, any_one, odd_parity;
initial begin
a = 4'b1111;
b = 4'b0100;
c = 4'b1011;
all_ones = ______; // all bits 1?
any_one = ______; // any bit 1?
odd_parity = ______; // odd number of 1's?
$display("&4'b1111 = %d", all_ones);
$display("|4'b0100 = %d", any_one);
$display("^4'b1011 = %d", odd_parity);
$finish;
end
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