SDI Timing Constraints

Implementing SMPTE SDI Interfaces with UltraScale GTH Transceivers Application Note (XAPP1248)

Document ID
XAPP1248
Release Date
2023-11-08
Revision
v1.6 English

For the SDI Wrapper Support and SDI Wrapper, only the periods of the FPGA IOB ports for GTH reference clocks (MGTREFCLK0/1P/N) and the GTH DRP clock need to be constrained.

The rxusrclk and txusrclk clocks no longer need to be constrained as they are automatically constrained within the GTH Wizard IP and are constrained depending on the maximum target line rate. For 6G-SDI and below, it is usually 148.5 MHz; for 12G-SDI it usually 297 MHz.

The UHD-SDI wrapper contains the NI-DRU used to recover data in SD-SDI mode. The NI-DRU only runs in SD-SDI mode and in that mode, the RXOUTCLK has a frequency of 148.5 MHz. In applications that support 12G-SDI, the RXOUTCLK is constrained to 297 MHz and the NI-DRU usually does not meet timing at 297 MHz. But, it doesn't need to because it is only active when RXOUTCLK is 148.5 MHz. An additional set of constraints can be applied to the NI-DRU so that the NI-DRU is constrained to 148.5 MHz while the rest of the RX section is constrained to 297 MHz. The following two constraints are used in the example design to accomplish this:

set_property KEEP_HIERARCHY true [get_cells \ uhdsdi_demo/sdi_4ch_rxtx/genblk1[0].sdi_wrapper_support/sdi_wrapper/uhdsdi_kugth_ctrl/NIDRU]
create_generated_clock -name nidru_clk0 -source [get_pins -of [get_clocks rxoutclk_out[0]]] \
-divide_by 2 [get_pins \ uhdsdi_demo/sdi_4ch_rxtx/genblk1[0].sdi_wrapper_support/sdi_wrapper/uhdsdi_kugth_ctrl/NIDRU/ \ Inst_dru/CLK]

A KEEP_HIERARCHY constraint is applied to the NI-DRU module so that the clock name that must be identified in the next constraint is not changed by synthesis. The get_cells portion of this constraint uses a path to the NI-DRU of SDI/GTH Control/NIDRU. In the example design, the UHD-SDI wrapper has an instance name of SDI. Change the SDI portion of this path to the instance name of the UHD-SDI wrapper in your application. The KEEP_HIERARCHY constraint is only applied for synthesis and does not apply for implementation so it does not interfere with any optimizations that the implementation tool may perform.

The create_generated_clock constraint creates a hierarchical clock just for the NI-DRU. This is not a physically separate clock. It is a logical clock used for timing analysis only. The NI-DRU is still driven by the RXOUTCLK of the GTH. This constraint tells the timing analyzer that the clock connected to the NI-DRU's CLK port is derived from the GTH RXOUTCLK but is half the maximum frequency. RXOUTCLK is constrained to 297 MHz so the NI-DRU is constrained to 148.5 MHz. The AMD Vivado™ Design Suite considers all clocks to be related unless specified. The various clocks of the SDI wrapper are generally unrelated so a constraint is required to specify that these clocks are not related.

See the timing constraints files of the example SDI demonstration provided with this application note for examples of setting these constraints.