Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> VHDL

Cómo usar Esperar y Esperar hasta en VHDL

En el tutorial anterior aprendimos las principales diferencias entre señales y variables. Aprendimos que las señales tienen un alcance más amplio que las variables, a las que solo se puede acceder dentro de un proceso. Entonces, ¿cómo podemos usar señales para la comunicación entre varios procesos?

Ya hemos aprendido a usar wait; esperar infinitamente, y wait for para esperar una cantidad específica de tiempo. Existen dos tipos más de sentencias de espera en VHDL.

Esta publicación de blog es parte de la serie Tutoriales básicos de VHDL.

La instrucción Wait On detendrá el proceso hasta que cambie una de las señales especificadas:
wait on <signal_name1>, <signal_name2> ...;

La instrucción Esperar hasta hará una pausa hasta que un evento haga que la condición se vuelva verdadera:
wait until <condition>;

De hecho, se pueden combinar Esperar, Esperar hasta y Esperar:
wait on <signal_name1> until <condition> for <time_value>;

Este ejemplo hará una pausa de 10 nanosegundos, o hasta signal1 cambios y signal2 es igual a signal3 :
wait on signal1 until signal2 = signal3 for 10 ns;

Ejercicio

En este video tutorial, aprenderemos a usar las instrucciones Wait On y Wait Until para la comunicación entre procesos en VHDL:

El código final que creamos en este 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;

La salida a la consola del simulador cuando presionamos el botón ejecutar en 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álisis

El primer proceso incrementa el CountUp contador y decrementa el CountDown encimera. Se actualizan simultáneamente. Aunque las asignaciones de señal de las dos señales están en líneas diferentes en el proceso, los valores de señal asignados solo se vuelven efectivos cuando el programa golpea una declaración de espera. El proceso realiza esta operación al inicio de la simulación y luego cada 10 nanosegundos.

La primera línea del segundo proceso es wait on CountUp, CountDown; . El programa esperará en esta línea hasta que una o ambas señales cambien. Como podemos ver en la impresión, esto sucede en el tiempo de simulación de 0 ns cuando los contadores se cambian por primera vez y cada vez que cambian después de eso.

La primera línea del tercer proceso es wait until CountUp = CountDown; . El programa se activará cada vez que cambie una de las dos señales, tal como lo hizo el primer proceso. Pero solo continuará si la expresión se evalúa como true , de lo contrario volverá a dormir. Como podemos ver en la impresión, "¡Jackpot!" solo se imprime una vez, a los 40 ns cuando ambos contadores tienen el mismo valor.

Para llevar

Ir al siguiente tutorial »


VHDL

  1. Cómo usar un procedimiento en un proceso en VHDL
  2. Cómo usar una función impura en VHDL
  3. Cómo usar una función en VHDL
  4. Cómo usar un procedimiento en VHDL
  5. Cómo usar constantes y mapas genéricos en VHDL
  6. Cómo usar la creación de instancias de mapas de puertos en VHDL
  7. Cómo usar una instrucción Case-When en VHDL
  8. Cómo usar Firmado y Sin firmar en VHDL
  9. Cómo instalar un simulador y editor VHDL gratis
  10. Microcontrolador PIC18:qué es y cómo usarlo
  11. ¿Qué es un designador de referencia y cómo lo usamos en ensamblaje?