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 eingebauten Zähler – Sie müssen die Schleifenvariable selbst aktualisieren.
Eine while-Schleife prüft eine Bedingung vor jeder Iteration. Wenn die Bedingung wahr ist, wird die Schleife ausgeführt. Wenn sie falsch ist, stoppt die Schleife.
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- vs. For-Schleife
| For-Schleife | While-Schleife | |
|---|---|---|
| Zähler | Integriert | Manuelle Verwaltung |
| Verwendung | Bekannte Anzahl an Iterationen | Unbekannt, wann die Schleife stoppt |
| Syntax | for (i=0; i<5; i=i+1) | while (i < 5) |
While-Schleife in Testbenches
While-Schleifen sind nützlich, wenn Sie nicht genau wissen, wie viele Iterationen Sie benötigen:
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 falsch werden | Andernfalls Endlosschleife |
| Schleifenvariable im Inneren aktualisieren | Oder die Schleife endet nie |
Schleifenvariable muss ein integer sein | Kann kein reg sein |
Verwenden Sie begin/end für mehrere Anweisungen | Erforderlich für mehr als eine Zeile |
Aufgabe
Was zu tun ist:
Füge die fehlende while-Schleife hinzu, um Zahlen von 0 bis 2 auszugeben.
Spickzettel
Die while-Schleife wiederholt einen Codeblock, solange eine Bedingung wahr ist. Sie müssen die Schleifenvariable manuell aktualisieren.
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
endWichtige Regeln:
- Die Schleifenvariable muss vom Typ
integersein (nichtreg) - Aktualisieren Sie die Schleifenvariable immer innerhalb der Schleife, um Endlosschleifen zu vermeiden
- Verwenden Sie
begin/endfür mehrere Anweisungen
While vs. For: Verwenden Sie for, wenn die Anzahl der Iterationen bekannt ist; verwenden Sie while, wenn die Abbruchbedingung dynamisch ist (z. B. bei der Suche nach einem Wert).
// Finding first set bit
while (data[i] != 1) begin
i = i + 1;
endProbier 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
// Im Inneren 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. 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