Operatory bitowe
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 23 z 90.
Operatory bitowe wykonują działania na każdym pojedynczym bicie liczby. W przeciwieństwie do operatorów arytmetycznych (+, -, *, /), które traktują liczby jako całość, operatory bitowe działają bit po bicie.
Dostępne operatory bitowe
| Operator | Operacja | Co robi |
|---|---|---|
& | AND | Bit wyjściowy ma wartość 1 tylko wtedy, gdy oba bity wejściowe mają wartość 1 |
| | OR | Bit wyjściowy ma wartość 1, jeśli co najmniej jeden bit wejściowy ma wartość 1 |
^ | XOR | Bit wyjściowy ma wartość 1, jeśli bity wejściowe są różne |
~ | NOT | Odwraca wszystkie bity (0 zmienia się w 1, a 1 w 0) |
Gdy używasz operatorów bitowych, Verilog traktuje liczby wewnętrznie jako zapisane binarnie.
reg [3:0] a, b;
a = 4'd10; // Decimal 10 = binary 1010
b = 4'd12; // Dziesiętne 12 = binarne 1100
c = a & b; // Działa tak samo jak bezpośrednie użycie zapisu binarnegoMożesz zapisywać liczby w systemie dziesiętnym, szesnastkowym lub binarnym: Verilog konwertuje je na system binarny na potrzeby operacji bitowych.
Jak działa operowanie bitowe
Każdy operator działa na parach bitów (lub pojedynczych bitach w przypadku NOT):
Przykład z liczbami 4-bitowymi:
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)Przykład kodu
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
endmoduleWynik:
a = 1010
b = 1100
a & b = 1000
a | b = 1110
a ^ b = 0110
~a = 0101Wyzwanie
Oblicz wyniki operacji bitowych dla podanych wartości.
Co zrobić:
- Oblicz
a & bi zapisz wynik wand_res - Oblicz
a | bi zapisz wynik wor_res - Oblicz
a ^ bi zapisz wynik wxor_res - Oblicz
~ai zapisz wynik wnot_res
Spróbuj swoich sił
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
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Wprowadzenie
Czym jest VerilogSprzęt a oprogramowanieTwój pierwszy modułKomentarzePoziomy abstrakcji projektu4Operatory, część 1
Operatory arytmetyczneOperator moduloOperatory porównaniaPowtórka — prosta matematykaOperatory bitowe7Przypisania i bramki
Przypisanie ciągłePrzypisanie z operatoramiWbudowane prymitywy bramekBramki AND, OR i NOTBramki XOR i XNORPodsumowanie — układ z bramek logicznych10Podejmowanie decyzji
Instrukcja ifIf-elsePowtórka – prosty komparatorInstrukcja caseCaseX i CaseZPowtórka – projektowanie ALU13Odmierzanie czasu i opóźnienia
Czym są opóźnieniaOpóźnienia bramekOpóźnienia przypisańDyrektywa timescaleGenerowanie zegaraPodsumowanie — kontrola czasu2Typy danych
Typ WireTyp RegLiczby całkowite i rzeczywisteWektoryTabliceParametryPowtórka — deklarowanie sygnałów5Operatory — część 2
Operatory logiczneOperatory redukcjiOperatory przesunięciaOperator konkatenacjiOperator warunkowyPowtórzenie — wyzwanie z operatorami11Pętle
Pętla forPętla whilePętla repeatPętla nieskończonaInstrukcja wyłączaniaPowtórka — wzorce pętli3System liczbowy
Reprezentacja binarnaLiczby o określonej szerokościLiczby o nieokreślonej szerokościLiczby ujemneWartości specjalne X i ZPodsumowanie — formaty liczb6Moduły
Struktura modułuPorty wejściowe i wyjściowePorty dwukierunkoweInstancjonowanie modułuMapowanie portów według nazwMapowanie portów według kolejnościPodsumowanie — zbuduj moduł9Bloki proceduralne
Blok alwaysBlok initialLista czułościPrzypisanie blokującePrzypisanie nieblokującePodsumowanie — always a initial12Projekt multipleksera
Projekt multipleksera 2 do 1Projekt multipleksera 4 do 115Sterownik sygnalizacji świetlnej
Definiowanie stanówLogika maszyny stanówPoćwicz samodzielnie: Kompilator Verilog online