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 " dat
pasando por y aclk
pasando bdat1
por bclk
" Nota: aclk
y bclk
no son lo mismo, también pregunte ¿y si también?
¿Es un camino falso?
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]
Dado que su reloj de origen es aclk
y el reloj de destino es bclk
, adat
deberí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 adat
y 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í, adat
la ruta será falsa automáticamente. Asumo ACLK
y BCLK
son 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_FFS
es el primer flip-flop (el meta estable) y FF2
es el segundo flip-flop.
Puede encontrar una implementación genérica de sincronizador 2-FF en nuestra biblioteca PoC , así PoC.misc.sync.Bits
como dos implementaciones optimizadas de proveedores para Xilinx y Altera . El código XDC anterior se aplica relativamente a todas las instancias PoC.misc.sync.Bits
al establecer la propiedad del archivo SCOPED_TO_REF
en sync_Bits_Xilinx
.
ASYNC_REG
también es una propiedad de verilog (*ASYNC_REG="true"*)
que puede escribir directamente en el código de verilog.
Wouter van Ooijen
Prakash Darji
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.Paebbels
Prakash Darji
Martín Zabel
srst_ni
ydrst_ni
? ¿Parece no estar relacionado con el diseño de la imagen?Prakash Darji