Operatory redukcji
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 25 z 90.
Operatory redukcji działają na wszystkich bitach pojedynczego wektora i redukują je do wyniku będącego pojedynczym bitem. W przeciwieństwie do operatorów bitowych, które porównują dwie liczby bit po bicie, operatory redukcji przyjmują jedną liczbę i wykonują operację na wszystkich jej bitach, aby uzyskać pojedynczy wynik.
| Operator | Działanie | Wynik |
|---|---|---|
& | Redukcyjne AND | 1, jeśli wszystkie bity mają wartość 1 |
| | Redukcyjne OR | 1, jeśli co najmniej jeden bit ma wartość 1 |
^ | Redukcyjne XOR | 1, jeśli nieparzysta liczba bitów ma wartość 1 |
~& | Redukcyjne NAND | 0, jeśli wszystkie bity mają wartość 1 |
~| | Redukcyjne NOR | 0, jeśli co najmniej jeden bit ma wartość 1 |
~^ | Redukcyjne XNOR | 1, jeśli parzysta liczba bitów ma wartość 1 |
Jak działają
Redukcyjne AND (<strong>&</strong>):
&4'b1111 = 1 // all bits are 1
&4'b1011 = 0 // nie wszystkie bity mają wartość 1
&4'b0000 = 0 // all bits are 0Redukcja OR (<strong>|</strong>):
|4'b0000 = 0 // no bits are 1
|4'b0100 = 1 // co najmniej jeden bit ma wartość 1
|4'b1111 = 1 // all bits are 1Redukcja XOR (<strong>^</strong>):
^4'b1010 = 0 // two 1's (even) → 0
^4'b1000 = 1 // one 1 (odd) → 1
^4'b1111 = 0 // cztery jedynki (parzysta liczba) → 0Przykład kodu
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
endmoduleWynik:
&4'b1111 = 1
|4'b1010 = 1
^4'b1000 = 1Typowe zastosowania
Sprawdź, czy wszystkie bity mają wartość 1:
all_ones = &data; // 1, jeśli data == 8'b11111111Sprawdź, czy którykolwiek bit ma wartość 1:
any_one = |data; // 1, jeśli data != 0Sprawdź parzystość (nieparzysta liczba jedynek):
odd_parity = ^data; // 1, jeśli liczba jedynek jest nieparzystaSprawdź, czy wszystkie bity mają wartość 0:
all_zeros = ~|data; // 1, jeśli data == 0Wyzwanie
Zapisz poprawne wyrażenia redukcyjne dla każdego zadania.
Co należy zrobić:
- Sprawdź, czy wszystkie bity
amają wartość 1, i zapisz wynik wall_ones - Sprawdź, czy którykolwiek bit
bma wartość 1, i zapisz wynik wany_one - Sprawdź, czy
czawiera nieparzystą liczbę jedynek, i zapisz wynik wodd_parity
Spróbuj swoich sił
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
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Wprowadzenie
Czym jest VerilogSprzęt a oprogramowanieTwój pierwszy modułKomentarzePoziomy abstrakcji projektu4Operatory, część 1
Operatory arytmetyczneOperator moduloOperatory porównaniaPowtórka — prosta matematykaOperatory bitowe7Przypisania i bramki
Przypisanie ciągłePrzypisanie z operatoramiWbudowane prymitywy bramekBramki AND, OR i NOTBramki XOR i XNORPodsumowanie — układ z bramek logicznych10Podejmowanie decyzji
Instrukcja ifIf-elsePowtórka – prosty komparatorInstrukcja caseCaseX i CaseZPowtórka – projektowanie ALU13Odmierzanie czasu i opóźnienia
Czym są opóźnieniaOpóźnienia bramekOpóźnienia przypisańDyrektywa timescaleGenerowanie zegaraPodsumowanie — kontrola czasu2Typy danych
Typ WireTyp RegLiczby całkowite i rzeczywisteWektoryTabliceParametryPowtórka — deklarowanie sygnałów5Operatory — część 2
Operatory logiczneOperatory redukcjiOperatory przesunięciaOperator konkatenacjiOperator warunkowyPowtórzenie — wyzwanie z operatorami11Pętle
Pętla forPętla whilePętla repeatPętla nieskończonaInstrukcja wyłączaniaPowtórka — wzorce pętli3System liczbowy
Reprezentacja binarnaLiczby o określonej szerokościLiczby o nieokreślonej szerokościLiczby ujemneWartości specjalne X i ZPodsumowanie — formaty liczb6Moduły
Struktura modułuPorty wejściowe i wyjściowePorty dwukierunkoweInstancjonowanie modułuMapowanie portów według nazwMapowanie portów według kolejnościPodsumowanie — zbuduj moduł9Bloki proceduralne
Blok alwaysBlok initialLista czułościPrzypisanie blokującePrzypisanie nieblokującePodsumowanie — always a initial12Projekt multipleksera
Projekt multipleksera 2 do 1Projekt multipleksera 4 do 115Sterownik sygnalizacji świetlnej
Definiowanie stanówLogika maszyny stanówPoćwicz samodzielnie: Kompilator Verilog online