Menu
Coddy logo textTech

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

OperatorOperationBeschreibung
&ANDDas Ergebnisbit ist nur dann 1, wenn beide Eingangsbits 1 sind
|ORDas Ergebnisbit ist 1, wenn mindestens ein Eingangsbit 1 ist
^XORDas Ergebnisbit ist 1, wenn die Eingangsbits unterschiedlich sind
~NOTInvertiert 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ärzahlen

Sie 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
endmodule

Ausgabe:

a = 1010
b = 1100
a & b = 1000
a | b = 1110
a ^ b = 0110
~a    = 0101
challenge icon

Aufgabe

Berechnen Sie die bitweisen Ergebnisse für die angegebenen Werte.

Was zu tun ist:

  1. Berechnen Sie a & b und speichern Sie es in and_res
  2. Berechnen Sie a | b und speichern Sie es in or_res
  3. Berechnen Sie a ^ b und speichern Sie es in xor_res
  4. Berechnen Sie ~a und speichern Sie es in not_res

Spickzettel

Bitweise Operatoren arbeiten auf jedem einzelnen Bit einer Zahl:

OperatorOperationAusgabebit ist 1, wenn...
&ANDBeide Eingabebits 1 sind
|ORMindestens ein Eingabebit 1 ist
^XOREingabebits unterschiedlich sind
~NOTAlle 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
endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen