Constraining an Edge-Aligned Source-Synchronous Input

author-image

By

A source-synchronous input interface is constrained in a similar way as a system-synchronous input interface. The FPGA receives a clock and uses that clock to latch the input data. In a source-synchronous interface that is edge-aligned, the clock transition occurs at the same time as the data transition. Figure 1 shows a sample source-synchronous input interface.

Figure 1. Source-synchronous input interface.

Use the following steps to constrain an edge-aligned source-synchronous input interface:

  1. Create virtual, base, and generated clocks

  2. Add input delay constraints

  3. Add false path exceptions to exclude invalid paths from timing analysis and reporting

For more details about any of these steps, or the calculations and constraints described below, refer to a href="/literature/an/an433.pdf">AN 433: Constraining and Analyzing Source-Synchronous Interfaces (PDF).

Clocks

A virtual clock models the clock in the external device that drives the data registers to transmit data to the FPGA.

A base clock is required on the input port of the FPGA. The base clock describes the clock characteristics at the clock input of the FPGA.

Generated clocks are required on all phase-locked loop (PLL) outputs. In an edge-aligned source-synchronous input interface, the PLL must phase shift the received clock by 90 degrees to meet internal timing requirements of the data capture registers.

Input Delay Constraints

You can use a maximum skew specification to calculate input delay values. The maximum skew specification indicates the allowable time variation for individual bits of a data bus to arrive at the FPGA.

The value of the input maximum delay is maximum skew value.

The value of the input minimum delay is -maximum skew value.

False Path Exceptions

In this edge-aligned example, data is transferred on rise-rise and fall-fall source and destination clock transitions. Use false path exceptions to cut rise-fall and fall-rise clock transitions, because data is not transferred on opposite-edge clock transitions.

Sample SDC File

# Create a virtual clock to describe the data clock in
# the external device
create_clock -name virt_clk -period 10

# 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
create_generated_clock -name data_clock -source [get_pins pll|inclk[0]] \
-phase 90 [get_pins pll|clk[0]]

# Add maximum and minimum input delay constraints
# assuming a skew requirement of +/- 250ps
# Use the equations for the input delay values listed above
set_input_delay -max -clock virt_clk 0.250 [get_ports data_in*]
set_input_delay -min -clock virt_clk -0.250 [get_ports data_in*]
set_input_delay -max -clock virt_clk -clock_fall \
0.250 [get_ports data_in*] -add
set_input_delay -min -clock virt_clk -clock_fall \
-0.250 [get_ports data_in*] -add

# Add false path exceptions for cross-clock transfers
set_false_path -setup -end -rise_from [get_clocks virt_clk] \
-fall_to [get_clocks data_clock]
set_false_path -setup -end -fall_from [get_clocks virt_clk] \
-rise_to [get_clocks data_clock]
set_false_path -hold -end -rise_from [get_clocks virt_clk] \
-rise_to [get_clocks data_clock]
set_false_path -hold -end -fall_from [get_clocks virt_clk] \
-fall_to [get_clocks data_clock]