For-Schleifen in VHDL meistern: Ein praktischer Leitfaden
Im vorherigen Tutorial untersuchten wir, wie man mit dem loop-Statement eine Endlosschleife erstellt und sie mit exit verlässt. Was aber, wenn die Schleife eine bestimmte Anzahl von Durchläufen ausführen soll? Die For-Schleife ist die einfachste Lösung.
Eine For-Schleife iteriert über einen festen Bereich von Ganzzahlen oder aufgezählten Werten. Der aktuelle Iterationswert steht innerhalb der Schleife über eine implizit deklarierte Konstante automatisch zur Verfügung.
Dieser Artikel gehört zur Serie „Basic VHDL Tutorials“.
Syntax
for <konstante> in <bereich> loop
-- Schleifenkörper
end loop;
Hierbei ist <konstante> ein benutzerdefinierter Name für den Schleifenzähler, und <bereich> kann ein ganzzahliger Bereich (aufsteigend oder absteigend) oder eine Menge aufgezählter Werte sein.
Ganzzahlbereiche
- Aufsteigender Bereich:
0 to 9– iteriert 0,1,2,…,9. - Absteigender Bereich:
9 downto 0– iteriert 9,8,7,…,0. - Einzelwert:
0 to 0– iteriert nur 0. - Leerer Bereich:
0 to -1– Schleifenkörper wird nie ausgeführt.
Beispielcode
entity T04_ForLoopTb is end entity;
architecture sim of T04_ForLoopTb is
begin
process is
begin
for i in 1 to 10 loop
report "i=" & integer'image(i);
end loop;
wait;
end process;
end architecture;
Simulationsausgabe (ModelSim)
VSIM 2> run # ** Note: i=1 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=2 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=3 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=4 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=5 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=6 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=7 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=8 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=9 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb # ** Note: i=10 # Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
Analyse
Die For-Schleife führte exakt zehn Iterationen aus und gab den Zählerwert zur Simulationszeit 0 aus. Da sich kein wait innerhalb der Schleife befindet, wird die gesamte Schleife augenblicklich abgearbeitet. Das abschließende wait; versetzt den Prozess in eine endlose Pause, was in Testbenches üblich ist.
Wir demonstrierten zudem zwei wichtige String-Operationen:
integer'image(i)– wandelt eine Ganzzahl in einen String um.&– verkettet zwei Strings.
Wichtigste Erkenntnisse
- For-Schleifen können über aufsteigende (
to) und absteigende (downto) Bereiche iterieren. - Ganzzahlwerte werden mit
integer'image()in Strings umgewandelt. - String-Verkettung nutzt den
&-Operator.
Weiter zum nächsten Tutorial für tiefere VHDL-Konzepte.
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