Operatori bitwise
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 23 di 90.
Gli operatori bit a bit eseguono operazioni su ogni singolo bit di un numero. A differenza degli operatori aritmetici (+, -, *, /) che trattano i numeri come valori interi, gli operatori bit a bit operano bit per bit.
Operatori bitwise disponibili
| Operatore | Operazione | Cosa fa |
|---|---|---|
& | AND | Il bit di output è 1 solo se entrambi i bit di input sono 1 |
| | OR | Il bit di output è 1 se almeno uno dei bit di input è 1 |
^ | XOR | Il bit di output è 1 se i bit di input sono diversi |
~ | NOT | Inverte tutti i bit (0 diventa 1, 1 diventa 0) |
Quando usi gli operatori bit a bit, Verilog tratta i numeri come binari dietro le quinte.
reg [3:0] a, b;
a = 4'd10; // Decimal 10 = binary 1010
b = 4'd12; // Decimale 12 = binario 1100
c = a & b; // Funziona allo stesso modo che usando direttamente il binarioPuoi scrivere i numeri in decimale, esadecimale o binario: Verilog li converte in binario per le operazioni bit a bit.
Come funzionano le operazioni bit a bit
Ogni operatore agisce su coppie di bit (o su singoli bit per NOT):
Esempio con numeri a 4 bit:
a = 1010 (binary)
b = 1100 (binary)
AND: a & b = 1000
(1&1=1, 0&1=0, 1&0=0, 0&0=0)
OR: a | b = 1110
(1|1=1, 0|1=1, 1|0=1, 0|0=0)
XOR: a ^ b = 0110
(1^1=0, 0^1=1, 1^0=1, 0^0=0)
NOT: ~a = 0101
(~1=0, ~0=1, ~1=0, ~0=1)Esempio di codice
module bitwise_demo;
reg [3:0] a, b;
reg [3:0] and_res, or_res, xor_res, not_res;
initial begin
a = 4'b1010;
b = 4'b1100;
and_res = a & b; // 1010 & 1100 = 1000
or_res = a | b; // 1010 | 1100 = 1110
xor_res = a ^ b; // 1010 ^ 1100 = 0110
not_res = ~a; // ~1010 = 0101
$display("a = %b", a);
$display("b = %b", b);
$display("a & b = %b", and_res);
$display("a | b = %b", or_res);
$display("a ^ b = %b", xor_res);
$display("~a = %b", not_res);
$finish;
end
endmoduleOutput:
a = 1010
b = 1100
a & b = 1000
a | b = 1110
a ^ b = 0110
~a = 0101Sfida
Calcola i risultati delle operazioni bit a bit per i valori forniti.
Cosa fare:
- Calcola
a & be memorizza il risultato inand_res - Calcola
a | be memorizza il risultato inor_res - Calcola
a ^ be memorizza il risultato inxor_res - Calcola
~ae memorizza il risultato innot_res
Provalo tu
module bitwise_challenge;
reg [3:0] a, b;
reg [3:0] and_res, or_res, xor_res, not_res;
initial begin
a = 4'b1101;
b = 4'b1011;
and_res = ______; // a & b
or_res = ______; // a | b
xor_res = ______; // a ^ b
not_res = ______; // ~a
$display("a = %b", a);
$display("b = %b", b);
$display("a & b = %b", and_res);
$display("a | b = %b", or_res);
$display("a ^ b = %b", xor_res);
$display("~a = %b", not_res);
$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