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 | İşlem | Sonuç |
|---|---|---|
& | İndirgeme AND | all bits 1 ise 1 |
| | İndirgeme OR | en az one bit 1 ise 1 |
^ | İndirgeme XOR | odd number bit 1 ise 1 |
~& | İndirgeme NAND | all bits 1 ise 0 |
~| | İndirgeme NOR | en az one bit 1 ise 0 |
~^ | İndirgeme XNOR | even 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) → 0Kod Ö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 = 1Yaygın Kullanımlar
Tüm bitlerin 1 olup olmadığını kontrol et:
all_ones = &data; // data == 8'b11111111 ise 1Herhangi bir bitin 1 olup olmadığını kontrol edin:
any_one = |data; // data != 0 ise 1Pariteyi kontrol et (odd number of 1'ler):
odd_parity = ^data; // 1'lerin sayısı tek ise 1Tüm bitlerin 0 olup olmadığını kontrol edin:
all_zeros = ~|data; // data == 0 ise 1Görev
Her görev için doğru reduction ifadelerini yazın.
Yapılacaklar:
adeğerindeki all bits değerlerinin 1 olup olmadığını kontrol edin ve sonucuall_onesiçine kaydedinbdeğerindeki herhangi bir bitin 1 olup olmadığını kontrol edin ve sonucuany_oneiçine kaydedincdeğerinin odd number of 1's içerip içermediğini kontrol edin ve sonucuodd_parityiç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
endmoduleBu 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
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicKendi başına pratik yap: Online Verilog derleyicisi