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 Wait On et Wait Until en VHDL

Dans le didacticiel précédent, nous avons appris les principales différences entre les signaux et les variables. Nous avons appris que les signaux ont une portée plus large que les variables, qui ne sont accessibles qu'au sein d'un processus. Alors, comment pouvons-nous utiliser des signaux pour la communication entre plusieurs processus ?

Nous avons déjà appris à utiliser wait; attendre indéfiniment, et wait for attendre un certain temps. Il existe deux autres types d'instructions d'attente en VHDL.

Cet article de blog fait partie de la série de didacticiels VHDL de base.

L'instruction Wait On mettra le processus en pause jusqu'à ce que l'un des signaux spécifiés change :
wait on <signal_name1>, <signal_name2> ...;

L'instruction Wait Until s'interrompra jusqu'à ce qu'un événement rende la condition vraie :
wait until <condition>;

En fait, Wait On, Wait Until et Wait For peuvent être combinés :
wait on <signal_name1> until <condition> for <time_value>;

Cet exemple fera une pause de 10 nanosecondes, ou jusqu'à signal1 modifications et signal2 est égal à signal3 :
wait on signal1 until signal2 = signal3 for 10 ns;

Exercice

Dans ce didacticiel vidéo, nous allons apprendre à utiliser les instructions Wait On et Wait Until pour la communication inter-processus en VHDL :

Le code final que nous avons créé dans ce tutoriel :

entity T07_WaitOnUntilTb is
end entity;

architecture sim of T07_WaitOnUntilTb is

    signal CountUp   : integer := 0;
    signal CountDown : integer := 10;

begin

    process is
    begin

        CountUp   <= CountUp + 1;
        CountDown <= CountDown - 1;
        wait for 10 ns;

    end process;

    process is
    begin

        wait on CountUp, CountDown;
        report "CountUp=" & integer'image(CountUp) &
            " CountDown=" & integer'image(CountDown);

    end process;

    process is
    begin

        wait until CountUp = CountDown;
        report "Jackpot!";

    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: CountUp=1 CountDown=9
#    Time: 0 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=2 CountDown=8
#    Time: 10 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=3 CountDown=7
#    Time: 20 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=4 CountDown=6
#    Time: 30 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=5 CountDown=5
#    Time: 40 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: Jackpot!
#    Time: 40 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=6 CountDown=4
#    Time: 50 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=7 CountDown=3
#    Time: 60 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=8 CountDown=2
#    Time: 70 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=9 CountDown=1
#    Time: 80 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=10 CountDown=0
#    Time: 90 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=11 CountDown=-1
#    Time: 100 ns  Iteration: 1  Instance: /t07_waitonuntiltb

Analyse

Le premier processus incrémente le CountUp compteur et décrémente le CountDown compteur. Ils sont mis à jour simultanément. Bien que les affectations de signal des deux signaux soient sur des lignes différentes dans le processus, les valeurs de signal affectées ne deviennent effectives que lorsque le programme atteint une instruction Wait. Le processus effectue cette opération au début de la simulation, puis toutes les 10 nanosecondes.

La première ligne du deuxième processus est wait on CountUp, CountDown; . Le programme attendra sur cette ligne jusqu'à ce qu'un ou les deux signaux changent. Comme nous pouvons le voir sur l'impression, cela se produit à un temps de simulation de 0 ns lorsque les compteurs sont modifiés pour la première fois, et à chaque fois qu'ils changent par la suite.

La première ligne du troisième processus est wait until CountUp = CountDown; . Le programme se réveillera chaque fois que l'un des deux signaux changera, tout comme le premier processus l'a fait. Mais cela ne continuera que si l'expression est évaluée à true , sinon il se rendormira. Comme nous pouvons le voir sur l'imprimé, "Jackpot!" n'est imprimé qu'une seule fois, à 40 ns lorsque les deux compteurs ont la même valeur.

À emporter

Aller au tutoriel suivant »


VHDL

  1. Comment utiliser une procédure dans un processus en VHDL
  2. Comment utiliser une fonction impure en VHDL
  3. Comment utiliser une fonction en VHDL
  4. Comment utiliser une procédure en VHDL
  5. Comment utiliser les constantes et la carte générique en VHDL
  6. Comment utiliser l'instanciation de Port Map dans VHDL
  7. Comment installer un simulateur et un éditeur VHDL gratuitement
  8. Microcontrôleur PIC18 :qu'est-ce que c'est et comment l'utiliser
  9. Qu'est-ce qu'un désignateur de référence et comment l'utiliser dans l'assemblage ?