Logische Operatoren
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 24 von 90.
Logische Operatoren arbeiten mit ganzen Werten und geben ein einzelnes Ergebnis zurück: 1 (wahr) oder 0 (falsch). Anders als bitweise Operatoren, die Bit für Bit arbeiten, behandeln logische Operatoren den gesamten Wert entweder als wahr (ungleich null) oder als falsch (null).
| Typ | Beispiel | Ergebnis |
|---|---|---|
| Bitweises UND | 4'b1010 & 4'b1100 | 4'b1000 (mehrere Bits) |
| Logisches UND | (4'b1010 && 4'b1100) | 1 (ein Bit) |
Verfügbare logische Operatoren
| Operator | Bedeutung | Beschreibung |
|---|---|---|
&& | Logisches UND | Wahr, wenn beide Operanden wahr (ungleich null) sind |
|| | Logisches ODER | Wahr, wenn mindestens ein Operand wahr ist |
! | Logisches NICHT | Wahr, wenn der Operand falsch (null) ist |
So funktionieren sie
Logisches UND (&&):
(5 && 3) // 1 (beide ungleich null)
(5 && 0) // 0 (der zweite Wert ist null)
(0 && 0) // 0 (beide sind null)Logisches ODER (||):
(5 || 3) // 1 (mindestens einer ist nicht null)
(5 || 0) // 1 (der erste ist nicht null)
(0 || 0) // 0 (beide sind null)Logisches NICHT (!):
!5 // 0 (ein Wert ungleich null wird zu false)
!0 // 1 (null wird zu true)Codebeispiel
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
endmoduleAusgabe:
5 && 0 = 0
5 || 0 = 1
!5 = 0Häufige Verwendung
Logische Operatoren werden in if-Anweisungen und Bedingungen verwendet:
if (a && b) // Wahr, wenn sowohl a als auch b ungleich null sind
$display("Both true");
if (a || b) // Wahr, wenn mindestens einer der beiden Werte ungleich null ist
$display("At least one true");
if (!reset) // Wahr, wenn reset 0 ist
$display("Reset is inactive");Aufgabe
Schreibe die richtigen logischen Ausdrücke für jede Aufgabe.
Aufgabe:
- Prüfe, ob
value1UNDvalue2beide wahr sind, und speichere das Ergebnis inand_out. - Prüfe, ob
value1ODERvalue2wahr ist, und speichere das Ergebnis inor_out. - Prüfe, ob
value1falsch ist, und speichere das Ergebnis innot_out.
Probier es selbst
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
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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler