Conozco dos formas en que una variable VHDL se sintetiza mediante una herramienta de síntesis:
¿Cuáles son las otras formas en que se puede sintetizar una variable VHDL? (Ejemplo: ¿se puede interpretar como un FF?)
Yo distinguiría tres posibilidades:
Una variable VHDL no tiene ninguna representación de hardware. Supongamos el siguiente ejemplo
signal a,b,c : integer;
...
process ( clk ) is
variable var : integer := 0;
begin
if ( rising_edge(clk) ) then
var := a + b;
c <= var;
end if;
end process;
La variable var
no está realmente sintetizada como lógica combinatoria en absoluto (suponiendo que esto es lo que se quería decir en la pregunta). Es más bien el lado derecho de la asignación lo a + b
que se sintetiza en hardware. Estrictamente hablando, una variable nunca se sintetiza en lógica combinatoria.
Una variable simplemente contiene un resultado intermedio, que se evalúa en el mismo ciclo de reloj -> no se sintetiza hardware (esto es 1) nuevamente), o se evalúa en el siguiente ciclo de reloj -> se sintetiza un flip-flop.
Uno de esos temidos pestillos se infiere en aquellos casos en los que existen ramas condicionales en las que a la variable no se le asigna un nuevo valor (dependiendo de algunas señales) ni un valor predeterminado. Por lo general, este caso sucede sin querer :-)
Si usa el valor en una variable antes de almacenarla, obtiene el valor que se almacenó la última vez que el proceso lo almacenó (en un proceso cronometrado, el valor de un ciclo de reloj anterior). Que se sintetiza como un registro o FF.
Por supuesto, en el primer ciclo de reloj obtiene basura, a menos que haya inicializado la variable en una cláusula de reinicio.
martin thompson