La herramienta ISE tiene una opción no muy conocida que habilita el uso de los SRL (Shift Register Logic) de una LUT (Look-Up Table) como sincronizadores !! So.... se debe chequear el Map report para verificar la inclusión o no de SRLs en la lógica generada cuando se desea describir sincronizadores.
Para los nuevos Virtex-6 y Spartan-6 "shreg_min_size" es una propiedad de la herramienta de síntesis XST que especifica el tamaño mínimo de registros de desplazamientos para ser inferidos e implementados en recursos SRL. Para los otros FPGAs la propiedad que habilita la inferencia de los SRL es llamada 'shift register extraction'. Un sincronizador compuesto de dos flip-flops, para la herramienta de síntesis es visto como un registro de desplazamiento de 2 estaps. Por defecto el valor de shreg_min_size es 2. Para cambiarlo estas propiedades se debe abrir las opciones de HDL del XST:
- Una vez abierto el proyecto en el ISE, seleccionar el proceso "Synthesize-XST' en la ventana 'Design'.
- Presione boton derecho del mouse y seleccione 'Process Properties'
- Seleccione 'HDL Options'
- Encuentre y modifique las propiedades mencionadas.
SIN EMBARGO, por mas que ese número se fije en un valor alto, por ejemplo 5, la herramienta de mapeo, re-sintetiza el diseño y puede usar los SRLs independientemente del número fijado en el atributo "shreg_min_size". En otras palabras "shreg_min_size" es un atributo que solo lo 've' el XST, y NO es pasado al MAP.
Para evitar este problema hay dos soluciones:
Solución 1- Usar el atributo de síntesis 'keep' en los registros sincronizadores. De este modo estos registros no serán tocados.
Solución 2- Usar una señal de reset para los sincronizadores. Así, los flip-flops sincronizadores no pueden ser llevados a SRL, porque no tienen entrada de reset. . . ..
Una razón mas, no muy conocida tampoco, para evitar el uso de los SRL como sincronizadores, es el hecho de que el tiempo de resolución de metaestabilidad de los flip-flops de los SRL es muuuuuy malo.....(dicho por Austin Lesea de Xilinx.
Entonces, CUIDADO con la implementación de sincronizadores !