¿Por qué hay una espera al final de un caso de prueba de VHDL?

0

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?

    
pregunta Niklas

1 respuesta

0

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 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.

    
respondido por el scary_jeff

Lea otras preguntas en las etiquetas