sábado, 2 de abril de 2011

Atributos de Sintesis, Directivas y Restricciones (constraints)

Atributos (de síntesis en HDL):
Es una propiedad asociada con un dato objeto (señal, variable, …)  que es usada por la herramienta de síntesis y, en ciertos atributos, por la herramienta de mapeo. Los atributos de síntesis son definidos y aplicados en el código VHDL o Verilog que se deseen usar. Sin embargo, no se puede usar cualquier atributo, sino los definidos por la herramienta de síntesis a usar. Para agregarle portabilidad al código VHDL/Verilog algunos atributos pueden ser reemplazados por restricciones establecidas en el archivo de restricciones (.ucf para el caso de Xilinx).
Un ejemplo de atributo muy usado es que selecciona el tipo de coodifiacion que se asigna a casa estado de una maquina de estados descripta en VHDL:

type my_fsm_state is (reset, load, count, hold);
attribute syn_encoding: string;
attribute syn_encoding of my_fsm_state: type is “gray”;

Otro ejemplo de uso de atributo de sintesis, se detalla a continuación. En este caso se define un arreglo de vectores, que se desea sea sintetizado en los bloques de memoria RAM del FPGA, y no en los bloques de memoria distribuida:

type ram_type is array(63 downto 0) of  std_logic_vector(15 downto 0);
signal ram: ram_type;
attribute syn_ramstyle: string;
attribute syn_ramstyle of ram: signal is “block_ram”;

Un ejemplo de atributo que pueder ser usado en el codigo VHDL pero que en realidad es mejor que se use una restriccion en el .ucf es el siguiente:

attribute loc: string;
attribute loc of {signal_name| label_name}: {signal |label} is “location”;

En este ejemplo se define la locacion de un pin del FPGA especifico para una determinada senial. Al hacerlo en el código VHDL le quita portabilidad al código, como asi también, si existen un gran numero de pines de E/S se agregan muchas líneas al código que complican su comprensión.

Directivas
Controlan el modo que el diseño es analizado antes de la síntesis. Algunas directivs en realidad se escriben como si fueran comentarios dentro del código VHDL. Es decir comienzan con los dos guiones ‘- -‘, y a continuación la palabra ‘pragma’ o ‘synposys’ (para el caso de usar herramienta de síntesis de Synposys).
Una directiva comúnmente encontrada y usada en los códigos VHDL es:
- - pragma translate_off
- - pragma translate_on

Estas directivas instruyen al compilador VHDL a deshabilitar y habilitar la síntesis del código VHDL. Recuerde que la síntesis del código es automáticamente habilitada al comienzo de cada archivo VHDL. A partir de ahí, en cualquier lugar del archivo se pueden usar estar directivas.
Otra directiva que es usualmente usada es:
- - pragma synthesis_off
- - pragma synthesis_on

Estas se usan cuando se requiere o necesita ‘ocultar’ a la herramienta de síntesis instrucciones VHDL usadas solo para simulación. Cualquier texto entre estas directivas será chequeado por sintaxis pero no será sintetizado.

Restricciones (de Implementación):
      Controlan la herramienta del mapeo, colocación (placement), frecuencia (timing) y otras opciones de implementación de la lógica generada en el FPGA. Generalmente las resticicones son mantenidas en un archivo diferente del archivo VHDL. Por ejemplo para el entorno ISE de Xilinx las restricciones se deben escribir en el archvio  llamado ‘user define constraint’ (.ucf). Este archivo es leído por la herramientas de mapeo, place and route para aplicar las restricciones en la lógica implementada.
Ejemplo de restricciones del .ucf:

# asignación de un pin (P110) a un seniel de E/S
INST “MUXBUF_D0_OUT” LOC=P110;
# especificacion del periodo del reloj master_clk
TIMESPEC TS_master = PERIOD “master_clk” 50;


Les recomiendo leer la información del manual del usuario de la herramienta de síntesis y de la herramienta de mapeo y place and route para las restricciones. 

No hay comentarios:

Publicar un comentario