While-Schleifen in VHDL meistern: Dynamische Iterationssteuerung
Aufbauend auf unserer früheren Erkundung von for-Schleifen widmet sich dieses Tutorial der while-Schleife – einem mächtigen Konstrukt, das Iterationen basierend auf dynamischen Bedingungen statt eines festen Bereichs steuert.
Die while-Schleife führt ihren Körper solange wiederholt aus, wie die angegebene Bedingung true bleibt. Das macht sie ideal für Szenarien, in denen die Anzahl der Iterationen von Laufzeitdaten oder komplexer Logik abhängt.
Dieser Beitrag gehört zur Serie „Basic VHDL Tutorials“.
Syntax
while <Bedingung> loop
-- Schleifenkörper
end loop;
Die <Bedingung> muss einen booleschen Wert ergeben. Sie kann ein einfacher Vergleich oder ein komplexerer Ausdruck sein. Die Bedingung wird vor jedem Durchlauf geprüft, sodass die Schleife nur fortgesetzt wird, solange sie true ist.
Bedingungsbeispiele
i < 10– wahr, solangeikleiner als 10 ist.i /= 10– wahr, solangeiungleich 10 ist.i >= 0 and i < 2**8– wahr für Werte von 0 bis 255.
Relationale Operatoren
| = | gleich |
| /= | ungleich |
| < | kleiner als |
| <= | kleiner oder gleich |
| > | größer als |
| >= | größer oder gleich |
Logische Operatoren
| not a | wahr, wenn a falsch ist |
| a and b | wahr, wenn a und b wahr sind |
| a or b | wahr, wenn a oder b wahr sind |
| a nand b | wahr, wenn a oder b falsch ist |
| a nor b | wahr, wenn a und b falsch sind |
| a xor b | wahr, wenn genau einer von a, b wahr ist |
| a xnor b | wahr, wenn a und b gleich sind |
Übung
Sehen Sie das Video-Tutorial unten, um zu erfahren, wie eine Variable eine while-Schleife in der Praxis steuert:
Beispielcode
entity T05_WhileLoopTb is end entity;
architecture sim of T05_WhileLoopTb is
begin
process is
variable i : integer := 0;
begin
while i < 10 loop
report "i=" & integer'image(i);
i := i + 2;
end loop;
wait;
end process;
end architecture;
Simulator-Ausgabe
VSIM 2> run # ** Note: i=0 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=2 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=4 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=6 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=8 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb
Analyse
Wir initialisieren i mit 0 und nutzen i < 10 als Schleifenwache. Da die Schleife i pro Zyklus um 2 erhöht, ist der letzte ausgegebene Wert 8. Im nächsten Durchlauf wertet die Bedingung zu false aus (10 ist nicht kleiner als 10), und die Schleife endet. Das nachfolgende wait; hält den Prozess unendlich an – ein gängiges Muster für Testbenches.

Wichtigste Erkenntnisse
- Die
while-Schleife läuft, solange ihre Bedingungtruebleibt. - Die Bedingung wird vor jeder Iteration geprüft.
- Variablen können innerhalb eines Prozesses deklariert und in der Schleife aktualisiert werden.
Machen Sie den Basic VHDL Quiz – Teil 1 oder fahren Sie mit dem nächsten Tutorial fort.
VHDL
- Wie Molybdän die moderne Industrie formt: Nutzung, Vorteile und Versorgungsdynamik
- String-Listen in VHDL erstellen: Best Practices & Beispiel
- VHDL-Testbench-Simulation sauber beenden
- PWM-Controller in VHDL implementieren: Design, Simulation & FPGA-Demo
- Zufallszahlen in VHDL generieren: Von Uniform zu OSVVM
- In-Prozess-Prozeduren für saubere VHDL-FSM-Entwürfe nutzen
- Impure Functions in VHDL nutzen: FSM-Lesbarkeit und Wartbarkeit steigern
- VHDL-Funktionen meistern: Praktischer Leitfaden für effizientes Design
- Endlicher Automat in VHDL entwerfen: Praktisches Ampel-Beispiel
- Schleiftechniken für Werkzeugschleifmaschinen meistern: Praktischer Leitfaden