So verwenden Sie eine While-Schleife in VHDL
Im vorherigen Tutorial haben wir gelernt, wie man eine For-Schleife verwendet, um über einen ganzzahligen Bereich zu iterieren. Aber was ist, wenn wir eine detailliertere Steuerung der Schleife wünschen als nur einen festen ganzzahligen Bereich? Wir können dafür eine While-Schleife verwenden.
Die While-Schleife iteriert weiterhin über den eingeschlossenen Code, solange der Ausdruck, auf den sie testet, zu true
ausgewertet wird . Daher eignet sich die While-Schleife für Situationen, in denen Sie nicht genau wissen, wie viele Iterationen im Voraus benötigt werden.
Dieser Blogpost ist Teil der Reihe Basic VHDL Tutorials.
Die Syntax der While-Schleife lautet:
while <condition> loop
end loop;
Die <condition>
ist ein boolescher true
oder false
. Es kann sich auch um einen Ausdruck handeln, der zu true
ausgewertet wird oder false
. Die Bedingung wird vor jeder Iteration der Schleife ausgewertet, und die Schleife wird nur fortgesetzt, wenn die Bedingung true
ist .
Beispielausdruck, der true
ist wenn i
ist kleiner als 10:
i < 10
Beispielausdruck, der true
ist wenn i
ist nicht 10:
i /= 10
Beispielausdruck, der true
ist wenn i
größer oder gleich 0 und kleiner als 2
8
ist =256:
i >= 0 and i < 2**8;
Vergleichsoperatoren:
= | gleich |
/= | nicht gleich |
< | weniger als |
<= | kleiner oder gleich |
> | größer als |
>= | größer oder gleich |
Logische Operatoren:
nicht ein | wahr, wenn ein ist falsch |
a und b | wahr, wenn ein und b sind wahr |
a oder b | wahr, wenn ein oder b sind wahr |
a und b | wahr, wenn ein oder b ist falsch |
a noch b | wahr, wenn ein und b sind falsch |
a oder b | wahr, wenn genau einer von einem oder b sind wahr |
a xnor b | wahr, wenn ein und b gleich sind |
Übung
In diesem Video-Tutorial lernen wir, eine Variable zur Steuerung einer While-Schleife zu verwenden:
Der endgültige Code, den wir in diesem Tutorial erstellt haben:
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;
Die Ausgabe an die Simulatorkonsole, wenn wir in ModelSim die Run-Taste gedrückt haben:
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 haben eine Integer-Variable i
erstellt und gab ihm einen Anfangswert von 0. Wir haben in der While-Schleife einen Ausdruck verwendet, der wahr ist, solange i
kleiner als 10 ist. Weil wir i
erhöht haben um 2 in jeder Iteration, die letzte ausgedruckte Zahl war 8.
Bei der nächsten Iteration der i < 10
zu false
ausgewertet weil 10 nicht kleiner als 10 ist. Nachdem die Schleife beendet war, traf das Programm auf wait;
wo es unendlich pausierte.
Imbiss
- Die While-Schleife wird fortgesetzt, solange die Bedingung
true
ist - Die Bedingung wird vor jeder Iteration der While-Schleife ausgewertet
- Variablen können innerhalb eines Prozesses deklariert und verwendet werden
Nehmen Sie am Basic VHDL Quiz – Teil 1 teil »
oder
gehen Sie 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