While-Schleife
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 59 von 90.
Die while-Schleife wiederholt einen Codeblock, solange eine Bedingung wahr ist. Anders als die for-Schleife hat sie keinen eingebauten Zähler. Du musst die Schleifenvariable selbst aktualisieren.
Eine while-Schleife überprüft vor jedem Durchlauf eine Bedingung. Ist die Bedingung wahr, wird die Schleife ausgeführt. Ist sie falsch, wird die Schleife beendet.
Syntax:
while (condition) begin
// Zu wiederholender Code
endEinfaches Beispiel
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
endAusgabe:
i = 0
i = 1
i = 2
i = 3
i = 4Die Schleife läuft, solange i < 5.
While- und For-Schleife
| For-Schleife | While-Schleife | |
|---|---|---|
| Zähler | Integriert | Du verwaltest ihn |
| Wann verwenden? | Bekannte Anzahl von Durchläufen | Unbekannt, wann die Schleife endet |
| Syntax | for (i=0; i<5; i=i+1) | while (i < 5) |
While-Schleife in Testumgebungen
While-Schleifen sind nützlich, wenn du nicht genau weißt, wie viele Iterationen du benötigst:
integer i = 0;
while (i < 16) begin
$display("Testing value %d", i);
i = i + 1;
endEinen bestimmten Wert finden
integer i = 0;
reg [7:0] data;
while (data[i] != 1) begin
i = i + 1;
end
$display("First 1 found at position %d", i);Wichtige Regeln
| Regel | Erklärung |
|---|---|
| Bedingung muss false werden | Andernfalls entsteht eine Endlosschleife |
| Schleifenvariable innerhalb der Schleife aktualisieren | Sonst endet die Schleife nie |
Schleifenvariable muss integer oder reg sein | Sie kann nicht wire sein |
Für mehrere Anweisungen begin/end verwenden | Bei mehr als einer Zeile erforderlich |
Aufgabe
Was zu tun ist:
Füge die fehlende while-Schleife hinzu, um die Zahlen von 0 bis 2 auszugeben.
Probier es selbst
module while_challenge;
integer i;
initial begin
i = 0;
$display("Printing 0 to 2:");
// TODO: while-Schleife hinzufügen
// Schleife ausführen, solange i < 3
// Innerhalb der Schleife i ausgeben
// i um 1 erhöhen
$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