Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> VHDL

Como usar Wait On e Wait Até em VHDL


No tutorial anterior aprendemos as principais diferenças entre sinais e variáveis. Aprendemos que os sinais têm um escopo mais amplo do que as variáveis, que só são acessíveis dentro de um processo. Então, como podemos usar sinais para comunicação entre vários processos?

Já aprendemos a usar wait; esperar infinitamente e wait for esperar um determinado período de tempo. Existem mais dois tipos de instruções de espera em VHDL.

Esta postagem do blog faz parte da série de tutoriais básicos de VHDL.

A instrução Wait On pausará o processo até que um dos sinais especificados seja alterado:
wait on <signal_name1>, <signal_name2> ...;

A instrução Wait Until pausará até que um evento faça com que a condição se torne verdadeira:
wait until <condition>;

Na verdade, Wait On, Wait Until e Wait For podem ser combinados:
wait on <signal_name1> until <condition> for <time_value>;

Este exemplo fará uma pausa de 10 nanossegundos ou até signal1 alterações e signal2 é igual a signal3 :
wait on signal1 until signal2 = signal3 for 10 ns;

Exercício


Neste tutorial em vídeo, aprenderemos como usar as instruções Wait On e Wait Until para comunicação entre processos em VHDL:



O código final que criamos neste tutorial:
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;

A saída para o console do simulador quando pressionamos o botão de execução no 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




Análise


O primeiro processo incrementa o CountUp counter e decrementa o CountDown contador. Eles são atualizados simultaneamente. Embora as atribuições de sinal dos dois sinais estejam em linhas diferentes no processo, os valores de sinal atribuídos só se tornam efetivos quando o programa atinge uma instrução Wait. O processo realiza esta operação no início da simulação e depois a cada 10 nanossegundos.

A primeira linha do segundo processo é wait on CountUp, CountDown; . O programa aguardará nesta linha até que um ou ambos os sinais mudem. Como podemos ver na impressão, isso acontece no tempo de simulação de 0 ns quando os contadores são alterados pela primeira vez e todas as vezes que eles mudam depois disso.

A primeira linha do terceiro processo é wait until CountUp = CountDown; . O programa será ativado toda vez que um dos dois sinais mudar, assim como o primeiro processo. Mas só continuará se a expressão for avaliada como true , caso contrário, ele voltará a dormir. Como podemos ver na impressão, “Jackpot!” é impresso apenas uma vez, a 40 ns quando ambos os contadores têm o mesmo valor.


Retirada


Ir para o próximo tutorial »

VHDL

  1. Como usar um procedimento em um processo em VHDL
  2. Como usar uma função impura em VHDL
  3. Como usar uma função em VHDL
  4. Como usar um procedimento em VHDL
  5. Como usar constantes e mapa genérico em VHDL
  6. Como usar a instanciação do mapa de portas em VHDL
  7. Como usar uma instrução Case-When em VHDL
  8. Como instalar um simulador e editor VHDL gratuitamente
  9. Microcontrolador PIC18:o que é e como usá-lo
  10. O que é um designador de referência e como o usamos na montagem?