Menu
Coddy logo textTech

Reduction Operators

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 25 / 90.

İndirgeme operatörleri, tek bir vektörün all bits değerleri üzerinde çalışır ve bunları single bit sonucuna indirger. İki sayıyı bit bit karşılaştıran bitsel operatörlerin aksine, indirgeme operatörleri bir sayı alır ve tek bir sonuç üretmek için tüm bitleri üzerinde bir işlem gerçekleştirir.

 

OperatörİşlemSonuç
&İndirgeme ANDall bits 1 ise 1
|İndirgeme ORen az one bit 1 ise 1
^İndirgeme XORodd number bit 1 ise 1
~&İndirgeme NANDall bits 1 ise 0
~|İndirgeme NORen az one bit 1 ise 0
~^İndirgeme XNOReven number bit 1 ise 1

Nasıl Çalışırlar

Azaltma AND (<strong>&</strong>):

&4'b1111 = 1   // all bits are 1
&4'b1011 = 0   // tüm bitler 1 değil
&4'b0000 = 0   // all bits are 0

İndirgeme OR (<strong>|</strong>):

|4'b0000 = 0   // no bits are 1
|4'b0100 = 1   // en az bir bit 1
|4'b1111 = 1   // all bits are 1

İndirgeme XOR'u (<strong>^</strong>):

^4'b1010 = 0   // two 1's (even) → 0
^4'b1000 = 1   // one 1 (odd) → 1
^4'b1111 = 0   // dört 1 (çift) → 0

Kod Örneği

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

Çıktı:

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

Yaygın Kullanımlar

Tüm bitlerin 1 olup olmadığını kontrol et:

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

Herhangi bir bitin 1 olup olmadığını kontrol edin:

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

Pariteyi kontrol et (odd number of 1'ler):

odd_parity = ^data; // 1'lerin sayısı tek ise 1

Tüm bitlerin 0 olup olmadığını kontrol edin:

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

Görev

Her görev için doğru reduction ifadelerini yazın.

Yapılacaklar:

  1. a değerindeki all bits değerlerinin 1 olup olmadığını kontrol edin ve sonucu all_ones içine kaydedin
  2. b değerindeki herhangi bir bitin 1 olup olmadığını kontrol edin ve sonucu any_one içine kaydedin
  3. c değerinin odd number of 1's içerip içermediğini kontrol edin ve sonucu odd_parity içine kaydedin

Kendin dene

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 iconKendini test et

Bu 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

Kendi başına pratik yap: Online Verilog derleyicisi