Comment utiliser une boucle While en VHDL
Dans le didacticiel précédent, nous avons appris à utiliser une boucle For pour itérer sur une plage d'entiers. Mais que se passe-t-il si nous voulons un contrôle plus détaillé de la boucle qu'une simple plage d'entiers fixes ? Nous pouvons utiliser une boucle While pour cela.
La boucle While continuera à itérer sur le code inclus tant que l'expression qu'elle teste est évaluée à true
. Par conséquent, la boucle While convient aux situations où vous ne savez pas exactement combien d'itérations seront nécessaires à l'avance.
Cet article de blog fait partie de la série de didacticiels VHDL de base.
La syntaxe de la boucle While est :
while <condition> loop
end loop;
Le <condition>
est un booléen true
ou false
. Il peut également s'agir d'une expression évaluée à true
ou false
. La condition est évaluée avant chaque itération de la boucle, et la boucle continuera uniquement si la condition est true
.
Exemple d'expression qui est true
si i
est inférieur à 10 :
i < 10
Exemple d'expression qui est true
si i
n'est pas 10 :
i /= 10
Exemple d'expression qui est true
si i
est supérieur ou égal à 0 et inférieur à 2
8
=256 :
i >= 0 and i < 2**8;
Opérateurs relationnels :
= | égal |
/= | pas égal |
< | moins de |
<= | inférieur ou égal |
> | supérieur à |
>= | supérieur ou égal |
Opérateurs logiques :
pas un | vrai si un est faux |
un et b | vrai si un et b sont vrais |
un ou b | vrai si un ou b sont vrais |
un et b | vrai si un ou b est faux |
un ni b | vrai si un et b sont faux |
un xor b | true si exactement l'un des a ou b sont vrais |
un xnor b | vrai si un et b sont égaux |
Exercice
Dans ce tutoriel vidéo, nous apprenons à utiliser une variable pour contrôler une boucle While :
Le code final que nous avons créé dans ce tutoriel :
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;
La sortie vers la console du simulateur lorsque nous avons appuyé sur le bouton d'exécution dans ModelSim :
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
Nous avons créé une variable entière i
et lui avons donné une valeur initiale de 0. Nous avons utilisé une expression dans la boucle While qui est vraie tant que i
est inférieur à 10. Parce que nous incrémentions i
par 2 à chaque itération, le dernier nombre imprimé était 8.
À l'itération suivante, le i < 10
évalué à false
car 10 n'est pas inférieur à 10. Une fois la boucle terminée, le programme a atteint le wait;
où il s'est arrêté infiniment.
À emporter
- La boucle While continuera tant que la condition est
true
- La condition est évaluée avant chaque itération de la boucle While
- Les variables peuvent être déclarées et utilisées dans un processus
Répondez au Quiz VHDL de base – partie 1 »
ou
Passez 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