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 true (1) ist, wird der Code darin ausgeführt. Wenn die Bedingung false (0) ist, wird der Code übersprungen.
Syntax:
if (condition) begin
// Der Code wird ausgeführt, wenn condition 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 (wahr) ist, wird der Code zwischenbeginundendausgeführt →countwird 0 - Wenn
reset0 (falsch) 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 es hier nur eine Anweisung gibt, ist es aus Gründen der Einheitlichkeit dennoch eine gute Praxis, begin und end zu verwenden.
If-Anweisung im Always-Block
always @(posedge clk) begin
if (reset)
count <= 0;
endHinweis: Bei einer einzelnen Anweisung sind begin und end optional. Zum Beispiel wird im obigen always-Block nach if kein begin/end benötigt, da er nur eine Anweisung enthält.
Eine 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 |
|---|---|
| Die Bedingung kann ein beliebiger Ausdruck sein | Werte ungleich null (und bekannte Werte) werden als wahr behandelt, null als falsch |
begin / end sind für mehrere Anweisungen erforderlich | Wie { } in anderen Sprachen |
Ohne begin/end folgt nur eine Anweisung | Nur die nächste Anweisung gehört zum if |
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 bereitgestellte Code 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. 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