Bitsel Operatörler
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 23 / 90.
Bitsel operatörler, bir sayının her bir biti üzerinde işlem gerçekleştirir. Sayıları bütün değerler olarak ele alan aritmetik operatörlerin (+, -, *, /) aksine, bitsel operatörler bit bit çalışır.
Kullanılabilir Bit Düzeyinde İşleçler (Bitwise Operators)
| İşleç | İşlem | Ne İşe Yarar |
|---|---|---|
& | AND | Yalnızca her iki girdi biti de 1 ise çıktı biti 1 olur |
| | OR | Girdi bitlerinden en az biri 1 ise çıktı biti 1 olur |
^ | XOR | Girdi bitleri farklı ise çıktı biti 1 olur |
~ | NOT | Tüm bitleri tersine çevirir (0, 1 olur; 1, 0 olur) |
Bit bazlı operatörleri kullandığınızda, Verilog perde arkasında sayıları ikili (binary) olarak ele alır.
reg [3:0] a, b;
a = 4'd10; // Decimal 10 = binary 1010
b = 4'd12; // Ondalık 12 = ikili 1100
c = a & b; // Doğrudan ikili kullanmakla aynı şekilde çalışırSayıları onluk, hexadecimal veya ikilik tabanda yazabilirsiniz; Verilog, bit düzeyinde işlemler için bunları ikilik tabana dönüştürür.
Bitsel İşlemler Nasıl Çalışır
Her bir operatör bit çiftleri üzerinde (veya NOT için tek bitler üzerinde) çalışır:
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 = 0101Görev
Verilen değerler için bit düzeyindeki sonuçları hesaplayın.
Ne yapılmalı:
a & bişlemini hesaplayın veand_resdeğişkenine saklayına | bişlemini hesaplayın veor_resdeğişkenine saklayına ^ bişlemini hesaplayın vexor_resdeğişkenine saklayın~aişlemini hesaplayın venot_resdeğişkenine saklayın
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
endmoduleBu 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
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüKarşılaştırma OperatörleriÖzet - Basit MatematikBitsel Operatörler7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND OR NOT KapılarıXOR XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Yapıları
If İfadesiIf - ElseÖzet - Basit KarşılaştırıcıCase İfadesiCasex ve CasezÖzet - ALU Tasarımı5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörÖzet - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüRepeat DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiÖzet - Döngü Kalıpları3Sayı Sistemleri
İkilik GösterimBoyutlandırılmış SayılarBoyutlandırılmamış SayılarNegatif SayılarÖzel Değerler X ve ZÖzet - Sayı Formatları6Modüller
Modül YapısıGiriş ve Çıkış PortlarıInout PortlarıModül Örneklendirmeİsme Göre Port EşlemeSıraya Göre Port EşlemeÖzet - Bir Modül Oluşturun9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiEngelleyici AtamaEngelleyici Olmayan AtamaÖzet - Always vs Initial15Trafik Işığı Kontrolcüsü
Durumları TanımlamaDurum Makinesi Mantığı