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. Im Gegensatz zur for-Schleife verfügt sie über keinen integrierten Zähler. Du musst die Schleifenvariable selbst aktualisieren.
Eine while-Schleife überprüft vor jeder Iteration eine Bedingung. Wenn die Bedingung wahr ist, wird die Schleife ausgeführt. Wenn sie falsch ist, wird die Schleife beendet.
Syntax:
while (condition) begin
// Code zum Wiederholen
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- vs. For-Schleife
| For-Schleife | While-Schleife | |
|---|---|---|
| Zähler | Integriert | Du verwaltest ihn |
| Wann verwenden? | Bekannte Anzahl von Iterationen | Unbekannt, wann die Schleife endet |
| Syntax | for (i=0; i<5; i=i+1) | while (i < 5) |
While-Schleife in Testbenches
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 | Andernfalls endet die Schleife nie |
Schleifenvariable muss integer oder reg sein | Kann nicht wire sein |
begin/end für mehrere Anweisungen verwenden | Für mehr als eine Zeile erforderlich |
Aufgabe
Aufgabe:
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 solange i < 3
// Innerhalb 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