Maîtriser les boucles While en VHDL : contrôle d'itération dynamique
S'appuyant sur notre exploration précédente des boucles for, ce tutoriel plonge dans la boucle while — une construction puissante qui permet de contrôler l'itération basée sur des conditions dynamiques plutôt que sur une plage prédéterminée.
La boucle while exécute son corps répétitivement tant que la condition spécifiée reste true. Cela la rend idéale pour les scénarios où le nombre d'itérations dépend de données d'exécution ou de logique complexe.
Cet article fait partie de la série Tutoriels VHDL de base.
Syntaxe
while <condition> loop -- corps de la boucle end loop;
La <condition> doit évaluer à une valeur booléenne. Elle peut être une simple comparaison ou une expression plus élaborée. La condition est vérifiée avant chaque passage, assurant que la boucle ne continue que tant qu'elle reste true.
Exemples de conditions
i < 10– vrai tant queiest inférieur à 10.i /= 10– vrai tant quein'est pas égal à 10.i >= 0 and i < 2**8– vrai pour les valeurs de 0 jusqu'à 255.
Opérateurs relationnels
| = | égal |
| /= | différent |
| < | inférieur à |
| <= | inférieur ou égal à |
| > | supérieur à |
| >= | supérieur ou égal à |
Opérateurs logiques
| not a | true si a est false |
| a and b | true si a et b sont true |
| a or b | true si a ou b sont true |
| a nand b | true si a ou b est false |
| a nor b | true si a et b sont false |
| a xor b | true si exactement un de a ou b est true |
| a xnor b | true si a et b sont égaux |
Exercice
Regardez le tutoriel vidéo ci-dessous pour voir comment une variable peut piloter une boucle while en pratique :
Exemple de code
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;
Sortie du simulateur
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 initialisons i à 0 et utilisons i < 10 comme garde de boucle. Comme la boucle incrémente i de 2 à chaque cycle, la dernière valeur affichée est 8. Au passage suivant, la condition évalue à false (10 n'est pas inférieur à 10), et la boucle se termine. Le wait; subséquent suspend le processus indéfiniment, un motif courant pour les testbenches.

Points clés à retenir
- La boucle
whiles'exécute tant que sa condition restetrue. - La condition est évaluée avant chaque itération.
- Les variables peuvent être déclarées à l'intérieur d'un processus et mises à jour dans la boucle.
Faites le Quiz VHDL de base – partie 1 ou continuez vers le tutoriel suivant.
VHDL
- Comment le molybdène façonne l'industrie moderne : usages, avantages et dynamiques d'approvisionnement
- Créer des listes de chaînes en VHDL : Bonnes pratiques et exemple
- Terminer proprement une simulation de banc de test VHDL
- Implémenter un contrôleur PWM en VHDL : Conception, simulation et démo FPGA
- Générer des nombres aléatoires en VHDL : De l'uniforme à OSVVM
- Exploiter les procédures in-process pour un design FSM VHDL plus propre
- Utilisation des fonctions impures en VHDL : Améliorer la lisibilité et la maintenabilité des FSM
- Maîtriser les fonctions VHDL : Guide pratique pour un design efficace
- Maîtriser les techniques de la rectifieuse d'outils : guide pratique