Operator Reduksi
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 25 dari 90.
Operator reduksi bekerja pada semua bit dari satu vektor dan mereduksinya menjadi hasil satu bit. Tidak seperti operator bitwise yang membandingkan dua angka bit demi bit, operator reduksi menerima satu angka dan melakukan operasi pada semua bitnya untuk menghasilkan satu nilai.
| Operator | Operasi | Hasil |
|---|---|---|
& | AND reduksi | 1 jika semua bit bernilai 1 |
| | OR reduksi | 1 jika setidaknya satu bit bernilai 1 |
^ | XOR reduksi | 1 jika jumlah bit yang bernilai 1 ganjil |
~& | NAND reduksi | 0 jika semua bit bernilai 1 |
~| | NOR reduksi | 0 jika setidaknya satu bit bernilai 1 |
~^ | XNOR reduksi | 1 jika jumlah bit yang bernilai 1 genap |
Cara Kerjanya
AND reduksi (&):
&4'b1111 = 1 // all bits are 1
&4'b1011 = 0 // tidak semua bit bernilai 1
&4'b0000 = 0 // all bits are 0Reduksi OR (|):
|4'b0000 = 0 // no bits are 1
|4'b0100 = 1 // setidaknya satu bit bernilai 1
|4'b1111 = 1 // all bits are 1XOR reduksi (^):
^4'b1010 = 0 // two 1's (even) → 0
^4'b1000 = 1 // one 1 (odd) → 1
^4'b1111 = 0 // empat angka 1 (genap) → 0Contoh Kode
module reduction_demo;
reg [3:0] a, b, c;
reg and_red, or_red, xor_red;
initial begin
a = 4'b1111;
b = 4'b1010;
c = 4'b1000;
and_red = &a; // 1111 → 1
or_red = |b; // 1010 → 1
xor_red = ^c; // 1000 → 1
$display("&4'b1111 = %d", and_red);
$display("|4'b1010 = %d", or_red);
$display("^4'b1000 = %d", xor_red);
$finish;
end
endmoduleOutput:
&4'b1111 = 1
|4'b1010 = 1
^4'b1000 = 1Penggunaan Umum
Periksa apakah semua bit bernilai 1:
all_ones = &data; // 1 jika data == 8'b11111111Periksa apakah ada bit yang bernilai 1:
any_one = |data; // 1 jika data != 0Periksa paritas (jumlah 1 ganjil):
odd_parity = ^data; // 1 jika jumlah angka 1 ganjilPeriksa apakah semua bit bernilai 0:
all_zeros = ~|data; // 1 jika data == 0Tantangan
Tulis ekspresi reduksi yang benar untuk setiap tugas.
Yang harus dilakukan:
- Periksa apakah semua bit pada
abernilai 1, lalu simpan hasilnya diall_ones - Periksa apakah ada bit pada
byang bernilai 1, lalu simpan hasilnya diany_one - Periksa apakah
cmemiliki jumlah bit bernilai 1 yang ganjil, lalu simpan hasilnya diodd_parity
Coba sendiri
module reduction_challenge;
reg [3:0] a, b, c;
reg all_ones, any_one, odd_parity;
initial begin
a = 4'b1111;
b = 4'b0100;
c = 4'b1011;
all_ones = ______; // all bits 1?
any_one = ______; // any bit 1?
odd_parity = ______; // odd number of 1's?
$display("&4'b1111 = %d", all_ones);
$display("|4'b0100 = %d", any_one);
$display("^4'b1011 = %d", odd_parity);
$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