Operatory logiczne
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 24 z 90.
Operatory logiczne działają na całych wartościach i zwracają pojedynczy wynik: 1 (prawda) lub 0 (fałsz). W przeciwieństwie do operatorów bitowych, które działają bit po bicie, operatory logiczne traktują całą wartość jako prawdziwą (niezerową) lub fałszywą (zerową).
| Typ | Przykład | Wynik |
|---|---|---|
| Bitowe AND | 4'b1010 & 4'b1100 | 4'b1000 (wiele bitów) |
| Logiczne AND | (4'b1010 && 4'b1100) | 1 (pojedynczy bit) |
Dostępne operatory logiczne
| Operator | Znaczenie | Opis |
|---|---|---|
&& | Logiczne AND | Prawda, jeśli oba operandy są prawdziwe (różne od zera) |
|| | Logiczne OR | Prawda, jeśli co najmniej jeden operand jest prawdziwy |
! | Logiczne NOT | Prawda, jeśli operand jest fałszywy (równy zero) |
Jak działają
Logiczne AND (<strong>&&</strong>):
(5 && 3) // 1 (obie wartości są różne od zera)
(5 && 0) // 0 (druga wartość jest równa zeru)
(0 && 0) // 0 (obie wartości są równe zeru)Logiczne LUB (<strong>||</strong>):
(5 || 3) // 1 (co najmniej jedna wartość niezerowa)
(5 || 0) // 1 (pierwsza wartość niezerowa)
(0 || 0) // 0 (obie wartości równe zeru)Logiczne NOT (<strong>!</strong>):
!5 // 0 (wartość różna od zera staje się false)
!0 // 1 (zero staje się true)Przykład kodu
module logical_demo;
reg [3:0] a, b;
reg and_res, or_res, not_res;
initial begin
a = 5;
b = 0;
and_res = (a && b); // 5 && 0 = 0
or_res = (a || b); // 5 || 0 = 1
not_res = !a; // !5 = 0
$display("5 && 0 = %d", and_res);
$display("5 || 0 = %d", or_res);
$display("!5 = %d", not_res);
$finish;
end
endmoduleWynik:
5 && 0 = 0
5 || 0 = 1
!5 = 0Typowe zastosowanie
Operatory logiczne są używane w instrukcjach if i warunkach:
if (a && b) // Prawda, jeśli zarówno a, jak i b są różne od zera
$display("Both true");
if (a || b) // Prawda, jeśli co najmniej jedna wartość jest różna od zera
$display("At least one true");
if (!reset) // Prawda, gdy reset ma wartość 0
$display("Reset is inactive");Wyzwanie
Zapisz poprawne wyrażenia logiczne dla każdego zadania.
Co zrobić:
- Sprawdź, czy zarówno
value1, jak ivalue2są prawdziwe, i zapisz wynik wand_out - Sprawdź, czy
value1LUBvalue2jest prawdziwe, i zapisz wynik wor_out - Sprawdź, czy
value1jest fałszywe, i zapisz wynik wnot_out
Spróbuj swoich sił
module logical_challenge;
reg [3:0] value1, value2;
reg and_out, or_out, not_out;
initial begin
value1 = 4'd12;
value2 = 4'd5;
and_out = ______; // value1 && value2
or_out = ______; // value1 || value2
not_out = ______; // !value1
$display("%d && %d = %d", value1, value2, and_out);
$display("%d || %d = %d", value1, value2, or_out);
$display("!%d = %d", value1, not_out);
$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