Primitivas de sincronización de CDC para un FPGA de Altera

4

Estoy trabajando en mi primer diseño de FPGA no trival y, finalmente, necesito el Cruce de Dominio del Reloj (CDC).

Hay son multiple resources ( entre others ) que analizan varias arquitecturas para CDC y algunas related preguntas . La teoría está bien, pero al menos uno de esos recursos enumera las trampas para los incautos y al menos un proyecto enumera múltiples atributos VHDL necesarios para sintetizar correctamente en un dispositivo Xilinx.

Me dirijo a Altera MAX10 para este proyecto usando VHDL. He codificado a mano un sincronizador push-handshake, pero de alguna manera sospecho que hay más en ello.

Entonces:

  • ¿Altera (u otra fuente bien considerada) suministra una biblioteca de primitivas de sincronización?
  • Si no es así, ¿qué pasos deben tomarse para garantizar que un bloque de sincronización escrito a mano sintetice correctamente, simule correctamente y esté sujeto al análisis de temporización correctamente?

Una respuesta con un ejemplo de un sincronizador básico (por ejemplo, 2-Flop) sería bien considerada.

    
pregunta Damien

1 respuesta

6

El sincronizador de cuatro fases presentado es una implementación correcta y correcta.

Solo tiene una desventaja:
Tiene una entrada V , para notificar al sincronizador las entradas modificadas.

Esto se puede automatizar mediante un registro de n bits en el dominio del reloj de origen y el comparador de n bits: si se cambia la entrada, afirmar V=1 .

Input_d  <= Input when rising_edge(Clock);
V        <= '1' when (Input_d /= Input) else '0';  -- input changed

La implementación de un sincronizador de 2 FF, el núcleo de cada sincronizador de nivel superior, con los atributos y restricciones requeridos, se puede encontrar de la siguiente manera:

¿Qué es tan especial en comparación con las chancletas dobles normales?

  1. Deshabilita la extracción del registro de desplazamiento ( SHREG_EXTRACT = NO ). La síntesis intenta encontrar cadenas de chanclas y colocarlas en registros de turnos dedicados como Xilinx SRL32 . Estos desplazadores dedicados no son buenos para entradas meta estables.
  2. Marque los registros como registros asíncronos ( ASYNC_REG = TRUE ). Esto es necesario para que las simulaciones posteriores a la síntesis supriman los valores metaestables.
  3. Coloque registros cerca uno del otro ( RLOC = X0Y0 ). Esto coloca el sincronizador 2-FF en la misma porción.
  4. Los flip flops tienen nombres únicos y se colocan en un grupo de tiempo especial llamado METASTABILITY_FFS . Restricciones de Xilinx:

    INST "*FF1_METASTABILITY_FFS"   TNM = "METASTABILITY_FFS";
    

    Todas las rutas de tiempo desde un FF normal a un FF metaestable se ignoran, a través de la restricción TIG .

    NET "*_async"       TIG;
    INST "*_meta*"  TNM = "METASTABILITY_FFS";
    TIMESPEC "TS_MetaStability" = FROM FFS TO "METASTABILITY_FFS" TIG;
    

    Fuentes: sync_Bits_Xilinx.ucf , Metastability.ucf

Editar: sincronizador 2-FF específico de Altera:

Agregué una nueva declaración de generación en genérico 2-FF implementación, para elegir una implementación específica de Altera: sync_Bits_Altera.vhdl

¿Qué tiene de especial esta versión?

  1. Ambos flip flops están marcados con PRESERVE para dificultar las optimizaciones.
  2. El primer / el flip-flop metaestable se anota con:

    attribute ALTERA_ATTRIBUTE of Data_meta     : signal is "-name SYNCHRONIZER_IDENTIFICATION ""FORCED IF ASYNCHRONOUS""";
    

    para marcar este flip flops como un circuito sincronizador.

  3. Todas las rutas a estos registros se establecen como false_path :

    attribute ALTERA_ATTRIBUTE of rtl               : architecture is "-name SDC_STATEMENT ""set_false_path -to [get_registers {*|sync_Bits_Altera:*|\gen:*:Data_meta}] """;
    

    Esta es la sintaxis de anotación de restricción SDC en línea.

Sincronizadores de nivel superior:

Por causa, PoC-Library también tiene un sincronizador predefinido para los vectores de bits llamado PoC.misc.sync.Vector , que se basa en el sincronizador genérico 2-FF. Si los bits maestros cambian, todos los bits se transfieren al dominio del reloj del receptor.

    
respondido por el Paebbels

Lea otras preguntas en las etiquetas