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
- Wait On esperará hasta que cambie una de las señales
- Esperar hasta que se active si una de las señales cambia, pero solo continuará si la expresión es
true
- Se pueden combinar Esperar, Esperar hasta y Esperar
Ir al siguiente tutorial »
VHDL
- Cómo usar un procedimiento en un proceso en VHDL
- Cómo usar una función impura en VHDL
- Cómo usar una función en VHDL
- Cómo usar un procedimiento en VHDL
- Cómo usar constantes y mapas genéricos en VHDL
- Cómo usar la creación de instancias de mapas de puertos en VHDL
- Cómo usar una instrucción Case-When en VHDL
- Cómo usar Firmado y Sin firmar en VHDL
- Cómo instalar un simulador y editor VHDL gratis
- Microcontrolador PIC18:qué es y cómo usarlo
- ¿Qué es un designador de referencia y cómo lo usamos en ensamblaje?