2.3. Demoras de tiempo

En la simulación es posible manipular el tiempo. Una de las cosas más comunes es esperar a que algo suceda o simplemente esperar una determinada cantidad de tiempo. La sentencia wait nos permite realizar esto.

Existen tres formas básicas de wait, las mismas pueden ser combinadas en una misma sentencia. Las tres formas son:

2.3.1. Esperar a que una o más señales cambien

Es posible realizar una demora de tiempo esperando a que una o más señales cambien. Para esto se utiliza la sentencia wait on seguida por una lista de señales separadas por comas.

El efecto de wait on es similar al funcionamiento de la lista de sensibilidad de un proceso, sólo que wait on lo podemos usar en cualquier parte de un proceso.

En el Ejemplo 2-2 vemos dos procesos que son completamente equivalentes.

Ejemplo 2-2. Dos procesos equivalentes, uno usando wait on

lista_sens:
process (s1, s2)
begin
   -- Circuito activado cuando s1 y/o s2 cambian
end process lista_sens;

wait_on:
process
begin
   wait on s1, s2;
   -- Circuito activado cuando s1 y/o s2 cambian
end process wait_on;

2.3.2. Esperar a que se cumpla una condición

Es posible realizar una demora de tiempo esperando a que una condición se cumpla utilizando la sentencia wait until seguido de una expresión condicional. La expresión será del mismo tipo que la usada para sentencias como if.

2.3.3. Esperar una cantidad de tiempo determinada

Es posible realizar una demora de tiempo prefijada utilizando la sentencia wait for seguida de la cantidad de tiempo a esperar. La demora debe ser del tipo físico time.

2.3.4. Esperar en forma indefinida

En ocasiones es útil detener por completo la ejecución de un proceso, es decir que buscamos esperar por siempre. Para lograr esto basta con usar la sentencia wait sin ningún modificador.

Este mecanismo es particularmente útil para finalizar exitosamente un banco de pruebas. Cuando el simulador detecta que todos los procesos (explícitos e implícitos) se han detenido finaliza la ejecución. En un sistema completamente sincrónico basta con detener el proceso que genera el reloj.

2.3.5. Ejemplos de esperas

En el Ejemplo 2-3 vemos la forma genérica de la sentencia wait, así como las distintas formas básicas explicadas y ejemplos de su uso.

Ejemplo 2-3. Usos de la sentencia wait

wait on señales until condición for tiempo;
wait on señales;       wait on s1, s2;
wait until condición;  wait until clk='1';
wait for tiempo;       wait for 10 ns;

Sugerencia

Para detener la ejecución de un proceso secuencial es posible utilizar la sentencia wait, cuya forma genérica es wait on señales until condición for tiempo.

Copyright © 2011 UTN FRBA - INTI - Ing. Salvador E. Tropea