Una plantilla para un proceso de prueba se ve así:
process
begin
-- for example x <= '0' after 5 ns;
-- ...
wait;
end process;
¿Se requiere este wait
? ¿Por qué esperaríamos para siempre al final de una prueba?
Una plantilla para un proceso de prueba se ve así:
process
begin
-- for example x <= '0' after 5 ns;
-- ...
wait;
end process;
¿Se requiere este wait
? ¿Por qué esperaríamos para siempre al final de una prueba?
Un proceso puede tener dos formas básicas:
El primero usa una lista de sensibilidad, por ejemplo, process (clk)
sería la primera línea de un proceso síncrono que debería responder a clk
. El proceso solo se ejecutará cuando haya un evento en la señal clk
, por lo que esto constituye un control para la ejecución del proceso.
El segundo no tiene una lista de sensibilidad, según su ejemplo, y por lo tanto no hay nada que "active" el proceso a la acción. En su lugar, el proceso forma un bucle implícito, por lo que saltará hacia la parte superior una vez que llegue al final.
Sin la declaración wait;
, su proceso de ejemplo no tiene nada que lleve tiempo; la asignación retrasada se programará, pero la ejecución procederá inmediatamente a la siguiente línea. Por lo tanto, el proceso formaría un bucle infinito, que se ejecutaría una y otra vez, sin permitiendo que el tiempo avance. Con la declaración wait;
, sus asignaciones sucederán y el proceso esperará por siempre en la línea wait;
.
Si su proceso tuviera sentencias que llevaran algún tiempo, no tendría que tener un wait;
al final. por ejemplo:
process
begin
a <= '1';
wait for 5 ns;
a <= '0';
b <= "0101";
wait for 15 ns;
b <= "0000";
wait for 100 ns;
end process;
Este proceso se repetirá una y otra vez, pero como tiene sentencias de espera dentro de él, el bucle implícito sí da tiempo para avanzar en cada iteración. La secuencia de asignaciones se repetirá una y otra vez, hasta que algo más detenga la simulación. Fundamentalmente, el proceso anterior permite que el tiempo avance dentro de cada secuencia.
Lea otras preguntas en las etiquetas vhdl