Secuencial: un paso a la vez
Dentro del cuerpo de un process, VHDL se comporta muy parecido a los
lenguajes que ya conoces: las sentencias se ejecutan de arriba abajo,
en el orden del código fuente. Mueve una línea de lugar y cambias el
resultado.
Pero hay un detalle que atrapa a todos: las variables y las
señales se comportan distinto.
| Tipo | Sintaxis | ¿Cuándo aparece el nuevo valor? |
|---|---|---|
| Variable | tmp := a + 1 |
Inmediatamente. La siguiente sentencia ya lee el nuevo tmp. |
| Señal | result <= tmp + b |
Al final del ciclo delta. Hasta entonces, las lecturas siguen viendo el valor viejo. |
El reproductor recorre un proceso minúsculo que usa ambos. Observa cómo
tmp se actualiza en el mismo momento en que ejecutamos la línea 5,
pero result no cambia hasta después de que el proceso termina.
Por qué importa
Imagina que escribieras:
result <= 1;
result <= 2;
En C, después de estas dos líneas result claramente sería 2. ¿En
VHDL? Gana la última asignación — pero solo cuando se cierra el
delta. Mientras el proceso corre, result sigue con su valor viejo, y
el simulador descarta silenciosamente la transacción <= 1 porque
<= 2 la reemplaza antes de que termine el delta.
Prueba esto: avanza hasta la línea 7 y mira la tabla de señales.
tmpes8, peroresultsigue siendoU. Avanza una vez más y
observa cómoresultsalta a13después de que el cuerpo del
proceso ha terminado.
| a | 0 |
|---|---|
| b | 5 |
| tmp | 0 |
| result | U |
Un cuerpo de `process` tiene `led <= '0'; led <= '1';` en secuencia. Suponiendo que nada más maneja `led` y el proceso despierta, ¿qué valor confirma `led` al final del ciclo delta?