If – Else
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 53 von 90.
Die if-else-Anweisung ermöglicht es dir, abhängig von einer Bedingung zwischen zwei verschiedenen Aktionen zu wählen. Wenn die Bedingung wahr ist, wird ein Block ausgeführt. Wenn sie falsch ist, wird der andere Block ausgeführt.
Die if-else-Anweisung gibt deinem Code einen Entscheidungspunkt: Führe eine Sache aus, wenn die Bedingung wahr ist, und eine andere, wenn die Bedingung falsch ist.
Syntax:
if (condition) begin
// Wird ausgeführt, wenn condition true (1) ist
end else begin
// Wird ausgeführt, wenn condition false (0) ist
endEinfaches Beispiel
if (reset) begin
count = 0;
end else begin
count = count + 1;
end- Wenn
reset1 ist →countwird 0 - Wenn
reset0 ist →counterhöht sich um 1
Mehrere Anweisungen
Verwende begin und end, wenn du mehr als eine Anweisung hast:
if (enable) begin
out = data_in;
valid = 1;
end else begin
out = 0;
valid = 0;
endIf-Else mit mehreren Bedingungen
Du kannst if-else-Anweisungen verketten:
if (a > b) begin
max = a;
end else if (b > a) begin
max = b;
end else begin
max = a; // a und b sind gleich
endWichtige Regeln
| Regel | Erklärung |
|---|---|
else ist optional | Du kannst if ohne else verwenden |
else gehört zum nächstgelegenen if | Sei vorsichtig bei Verschachtelungen |
Verwende begin/end für mehrere Anweisungen | Für mehr als eine Zeile erforderlich |
Aufgabe
Was zu tun ist:
- Füge die fehlende
if-else-Anweisung hinzu, damit dies funktioniert. - Wenn
enable1 ist, sollteoutgleicha & bsein. - Wenn
enable0 ist, sollteoutgleicha | bsein.
Probier es selbst
module ifelse_challenge;
reg a, b, enable;
reg out;
initial begin
a = 1;
b = 0;
enable = 1;
// TODO: if-else-Anweisung hinzufügen
// Wenn enable 1 ist: out = a & b
// Sonst: out = a | b
$display("out = %d (should be 0 because 1&0=0)", 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