Kmila
Todos los Conceptos
Principiante Recorrido ~10 min

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.
tmp es 8, pero result sigue siendo U. Avanza una vez más y
observa cómo result salta a 13 después de que el cuerpo del
proceso ha terminado.

1 / 7
t = 0
Reiniciar Paso atrás Reproducir Paso adelante
Señales
a 0
b 5
tmp 0
result U
Inicio en frío. tmp es una variable inicializada en 0; las señales a, b y result conservan lo que tuvieran antes.
Comprobación rápida

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?

Ocurrió un error no controlado. Recargar 🗙