Consideraciones sobre el diseño
Respecto a señales y variables
Se recomienda utilizar variables sólo cuando sea necesario almacenar un valor de forma temporal
Las señales corresponden a conexiones hardware,mientras que las variables representan asignaciones secuenciales que se ejecutan en procedimientos y procesos que se utilizan para recordar valores internos
Las variables reciben su valor inmediatamente, mientras que las señales después de un retardo delta
Ello implica que los resultados de simulación serán distintos. Aunque a nivel de síntesis el resultado será el mismo, puesto que muchos sintetizadores no diferencian entre variable y señal
Es más, muchos sintetizadores no comprueban la lista de sensitividad, aunque ello es recomendable
Algo, ya más grave, puede ocurrir cuando en un process la lógica no engloba todas las posibles combinaciones de la variable. Entonces el sintetizador infiere un latch. También se infiere un latch cuando una variable es leída previa asignación de la misma
Respecto a las señales de salida reescriturables
Algunas señales de salida (definidas en la entidad) pueden recibir el valor desde distintas sentencias, hecho que impide que puedan estar definidas como out
Para solventar este dilema existen tres soluciones- Declarar la señal como buffer. No es muy recomendable por no ser este el tipo de señal, aparte que se deberá continuar propagando esta señal como buffer
- Utilizar una señal dummy interna cuyo valor se asigna a la señal de salida. Es la mejor opción
- VHDL’93 ha definido el atributo 'driving_value para reasignar un valor a la señal (¡pero no sirve para VHDL'87!)
...
q2 <= q1;
...
q2 <= q3'driving_value;