Bitwise Operators
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 Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler