1.-A tener en cuenta
VHDL fue desarrollado inicialmente para modelar circuitos digitales,
no para la síntesis. Por esto, hay construcciones que pueden ser
usadas para la generación de hardware, pero hay otras que solo tienen
validéz durante la simulación. Para la síntesis se
ignoran la especificaciones temporales del diseño. Por ejemplo:
wait for 20 ns, o Z <= X xor Y after 3 ns. Durante la simulación
un objeto es inicializado al valor primeramente definido, o en el caso
de señales de tipo palabra o enteros, al valor especificado en la
declaración (signal A : integer := 4). Es muy dificil, si no imposible
el inicilizar todos los valores de los objetos en hardware, por lo cual
la mayoría de las herramientas de síntesis ignoran las sentencias
de inicialización.
2.-VHDL para inferir flip-flops
Un flip-flop opera basado en una señal de reloj. Por ejemplo,
la salida de un flip-flop tipo D (FFD) podría cambiar al dato de
la entrada cuando se produce un flanco de subida en la señal de
reloj. El flanco de subida se puede modelar en VHDL usando la siguiente
construcción: clock’event and clock=‘1’.
architecture PROCESO of FFD is
begin seq : process begin wait until clock’event and clock = ‘1’; dout <= din; end process; end PROCESO |
architecture PROCESO_S of FFD is
begin seq : process (clock) begin if clock’event and clock = ‘1’ then dout <= din; end if; end process; end PROCESO_S |
PROCESO.
El modelo de FFD se basa en un proceso sin lista de sensibilidad. Este código tiene una sentencia wait para que solo se ejecute cuando haya un flanco ascendente en la señal reloj. |
PROCESO_S.
Este modelo se basa en un proceso que se ejecuta cuando haya un cambio de valor en la señal clock. |
architecture PROC_IF of TS is
begin seq : process (d, en) begin if (en = ‘1’) then Y <= D: else Y <= ‘Z’; end if; end process; end PROC_IF |
architecture PROC_CASE of TS is
begin seq : process (en, d) begin case en is when ‘1’ => Y <= D; when others => Y <= ‘Z’; end case; end process; end PROC_CASE |
5.-VHDL para generar circuitos
combinacionales
Cuando una señal objetivo no es inferida como un flip-flop,
latch o tri-estado, entonces es sintetizada como un circuito combinacional.
Por ejemplo, el código con sentencias IF o CASE es sintetizado a
circuitos combinacionales, al igual que la asignación de señales
concurrentes (condicionales o seleccionadas), y que las sentencias de asignación
de señales secuenciales y condicionales (o seleccionadas).
6.-Simulación versus
Síntesis
La lista de sensibilidad de un proceso tiene un impacto directo sobre
la simulación, mientras que durante la síntesis es ignorado.
El no poner una señal en la lista de sensibilidad de un proceso
que genera un bloque de lógica combinacional es un error. Algunas
veces es dificil ver las diferencias en la simulación (especialmente
si el proceso tienen muchas señales). Una buena técnica es
el hacer la verificación sintáctica para la simulación
con la herramienta de síntesis, donde se genera un mensaje si se
usa un valor dentro de un proceso combinacional sin que esté en
la lista de sensibilidad.