Menu
Coddy logo textTech

İndirgeme Operatörleri

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

İndirgeme operatörleri, tek bir vektörün tüm bitleri üzerinde çalışır ve bunları tek bitlik bir sonuca 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 ANDtüm bitler 1 ise 1
|İndirgeme ORen az bir bit 1 ise 1
^İndirgeme XORtek sayıda bit 1 ise 1
~&İndirgeme NANDtüm bitler 1 ise 0
~|İndirgeme NORen az bir bit 1 ise 0
~^İndirgeme XNORçift sayıda 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 indirgeme ifadelerini yazın.

Yapılacaklar:

  1. a içindeki tüm bitlerin 1 olup olmadığını kontrol edin ve sonucu all_ones içinde saklayın
  2. b içindeki herhangi bir bitin 1 olup olmadığını kontrol edin ve sonucu any_one içinde saklayın
  3. c değerinin tek sayıda 1 içerip içermediğini kontrol edin ve sonucu odd_parity içinde saklayın

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.

Temel Bilgiler bölümündeki tüm dersler

Kendi başına pratik yap: Online Verilog derleyicisi