Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> VHDL

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

Aller au tutoriel suivant »


VHDL

  1. Comment utilisons-nous le molybdène?
  2. Comment créer une liste de chaînes en VHDL
  3. Comment arrêter la simulation dans un testbench VHDL
  4. Comment créer un contrôleur PWM en VHDL
  5. Comment générer des nombres aléatoires en VHDL
  6. Comment utiliser une procédure dans un processus en VHDL
  7. Comment utiliser une fonction impure en VHDL
  8. Comment utiliser une fonction en VHDL
  9. Comment utiliser une meuleuse de coupe