Menu
CoddyTech

İ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 XORBitlerin tek sayıda olanı 1 ise 1
~&İndirgeme NANDTüm bitler 1 ise 0
~|İndirgeme NOREn az bir bit 1 ise 0
~^İndirgeme XNORBitlerin çift sayıda olanı 1 ise 1

Nasıl Çalışırlar

İndirgeme AND (&):

&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 (|):

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

İndirgeme XOR (^):

^4'b1010 = 0   // two 1's (even) → 0
^4'b1000 = 1   // one 1 (odd) → 1
^4'b1111 = 0   // dört tane 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ım Alanları

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 et:

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

Pariteyi kontrol et (tek sayıda 1):

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

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

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 değişkeninin tüm bitlerinin 1 olup olmadığını kontrol edin ve sonucu all_ones içine kaydedin
  2. b değişkeninin herhangi bir bitinin 1 olup olmadığını kontrol edin ve sonucu any_one içine kaydedin
  3. c değişkeninde tek sayıda 1 olup olmadığını 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.

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

Kendi başına pratik yap: Online Verilog derleyicisi