Menu
Coddy logo textTech

İndirgeme Operatörleri

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

İndirgeme (reduction) 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 bit düzeyinde (bitwise) operatörlerin aksine, indirgeme operatörleri tek bir sayı alır ve tek bir sonuç üretmek için bu sayının tüm bitleri üzerinde bir işlem gerçekleştirir.

 

OperatörİşlemSonuç
&İndirgeme AND (VE)Tüm bitler 1 ise 1
|İndirgeme OR (VEYA)En az bir bit 1 ise 1
^İndirgeme XOR (Özel VEYA)Tek sayıda bit 1 ise 1
~&İndirgeme NAND (VE DEĞİL)Tüm bitler 1 ise 0
~|İndirgeme NOR (VEYA DEĞİL)En az bir bit 1 ise 0
~^İndirgeme XNOR (Özel VEYA DEĞİL)Çift sayıda bit 1 ise 1

Nasıl Çalışırlar

İndirgeme VE (<strong>&</strong>):

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

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

|4'b0000 = 0   // hiçbir bit 1 değil
|4'b0100 = 1   // en az bir bit 1
|4'b1111 = 1   // tüm bitler 1

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

^4'b1010 = 0   // iki adet 1 (çift) → 0
^4'b1000 = 1   // bir adet 1 (tek) → 1
^4'b1111 = 0   // dört adet 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 edin:

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

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

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

Eşlik kontrolü (tek sayıda 1):

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 (reduction) ifadelerini yazın.

Ne yapmalı:

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

Kopya kağıdı

İndirgeme (reduction) operatörleri, tek bir vektörün tüm bitleri üzerinde çalışır ve bunları tek bitlik bir sonuca indirger.

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

Yaygın kullanımlar:

all_ones   = &data;   // tüm bitler 1 ise 1
any_one    = |data;   // herhangi bir bit 1 ise 1 (data != 0)
odd_parity = ^data;   // tek sayıda 1 varsa 1
all_zeros  = ~|data;  // data == 0 ise 1

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