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
| Operator | Operasi | Fungsinya |
|---|---|---|
& | AND | Bit keluaran bernilai 1 hanya jika kedua bit masukan bernilai 1 |
| | OR | Bit keluaran bernilai 1 jika setidaknya satu bit masukan bernilai 1 |
^ | XOR | Bit keluaran bernilai 1 jika bit masukan berbeda |
~ | NOT | Membalik 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 langsungKamu 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
endmoduleOutput:
a = 1010
b = 1100
a & b = 1000
a | b = 1110
a ^ b = 0110
~a = 0101Tantangan
Hitung hasil operasi bitwise untuk nilai yang diberikan.
Yang harus dilakukan:
- Hitung
a & bdan simpan diand_res - Hitung
a | bdan simpan dior_res - Hitung
a ^ bdan simpan dixor_res - Hitung
~adan simpan dinot_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
endmodulePelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
1Pengantar
Apa Itu VerilogPerangkat Keras vs Perangkat LunakModul PertamamuKomentarTingkat Abstraksi Desain4Operator Bagian 1
Operator AritmetikaOperator ModuloOperator PerbandinganUlasan, Matematika SederhanaOperator Bitwise7Penugasan dan Gerbang
Penugasan KontinuPenugasan dengan OperatorPrimitif Gerbang BawaanGerbang AND, OR, NOTGerbang XOR, XNORUlasan: Rangkaian Gerbang Logika10Pengambilan Keputusan
Pernyataan IfIf - ElseRangkuman: Komparator SederhanaPernyataan CaseCasex dan CasezRangkuman: Desain ALU5Operator Bagian 2
Operator LogikaOperator ReduksiOperator GeserOperator PenggabunganOperator KondisionalRangkuman, Tantangan Operator3Sistem Bilangan
Representasi BinerBilangan BerukuranBilangan Tanpa UkuranBilangan NegatifNilai Khusus X dan ZRingkasan: Format Bilangan6Modul
Struktur ModulPort Input dan OutputPort InoutInstansiasi ModulPemetaan Port Berdasarkan NamaPemetaan Port Berdasarkan UrutanRangkuman: Bangun Modul9Blok Prosedural
Blok alwaysBlok initialDaftar SensitivitasPenugasan BlockingPenugasan Non-BlockingRangkuman: always vs initial15Pengendali Lampu Lalu Lintas
Menentukan StatusLogika Mesin StatusLatihan sendiri: Compiler Verilog online