Reduktionsoperatoren
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 25 von 90.
Reduktionsoperatoren arbeiten auf allen Bits eines einzelnen Vektors und reduzieren diese zu einem Einzelbit-Ergebnis. Im Gegensatz zu bitweisen Operatoren, die zwei Zahlen Bit für Bit vergleichen, nehmen Reduktionsoperatoren eine Zahl und führen eine Operation über alle ihre Bits aus, um ein einzelnes Ergebnis zu erzeugen.
| Operator | Operation | Ergebnis |
|---|---|---|
& | Reduktions-UND | 1, wenn alle Bits 1 sind |
| | Reduktions-ODER | 1, wenn mindestens ein Bit 1 ist |
^ | Reduktions-XOR | 1, wenn eine ungerade Anzahl von Bits 1 ist |
~& | Reduktions-NAND | 0, wenn alle Bits 1 sind |
~| | Reduktions-NOR | 0, wenn mindestens ein Bit 1 ist |
~^ | Reduktions-XNOR | 1, wenn eine gerade Anzahl von Bits 1 ist |
Wie sie funktionieren
Reduktions-UND (<strong>&</strong>):
&4'b1111 = 1 // Alle Bits sind 1
&4'b1011 = 0 // Nicht alle Bits sind 1
&4'b0000 = 0 // Alle Bits sind 0Reduktions-OR (<strong>|</strong>):
|4'b0000 = 0 // kein Bit ist 1
|4'b0100 = 1 // mindestens ein Bit ist 1
|4'b1111 = 1 // alle Bits sind 1Reduktions-XOR (<strong>^</strong>):
^4'b1010 = 0 // zwei 1en (gerade) → 0
^4'b1000 = 1 // eine 1 (ungerade) → 1
^4'b1111 = 0 // vier 1en (gerade) → 0Code-Beispiel
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
endmoduleAusgabe:
&4'b1111 = 1
|4'b1010 = 1
^4'b1000 = 1Häufige Anwendungen
Prüfen, ob alle Bits 1 sind:
all_ones = &data; // 1, wenn data == 8'b11111111Prüfen, ob ein beliebiges Bit 1 ist:
any_one = |data; // 1 wenn data != 0Parität prüfen (ungerade Anzahl von 1en):
odd_parity = ^data; // 1, wenn ungerade Anzahl von 1enPrüfen, ob alle Bits 0 sind:
all_zeros = ~|data; // 1 wenn data == 0Aufgabe
Schreiben Sie die korrekten Reduktionsausdrücke für jede Aufgabe.
Was zu tun ist:
- Prüfen Sie, ob alle Bits von
a1 sind, und speichern Sie das Ergebnis inall_ones - Prüfen Sie, ob irgendein Bit von
b1 ist, und speichern Sie das Ergebnis inany_one - Prüfen Sie, ob
ceine ungerade Anzahl von 1en hat, und speichern Sie das Ergebnis inodd_parity
Spickzettel
Reduktionsoperatoren wirken auf alle Bits eines einzelnen Vektors und reduzieren diese auf ein Ergebnis von einem einzelnen Bit.
| Operator | Operation | Ergebnis |
|---|---|---|
& | Reduktions-AND | 1, wenn alle Bits 1 sind |
| | Reduktions-OR | 1, wenn mindestens ein Bit 1 ist |
^ | Reduktions-XOR | 1, wenn eine ungerade Anzahl von Bits 1 ist |
~& | Reduktions-NAND | 0, wenn alle Bits 1 sind |
~| | Reduktions-NOR | 0, wenn mindestens ein Bit 1 ist |
~^ | Reduktions-XNOR | 1, wenn eine gerade Anzahl von Bits 1 ist |
Häufige Anwendungen:
all_ones = &data; // 1 if all bits are 1
any_one = |data; // 1 if any bit is 1 (data != 0)
odd_parity = ^data; // 1 if odd number of 1's
all_zeros = ~|data; // 1 if data == 0Probier es selbst
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
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen