Menu
CoddyTech

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.

 

OperatorOperasiHasil
&AND reduksi1 jika semua bit bernilai 1
|OR reduksi1 jika setidaknya satu bit bernilai 1
^XOR reduksi1 jika jumlah bit yang bernilai 1 ganjil
~&NAND reduksi0 jika semua bit bernilai 1
~|NOR reduksi0 jika setidaknya satu bit bernilai 1
~^XNOR reduksi1 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 0

Reduksi OR (|):

|4'b0000 = 0   // no bits are 1
|4'b0100 = 1   // setidaknya satu bit bernilai 1
|4'b1111 = 1   // all bits are 1

XOR reduksi (^):

^4'b1010 = 0   // two 1's (even) → 0
^4'b1000 = 1   // one 1 (odd) → 1
^4'b1111 = 0   // empat angka 1 (genap) → 0

Contoh 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
endmodule

Output:

&4'b1111 = 1
|4'b1010 = 1
^4'b1000 = 1

Penggunaan Umum

Periksa apakah semua bit bernilai 1:

all_ones = &data;   // 1 jika data == 8'b11111111

Periksa apakah ada bit yang bernilai 1:

any_one = |data;    // 1 jika data != 0

Periksa paritas (jumlah 1 ganjil):

odd_parity = ^data; // 1 jika jumlah angka 1 ganjil

Periksa apakah semua bit bernilai 0:

all_zeros = ~|data; // 1 jika data == 0
challenge icon

Tantangan

Tulis ekspresi reduksi yang benar untuk setiap tugas.

Yang harus dilakukan:

  1. Periksa apakah semua bit pada a bernilai 1, lalu simpan hasilnya di all_ones
  2. Periksa apakah ada bit pada b yang bernilai 1, lalu simpan hasilnya di any_one
  3. Periksa apakah c memiliki jumlah bit bernilai 1 yang ganjil, lalu simpan hasilnya di odd_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
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