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 condition true (1) ist, executes der Code darin. Wenn die condition false (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 Start 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. Obwohl hier nur eine Anweisung steht, ist die Verwendung von begin und end aus Gründen der Konsistenz dennoch eine gute Praxis.
If-Anweisung in Always-Block
always @(posedge clk) begin
if (reset)
count <= 0;
endHinweis: Für ein einzelnes statement sind begin und end optional. Beispielweise wird im always-Block oben kein begin/end nach if benötigt, da er nur ein statement hat.
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 |
|---|---|
condition kann jeder beliebige Ausdruck sein | Werte ungleich null (und bekannte Werte) werden als true behandelt, null als false |
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üge die fehlende
if-Anweisung hinzu, damit dies funktioniert.
- Wenn
enable1ist, sollteoutgleicha & bsein - Wenn
enable0ist, sollteout0bleiben (sich nicht ändern)
Der Startcode initialisiert out = 0 und testet beide Fälle.
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