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 Start und das Ende des Codeblocks zu markieren
- Wenn
reset1 (wahr) ist, wird der Code innerhalb vonbeginundendausgeführt →countwird zu 0 - Wenn
reset0 (falsch) ist, wird der darin enthaltene Code übersprungen → nichts geschieht
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 die Verwendung von begin und end weiterhin eine gute Praxis für Konsistenz.
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 werden im obigen always-Block nach if kein begin/end benötigt, da er nur eine Anweisung enthält.
Die Bedingung kann jeder 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 jeder Ausdruck sein | Werte ungleich null (und bekannte Werte) werden als wahr behandelt, null als falsch |
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
enablegleich1ist, sollteoutgleicha & bsein. - Wenn
enablegleich0ist, sollteout0bleiben (sich nicht ändern).
Der Ausgangscode 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