Bitweise Operatoren
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 23 von 90.
Bitweise Operatoren führen Operationen auf jedem einzelnen Bit einer Zahl aus. Im Gegensatz zu arithmetischen Operatoren (+, -, *, /), die Zahlen als ganze Werte behandeln, arbeiten bitweise Operatoren Bit für Bit.
Verfügbare bitweise Operatoren
| Operator | Operation | Was er bewirkt |
|---|---|---|
& | AND | Das Ausgabebit ist nur dann 1, wenn beide Eingabebits 1 sind |
| | OR | Das Ausgabebit ist 1, wenn mindestens eines der Eingabebits 1 ist |
^ | XOR | Das Ausgabebit ist 1, wenn die Eingabebits verschieden sind |
~ | NOT | Kehrt alle Bits um (0 wird zu 1, 1 wird zu 0) |
Wenn du bitweise Operatoren verwendest, behandelt Verilog die Zahlen im Hintergrund als binär.
reg [3:0] a, b;
a = 4'd10; // Decimal 10 = binary 1010
b = 4'd12; // Dezimal 12 = binär 1100
c = a & b; // Funktioniert genauso wie die direkte Verwendung von BinärDu kannst Zahlen in Dezimal-, Hexadezimal- oder Binärform schreiben: Verilog konvertiert sie für bitweise Operationen in Binärform.
Funktionsweise bitweiser Operatoren
Jeder Operator arbeitet mit Bitpaaren (oder einzelnen Bits bei NOT):
Beispiel mit 4-Bit-Zahlen:
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)Codebeispiel
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
endmoduleAusgabe:
a = 1010
b = 1100
a & b = 1000
a | b = 1110
a ^ b = 0110
~a = 0101Aufgabe
Berechne die bitweisen Ergebnisse für die angegebenen Werte.
Was zu tun ist:
- Berechne
a & bund speichere das Ergebnis inand_res - Berechne
a | bund speichere das Ergebnis inor_res - Berechne
a ^ bund speichere das Ergebnis inxor_res - Berechne
~aund speichere das Ergebnis innot_res
Probier es selbst
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
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler