So verwenden Sie eine For-Schleife in VHDL
Im vorherigen Tutorial haben wir gelernt, eine Endlosschleife mit dem loop
zu erstellen Aussage. Wir haben auch gelernt, wie man mit exit
aus einer Schleife ausbricht Aussage. Aber was ist, wenn wir wollen, dass die Schleife eine bestimmte Anzahl von Wiederholungen durchläuft? Die For-Schleife ist der einfachste Weg, dies zu erreichen.
Mit der For-Schleife können Sie über einen festen Bereich von Ganzzahlen oder Aufzählungselementen iterieren. Das zur aktuellen Iteration gehörende Element wird innerhalb der Schleife durch eine implizit deklarierte Konstante verfügbar sein.
Dieser Blogpost ist Teil der Reihe Basic VHDL Tutorials.
Die Syntax der For-Schleife lautet:
for <c> in <r> loop
end loop;
Die <c>
ist ein willkürlicher Name für eine Konstante, die innerhalb der Schleife verfügbar sein wird. Die <r>
ist ein Bereich von Ganzzahlen oder Aufzählungswerten, über die die Schleife iteriert. Ein ganzzahliger Bereich kann entweder inkrementierend oder dekrementierend sein.
Der VHDL-Code für einen aufsteigenden Bereich, der alle 10 Zahlen von 0 bis 9 enthält:
0 to 9
Der VHDL-Code für einen dekrementierenden Bereich, der alle 10 Zahlen von 9 bis 0 enthält:
9 downto 0
Der VHDL-Code für einen Bereich, der nur die Zahl 0 enthält:
0 to 0
Der VHDL-Code für einen leeren Bereich, der überhaupt keine Zahlen enthält:
0 to -1
Übung
Der endgültige Code, den wir in diesem Tutorial erstellt haben:
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;
Die Ausgabe an die Simulatorkonsole, wenn wir in ModelSim die Run-Taste gedrückt haben:
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
Nicht ganz unerwartet wiederholte sich unsere For-Schleife zehnmal, bevor sie endete. Der Wert von i
wird zur Simulationszeit 0 zehnmal an die Simulatorkonsole ausgegeben. Es gibt keine Wait-Anweisung innerhalb der Schleife, und daher benötigt die Schleife null Zeit zum Abschließen. Schließlich geht das Programm auf wait;
in eine unendliche Pause .
Wir haben gelernt, wie man eine Ganzzahl mithilfe von integer'image()
in einen String umwandelt , und wir haben den &
verwendet Zeichen, um die beiden Zeichenfolgen miteinander zu verbinden.
Imbiss
- Die For-Schleife kann über einen inkrementierenden oder dekrementierenden Ganzzahlbereich iterieren
- Ein inkrementierender Bereich wird durch
to
gekennzeichnet , und einen dekrementierenden Bereich umdownto
- Eine ganze Zahl kann mit
integer'image()
in einen String umgewandelt werden - Zwei Strings können mit dem String-Verkettungszeichen
&
verbunden werden
Weiter zum nächsten Tutorial »
VHDL
- Wie verwenden wir Molybdän?
- So erstellen Sie eine Liste von Zeichenfolgen in VHDL
- So stoppen Sie die Simulation in einer VHDL-Testbench
- So erstellen Sie einen PWM-Controller in VHDL
- So generieren Sie Zufallszahlen in VHDL
- So verwenden Sie eine Prozedur in einem Prozess in VHDL
- So verwenden Sie eine unreine Funktion in VHDL
- So verwenden Sie eine Funktion in VHDL
- So erstellen Sie einen endlichen Automaten in VHDL
- So verwenden Sie einen Cutter Grinder