Menu
Coddy logo textTech

Bitsel Operatörler

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 23 / 90.

Bit düzeyinde operatörler (bitwise operators), bir sayının her bir biti üzerinde işlem yapar. Sayıları tam değerler olarak ele alan aritmetik operatörlerin (+, -, *, /) aksine, bit düzeyinde operatörler bit bit çalışır.

Mevcut Bit Düzeyinde Operatörler

OperatörİşlemNe Yapar
&ANDÇıkış biti, yalnızca her iki giriş biti de 1 ise 1 olur
|ORÇıkış biti, en az bir giriş biti 1 ise 1 olur
^XORÇıkış biti, giriş bitleri farklı ise 1 olur
~NOTTüm bitleri tersine çevirir (0, 1 olur; 1, 0 olur)

Bit düzeyinde operatörler kullandığınızda, Verilog arka planda sayıları ikili (binary) olarak ele alır.

reg [3:0] a, b;

a = 4'd10;      // Ondalık 10 = ikili 1010
b = 4'd12;      // Ondalık 12 = ikili 1100
c = a & b;      // Doğrudan ikili kullanmakla aynı şekilde çalışır

Sayıları ondalık, hex veya ikilik tabanda yazabilirsiniz—Verilog, bit düzeyinde işlemler için bunları ikilik tabana dönüştürür.

Bitwise Nasıl Çalışır?

Her operatör bit çiftleri üzerinde çalışır (veya NOT için tek bitler):

4 bitlik sayılarla örnek:

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)

Kod Örneği

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

Çıktı:

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

Görev

Verilen değerler için bit düzeyinde sonuçları hesaplayın.

Yapılması gerekenler:

  1. a & b hesaplayın ve and_res içinde saklayın
  2. a | b hesaplayın ve or_res içinde saklayın
  3. a ^ b hesaplayın ve xor_res içinde saklayın
  4. ~a hesaplayın ve not_res içinde saklayın

Kopya kağıdı

Bitsel operatörler bir sayının her bir biti üzerinde çalışır:

OperatörİşlemÇıkış biti şu durumda 1 olur...
&VE (AND)Her iki giriş biti de 1 olduğunda
|VEYA (OR)En az bir giriş biti 1 olduğunda
^ÖZEL VEYA (XOR)Giriş bitleri farklı olduğunda
~DEĞİL (NOT)Tüm bitleri tersine çevirir (tekli)
// a = 1010, b = 1100
a & b = 1000   // VE
a | b = 1110   // VEYA
a ^ b = 0110   // ÖZEL VEYA
~a    = 0101   // DEĞİL

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler