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 Ganzwerte behandeln, arbeiten bitweise Operatoren Bit für Bit.
Verfügbare bitweise Operatoren
| Operator | Operation | Beschreibung |
|---|---|---|
& | AND | Das Ergebnisbit ist nur dann 1, wenn beide Eingangsbits 1 sind |
| | OR | Das Ergebnisbit ist 1, wenn mindestens ein Eingangsbit 1 ist |
^ | XOR | Das Ergebnisbit ist 1, wenn die Eingangsbits unterschiedlich sind |
~ | NOT | Invertiert alle Bits (0 wird zu 1, 1 wird zu 0) |
Wenn Sie bitweise Operatoren verwenden, behandelt Verilog die Zahlen im Hintergrund als Binärzahlen.
reg [3:0] a, b;
a = 4'd10; // Dezimal 10 = binär 1010
b = 4'd12; // Dezimal 12 = binär 1100
c = a & b; // Funktioniert genauso wie die direkte Verwendung von BinärzahlenSie können Zahlen dezimal, hexadezimal oder binär schreiben – Verilog konvertiert sie für bitweise Operationen in das Binärformat.
Wie Bitweise Operatoren funktionieren
Jeder Operator arbeitet auf Bit-Paaren (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)Code-Beispiel
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
Berechnen Sie die bitweisen Ergebnisse für die angegebenen Werte.
Was zu tun ist:
- Berechnen Sie
a & bund speichern Sie es inand_res - Berechnen Sie
a | bund speichern Sie es inor_res - Berechnen Sie
a ^ bund speichern Sie es inxor_res - Berechnen Sie
~aund speichern Sie es innot_res
Spickzettel
Bitweise Operatoren arbeiten auf jedem einzelnen Bit einer Zahl:
| Operator | Operation | Ausgabebit ist 1, wenn... |
|---|---|---|
& | AND | Beide Eingabebits 1 sind |
| | OR | Mindestens ein Eingabebit 1 ist |
^ | XOR | Eingabebits unterschiedlich sind |
~ | NOT | Alle Bits umgekehrt werden (unär) |
// a = 1010, b = 1100
a & b = 1000 // AND
a | b = 1110 // OR
a ^ b = 0110 // XOR
~a = 0101 // NOT
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. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen