Restricciones de SDC para sincronizador de dos flop

Tengo dudas sobre cuál debería ser la restricción SDC adecuada para el módulo CDC, es decir, un sincronizador de dos flop. entre " datpasando por y aclkpasando bdat1por bclk" Nota: aclky bclkno son lo mismo, también pregunte ¿y si también?

¿Es un camino falso?

ingrese la descripción de la imagen aquí

El siguiente es el archivo de restricciones de SDC que he usado,

# Input ports
# -----------------------------------------------------------------------------
set_input_delay $ACLK_IN_DELAY  -clock $SCLK [get_ports dat ]  

set_input_delay $V_CLK_1_IN_DELAY     -clock $V_CLK_1    [get_ports srst_ni]  
set_input_delay $V_CLK_1_IN_DELAY     -clock $V_CLK_1    [get_ports drst_ni]  

# Output ports
# -----------------------------------------------------------------------------
set_output_delay $BCLK_OUT_DELAY  -clock $DCLK [get_ports bdat2] 
¿Cuál es su suposición y por qué? (No damos respuestas sencillas a preguntas que huelen a tarea y no muestran esfuerzo).
@Wouter: No es trabajo en casa, estoy trabajando con la herramienta spyglass para limpiar el conjunto de reglas de cdc, tengo este módulo y, como puede ver, este módulo se usa para evitar la metaestabilidad. Estoy observando el error data loss on same or fast to slow clock domain crossing, así que lo que supongo es que puede ser una ruta falsa para que no realice ninguna verificación de tiempo en esta ruta. Si existe alguna restricción estándar para este tipo de cruce, entonces quiero saber, nada más.
Si no ha configurado ninguna restricción de tiempo, no puede haber ignoraciones de tiempo o rutas falsas. ¿Su herramienta puede generar un informe de interacción del reloj?
@Martin Zabel: ¡Sí, claro!
¿Cuáles son los puertos srst_niy drst_ni? ¿Parece no estar relacionado con el diseño de la imagen?
sí, es un diagrama simplificado, por lo que está excluido, pero RTL real usa ese reinicio.

Respuestas (2)

Dado que su reloj de origen es aclky el reloj de destino es bclk, adatdebería ser el único camino falso aquí. Otras rutas son válidas y no requieren ninguna restricción especial.

La ruta falsa se puede definir en el pin de entrada de datos del segundo registro (el que está entre adaty bdat1). No sé cómo su herramienta trata los nombres de registro, pero usé la convención de nomenclatura de Synopsys en el siguiente ejemplo.

set_false_path -to bdat1_reg/D

Hay una segunda forma de definir este camino falso. Si los relojes se definen asincrónicos entre sí, adatla ruta será falsa automáticamente. Asumo ACLKy BCLKson relojes previamente definidos.

set_clock_groups -asynchronous -group ACLK -group BCLK

Una sincronización de dos flip-flop se puede restringir con las siguientes líneas XDC. XDC es una variante de Xilinx para los comúnmente conocidos archivos Synopsis Design Constraint (SDC).

set_property ASYNC_REG true [get_cells -regexp {gen\[\d+\]\.Sync/FF2}]
set_property ASYNC_REG true [get_cells -regexp {gen\[\d+\]\.Sync/FF1_METASTABILITY_FFS}]
set_false_path -from [all_clocks] -to [get_pins -regexp {gen\[\d+\]\.Sync/FF1_METASTABILITY_FFS/D}]

Fuente: sincronización_Bits_Xilinx.xdc

FF1_METASTABILITY_FFSes el primer flip-flop (el meta estable) y FF2es el segundo flip-flop.


Puede encontrar una implementación genérica de sincronizador 2-FF en nuestra biblioteca PoC , así PoC.misc.sync.Bitscomo dos implementaciones optimizadas de proveedores para Xilinx y Altera . El código XDC anterior se aplica relativamente a todas las instancias PoC.misc.sync.Bitsal establecer la propiedad del archivo SCOPED_TO_REFen sync_Bits_Xilinx.

Creo que las restricciones dadas por usted son para XDC, no para SDC, por lo que si hago un análisis de cdc para dos sincronizadores flop dentro de una plataforma que no es xillinx como el catalejo de atrenta, ¿cómo debo restringirlo?
ASYNC_REG también es una propiedad de verilog (*ASYNC_REG="true"*)que puede escribir directamente en el código de verilog.