En una interfaz de salida sincrónica de origen, el FPGA fuente el reloj para el dispositivo de destino. En una interfaz sincrónica de origen que está alineada en el centro, la transición del reloj se produce en el centro de la ventana válida de datos. La Figura 1 muestra una interfaz de salida sincrónica de origen de muestra.
Siga estos pasos para restringir una interfaz de salida de origen síncrono alineada en el centro:
- Cree relojes base y generados
- Agregar restricciones de demora de salida
- Agregue excepciones de ruta falsa para excluir rutas no válidas del análisis e informes de temporización
Para obtener más información acerca de cualquiera de estos pasos, o los cálculos y restricciones descritos a continuación, consulte AN 433: Restricción y análisis de interfaces de origen síncronos (PDF).
Relojes
Se requiere un reloj base en el puerto de entrada del FPGA.
Se requieren relojes generados en todas las salidas de ciclo bloqueado por fase (PLL). Una salida sincrónica de fuente alineada con una velocidad de datos doble hace que el reloj de salida cambie el reloj de salida en 90 grados, en comparación con el reloj de datos.
Se requiere un reloj generado en el puerto de reloj de salida del FPGA. El reloj generado es la referencia de reloj para los valores de demora de salida para el bus de datos.
Restricciones de demora de salida
Puede utilizar una especificación de valor máximo de 100.000 personas para calcular los valores de demora de salida. La especificación máxima indica la variación de tiempo permitida para que los bits individuales de un bus de datos salgan del FPGA.
El valor de la demora máxima de salida es (intervalo unitario /2) - valor máximo de propuesta.
El valor de la demora mínima de salida es el valor máximo de abate (intervalo unitariode 1,5*).
Excepciones de ruta falsa
En este ejemplo alineado con el centro, los datos se transfieren en transiciones de reloj de origen y destino de rise-rise y fall-fall. Utilice excepciones de ruta falsa para reducir las transiciones de reloj de rise-fall y fall-rise, porque los datos no se transfieren en transiciones de reloj del borde opuesto.
Ejemplo de archivo SDC
# Create a base clock on the input port of the FPGA, with a 10 ns period
create_clock -name input_clock -period 10 [get_ports clk_in]
# Create generated clocks on the PLL outputs
# Output clk[0] drives the data register
# Output clk[1] drives the output clock port with a 90 degree shift
create_generated_clock -name data_clock -source [get_pins pll|inclk[0]] \
[get_pins pll|clk[0]]
create_generated_clock -name clock_clock -phase 90 -source [get_pins pll|inclk[0] \
[get_pins pll|clk[1]]
# Create the generated clock on the output clock port of the FPGA
create_generated_clock -name output_clock -source [get_pins pll|clk[1]] \
[get_ports clk_out]
# Add maximum and minimum output delay constraints
# assuming a skew requirement of +/- 250ps
# Use the equations for the output delay values listed above
set_output_delay -max -clock output_clock [expr { (5 / 2) - 0.250 }] \
[get_ports data_out*]
set_output_delay -max -clock output_clock -clock_fall \
[expr { (5 / 2) - 0.250 }] [get_ports data_out*] -add
set_output_delay -min -clock output_clock [expr { (0.250 - (1.5 * 5) }] \
[get_ports data_out*]
set_output_delay -min -clock output_clock -clock_fall \
[expr { (0.250 - ( 1.5 * 5 ) }] [get_ports data_out*] -add
# Add false path exceptions for cross-clock transfers
set_false_path -setup -end -rise_from [get_clocks data_clock] \
-fall_to [get_clocks output_clock]
set_false_path -setup -end -fall_from [get_clocks data_clock] \
-rise_to [get_clocks output_clock]
set_false_path -hold -end -rise_from [get_clocks data_clock] \
-fall_to [get_clocks output_clock]
set_false_path -hold -end -fall_from [get_clocks data_clock] \
-rise_to [get_clocks output_clock]