VHDL como lenguaje de síntesis

 

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. 
 
 
3.-VHDL para inferir latches
 
Un latch transparente tiene una señal de entrada de dato (D), una señal de habilitación de entrada (LE), y una señal de salida (Q). Solo cuando LE = ‘1’ el valor D es asignado a Q.
 
architecture PROCESO_S of LATCH is
begin
    seq : process (din, le)
        begin
        if le = ‘1’ then
            dout <= din; end if;
        end process;
end PROCESO_S
 
 
4.-VHDL para inferir buffers tri-estado
 
Un buffer tri-estado tiene un pin de entrada (D), una señal de habilitación de salida (EN), y un pin de salida (Y). Cuando EN = ‘1’ Y toma el valor de D, si EN =‘0’ Y toma el valor de alta impedancia.
 
Ambas alternativas de implementación son procesos sensibles a las señales D y EN, y se determina el valor que toma la salida Y, de acuerdo al valor de EN. En PROC_IF la selección se realiza mediante la sentencia IF, y en PROC_CASE se realiza la selección utilizando la sentencia CASE.
 
 
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.
 


 Rerencia: Chang K. C., "Digital Design and Modeling with VHDL and Synthesis", IEEE Society Press, los Alamitos, CA, USA. 1997.