Menu
CoddyTech

Operator Bitwise

Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 23 dari 90.

Operator bitwise melakukan operasi pada setiap bit secara terpisah dari suatu angka. Tidak seperti operator aritmetika (+, -, *, /) yang memperlakukan angka sebagai nilai utuh, operator bitwise bekerja bit demi bit.

Operator Bitwise yang Tersedia

OperatorOperasiFungsinya
&ANDBit keluaran bernilai 1 hanya jika kedua bit masukan bernilai 1
|ORBit keluaran bernilai 1 jika setidaknya satu bit masukan bernilai 1
^XORBit keluaran bernilai 1 jika bit masukan berbeda
~NOTMembalik semua bit (0 menjadi 1, 1 menjadi 0)

Saat kamu menggunakan operator bitwise, Verilog memperlakukan angka sebagai bilangan biner di balik layar.

reg [3:0] a, b;

a = 4'd10;      // Decimal 10 = binary 1010
b = 4'd12;      // Desimal 12 = biner 1100
c = a & b;      // Hasilnya sama seperti menggunakan bilangan biner secara langsung

Kamu dapat menulis angka dalam desimal, heksadesimal, atau biner. Verilog mengonversinya menjadi biner untuk operasi bitwise.

Cara Kerja Operasi Bitwise

Setiap operator bekerja pada pasangan bit (atau bit tunggal untuk NOT):

Contoh dengan bilangan 4-bit:

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)

Contoh Kode

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

Output:

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

Tantangan

Hitung hasil operasi bitwise untuk nilai yang diberikan.

Yang harus dilakukan:

  1. Hitung a & b dan simpan di and_res
  2. Hitung a | b dan simpan di or_res
  3. Hitung a ^ b dan simpan di xor_res
  4. Hitung ~a dan simpan di not_res

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Verilog online