If - Else
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 53 von 90.
Die if-else-Anweisung ermöglicht es Ihnen, basierend auf 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 Ihrem Code einen Entscheidungspunkt: Führen Sie eine Aktion aus, wenn die Bedingung wahr ist, und eine andere, wenn die Bedingung falsch ist.
Syntax:
if (condition) begin
// Wird ausgeführt, wenn die Bedingung wahr (1) ist
end else begin
// Wird ausgeführt, wenn die Bedingung falsch (0) ist
endEinfaches Beispiel
if (reset) begin
count = 0;
end else begin
count = count + 1;
end- Wenn
reset1 ist → wirdcount0 - Wenn
reset0 ist → erhöht sichcountum 1
Mehrere Anweisungen
Verwenden Sie begin und end, wenn Sie mehr als eine Anweisung haben:
if (enable) begin
out = data_in;
valid = 1;
end else begin
out = 0;
valid = 0;
endIf-Else mit mehreren Bedingungen
Sie können 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 | Sie können if ohne else verwenden |
else gehört zum nächsten if | Vorsicht bei Verschachtelungen |
Verwenden Sie begin/end für mehrere Anweisungen | Erforderlich für mehr als eine Zeile |
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.
Spickzettel
Die if-else-Anweisung führt basierend auf einer Bedingung einen von zwei Blöcken aus:
if (condition) begin
// Wird ausgeführt, wenn die Bedingung wahr (1) ist
end else begin
// Wird ausgeführt, wenn die Bedingung falsch (0) ist
endVerketten Sie mehrere Bedingungen mit else if:
if (a > b) begin
max = a;
end else if (b > a) begin
max = b;
end else begin
max = a; // a und b sind gleich
endelseist optional- Verwenden Sie
begin/end, wenn sich mehrere Anweisungen in einem Block befinden elsegehört immer zum nächstgelegenenif
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. 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