If-Anweisung
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 52 von 90.
Die if-Anweisung ist ein Entscheidungsblock, der Code nur dann ausführt, wenn eine Bedingung wahr ist. Die if-Anweisung prüft eine Bedingung.
Wenn die Bedingung wahr (1) ist, wird der darin enthaltene Code ausgeführt. Wenn die Bedingung falsch (0) ist, wird der Code übersprungen.
Syntax:
if (condition) begin
// Code wird ausgeführt, wenn die Bedingung wahr ist
endEinfaches Beispiel
if (reset) begin
count = 0;
endIn diesem Beispiel:
beginundendwerden verwendet, um den Anfang und das Ende des Codeblocks zu markieren
- Wenn
reset1 (true) ist, wird der Code innerhalb vonbeginundendausgeführt →countwird 0 - Wenn
reset0 (false) ist, wird der Code darin übersprungen → nichts passiert
begin und end funktionieren wie geschweifte Klammern { } in anderen Programmiersprachen. Sie gruppieren Anweisungen, damit Verilog weiß, welcher Code zur if-Bedingung gehört. Auch wenn hier nur eine Anweisung steht, ist die Verwendung von begin und end aus Gründen der Konsistenz dennoch eine gute Praxis.
If-Anweisung im Always-Block
always @(posedge clk) begin
if (reset)
count <= 0;
endHinweis: Für eine einzelne Anweisung sind begin und end optional. Zum Beispiel ist im obigen always-Block kein begin/end nach if erforderlich, da er nur eine Anweisung enthält.
Bedingung kann ein beliebiger Ausdruck sein
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endWichtige Regeln
| Regel | Erklärung |
|---|---|
| Bedingung muss ein einzelnes Bit sein | Oder ein Ausdruck, der zu 0 oder 1 ausgewertet wird |
begin / end für mehrere Anweisungen erforderlich | Wie { } in anderen Sprachen |
Ohne begin/end folgt nur eine Anweisung | Nur die nächste Zeile |
Aufgabe
Was zu tun ist:
- Fügen Sie die fehlende
if-Anweisung hinzu, damit dies funktioniert.
- Wenn
enableden Wert1hat, sollteoutgleicha & bsein. - Wenn
enableden Wert0hat, sollteoutbei0bleiben (sich nicht ändern).
Der Startcode initialisiert out = 0 und testet beide Fälle.
Spickzettel
Die if-Anweisung führt Code nur aus, wenn eine Bedingung wahr (1) ist, und überspringt ihn, wenn sie falsch (0) ist.
if (condition) begin
// wird ausgeführt, wenn die Bedingung wahr ist
endFür eine einzelne Anweisung sind begin/end optional:
always @(posedge clk) begin
if (reset)
count <= 0;
endBedingungen können jeder Ausdruck sein, der zu 0 oder 1 ausgewertet wird:
if (a > b) begin max = a; end
if (a && b) begin out = 1; end
if (data == 8'hFF) begin match = 1; endWichtige Regeln:
- Verwenden Sie
begin/end, um mehrere Anweisungen zu gruppieren (wie{ }in anderen Sprachen) - Ohne
begin/endgehört nur die unmittelbar folgende Zeile zurif-Anweisung
Probier es selbst
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// Testfall 1: enable = 1
enable = 1;
// TODO: if-Anweisung hinzufügen (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// Testfall 2: enable = 0
enable = 0;
out = 0;
// TODO: out sollte 0 bleiben
$display("enable=0: out = %d (should be 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