Comment utiliser une boucle For en VHDL
Dans le tutoriel précédent, nous avons appris à créer une boucle infinie en utilisant le loop
déclaration. Nous avons également appris comment sortir d'une boucle en utilisant le exit
déclaration. Mais que se passe-t-il si nous voulons que la boucle itère un certain nombre de fois ? La boucle For est le moyen le plus simple d'y parvenir.
La boucle For vous permet d'itérer sur une plage fixe d'entiers ou d'éléments énumérés. L'élément appartenant à l'itération courante sera disponible dans la boucle via une constante implicitement déclarée.
Cet article de blog fait partie de la série de didacticiels VHDL de base.
La syntaxe de la boucle For est :
for <c> in <r> loop
end loop;
Le <c>
est un nom arbitraire pour une constante qui sera disponible à l'intérieur de la boucle. Le <r>
est une plage d'entiers ou de valeurs énumérées sur lesquelles la boucle va itérer. Une plage d'entiers peut être incrémentée ou décrémentée.
Le code VHDL pour une plage d'incrémentation comprenant les 10 chiffres de 0 à 9 :
0 to 9
Le code VHDL pour une plage de décrémentation comprenant les 10 chiffres de 9 à 0 :
9 downto 0
Le code VHDL pour une plage comprenant uniquement le chiffre 0 :
0 to 0
Le code VHDL pour une plage vide qui n'a aucun nombre :
0 to -1
Exercice
Le code final que nous avons créé dans ce tutoriel :
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;
La sortie vers la console du simulateur lorsque nous avons appuyé sur le bouton d'exécution dans 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
Pas totalement inattendu, notre For-Loop a itéré dix fois avant de se terminer. La valeur de i
est imprimé dix fois sur la console du simulateur au temps de simulation 0. Il n'y a pas d'instruction d'attente à l'intérieur de la boucle, et par conséquent la boucle ne prend aucun temps pour se terminer. Enfin, le programme entre dans une pause infinie sur le wait;
.
Nous avons appris à convertir un entier en chaîne en utilisant integer'image()
, et nous avons utilisé le &
caractère pour joindre les deux chaînes ensemble.
À emporter
- La boucle For peut itérer sur une plage d'entiers incrémentés ou décrémentés
- Une plage d'incrémentation est désignée par
to
, et une plage de décrémentation dedownto
- Un entier peut être converti en chaîne en utilisant
integer'image()
- Deux chaînes peuvent être jointes en utilisant le caractère de concaténation de chaîne
&
Aller au tutoriel suivant »
VHDL
- Comment utilisons-nous le molybdène?
- Comment créer une liste de chaînes en VHDL
- Comment arrêter la simulation dans un testbench VHDL
- Comment créer un contrôleur PWM en VHDL
- Comment générer des nombres aléatoires en VHDL
- Comment utiliser une procédure dans un processus en VHDL
- Comment utiliser une fonction impure en VHDL
- Comment utiliser une fonction en VHDL
- Comment utiliser une meuleuse de coupe