SDI IP Core User Guide

ID 683587
Date 8/20/2020
Public
Document Table of Contents

A.1.1. Constraints for SDI IP Core Using Stratix IV Device

These constraints are specifically used to constraint a duplex SDI IP core.

Specify Clock Characteristics

  • SD-SDI (rx_sd_oversample_clk_in = 67.5 MHz, tx_pclk = 27 MHz, tx_serial_refclk = 67.5 MHz)
    create_clock -name {rx_sd_oversample_clk_in} -period 14.814 -waveform { 0.000 7.407 } [get_ports {rx_sd_oversample_clk_in}]
    create_clock -name {tx_pclk} -period 14.814 -waveform { 0.000 7.407 } [get_ports {tx_pclk}]
    create_clock -name {tx_serial_refclk} -period 14.814 -waveform { 0.000 7.407 } [get_ports {tx_serial_refclk}]
    
  • HD-SDI, HD-SDI dual link (rx_serial_refclk = 74.25 MHz, tx_pclk = 74.25 MHz, tx_serial_refclk = 74.25 MHz)
    create_clock -name {rx_serial_refclk} -period 13.468 -waveform { 0.000 6.734 } [get_ports {rx_serial_refclk}]
    create_clock -name {tx_pclk} -period 13.468 -waveform { 0.000 6.734 } [get_ports {tx_pclk}]
    create_clock -name {tx_serial_refclk} -period 13.468 -waveform { 0.000 6.734 } [get_ports {tx_serial_refclk}]
  • 3G-SDI (rx_serial_refclk = 148.5 MHz, tx_pclk = 148.5 MHz, tx_serial_refclk = 148.5 MHz)
    create_clock -name {rx_serial_refclk} -period 6.734 -waveform { 0.000 3.367 } [get_ports {rx_serial_refclk}]
    create_clock -name {tx_pclk} -period 6.734 -waveform { 0.000 3.367 } [get_ports {tx_pclk}]
    create_clock -name {tx_serial_refclk} -period 6.734 -waveform { 0.000 3.367 } [get_ports {tx_serial_refclk}]
  • Dual standard, triple standard SDI
    create_clock -name {rx_serial_refclk} -period 6.734 -waveform { 0.000 3.367 } [get_ports {rx_serial_refclk}]
    create_clock -name {tx_serial_refclk} -period 6.734 -waveform { 0.000 3.367 } [get_ports {tx_serial_refclk}]
    create_clock -name {tx_pclk} -period 6.734 -waveform { 0.000 3.367 } [get_ports {tx_pclk}]
  • Soft transceiver SDI
    create_clock -name {rx_sd_refclk_135} -period 7.407 -waveform { 0.000 3.703 } [get_ports {rx_sd_refclk_135}]
    create_clock -name {rx_sd_refclk_337} -period 2.967 -waveform { 0.000 1.484 } [get_ports {rx_sd_refclk_337}]
    create_clock -name {rx_sd_refclk_337_90deg} -period 2.967 -waveform { 0.000 1.484 } [get_ports {rx_sd_refclk_337_90deg}]
    create_clock -name {tx_sd_refclk_270} -period 3.703 -waveform { 0.000 1.852 } [get_ports {tx_sd_refclk_270}]
    create_clock -name {tx_pclk} -period 37.037 -waveform { 0.000 18.519 } [get_ports {tx_pclk}]

Set Multicycle Paths

In some device families and speed grades, timing violations may occur in the format block of the SDI IP core. For SD-SDI, these violations are multicycle, and you can fix by applying the following constraints to your design.
Note: These constraints apply only to SD-SDIs; the violations are single-cycle paths in other video standards.
set_multicycle_path -setup -end -from [get_keepers {sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[0].u_txrx_port|sdi_format:format_gen.u_format|*}] -to [get_keepers {sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[0].u_txrx_port|sdi_format:format_gen.u_format|*}] 2
set_multicycle_path -hold -end -from [get_keepers {sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[0].u_txrx_port|sdi_format:format_gen.u_format|*}] -to [get_keepers {sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[0].u_txrx_port|sdi_format:format_gen.u_format|*}] 1

Specify Clocks that are Exclusive or Asynchronous

The SDI IP core may show timing violations in slower speed grade devices. These paths are not required to have fast timing, so you can use the following constraints to remove these timing paths. You can use the command set_clock_groups or set_false_path.
Note: The following SDC commands apply only for duplex core and Stratix IV devices; you must use the constraint entry dialog boxes to constrain the separate receiver or transmitter core and other device families.
  • SD-SDI
    set_clock_groups -exclusive -group [get_clocks {tx_pclk}] -group [get_clocks {sdi_megacore_top_inst|sdi_txrx_port_gen[0].u_txrx_port|gen_duplex_alt4gxb.u_gxb|alt4gxb_component|auto_generated|transmit_pcs0|clkout}]
    set_false_path -from [get_keepers {sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[0].u_txrx_port|switchline}] -to [get_clocks {sdi_megacore_top_inst|sdi_txrx_port_gen[0].u_txrx_port|gen_duplex_alt4gxb.u_gxb|alt4gxb_component|auto_generated|receive_pcs0|clkout}]
  • HD-SDI, 3G-SDI, dual standard, triple standard SDI
    set_clock_groups -exclusive -group [get_clocks {rx_serial_refclk}] -group [get_clocks {sdi_megacore_top_inst|sdi_txrx_port_gen[0].u_txrx_port|gen_duplex_alt4gxb.u_gxb|alt4gxb_component|auto_generated|receive_pcs0|clkout}] 
    set_clock_groups -exclusive -group [get_clocks {tx_pclk}] -group [get_clocks {sdi_megacore_top_inst|sdi_txrx_port_gen[0].u_txrx_port|gen_duplex_alt4gxb.u_gxb|alt4gxb_component|auto_generated|transmit_pcs0|clkout}]
    set_false_path -from [get_keepers {sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[0].u_txrx_port|switchline}] -to [get_clocks {sdi_megacore_top_inst|sdi_txrx_port_gen[0].u_txrx_port|gen_duplex_alt4gxb.u_gxb|alt4gxb_component|auto_generated|receive_pcs0|clkout}]
  • HD-SDI dual link (for the additional channel)
    set_clock_groups -exclusive -group [get_clocks {rx_serial_refclk}] -group [get_clocks {sdi_megacore_top_inst|sdi_txrx_port_gen[1].u_txrx_port|gen_duplex_alt4gxb.u_gxb|alt4gxb_component|auto_generated|receive_pcs0|clkout}] 
    set_false_path -from [get_keepers {sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[0].u_txrx_port|switchline}] -to [get_clocks {sdi_megacore_top_inst|sdi_txrx_port_gen[0].u_txrx_port|gen_duplex_alt4gxb.u_gxb|alt4gxb_component|auto_generated|receive_pcs0|clkout}]
    set_clock_groups -exclusive -group [get_clocks {tx_pclk}] -group [get_clocks {sdi_megacore_top_inst|sdi_txrx_port_gen[1].u_txrx_port|gen_duplex_alt4gxb.u_gxb|alt4gxb_component|auto_generated|transmit_pcs0|clkout}]
    set_false_path -from [get_keepers {sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[1].u_txrx_port|switchline}] -to [get_clocks {sdi_megacore_top_inst|sdi_txrx_port_gen[1].u_txrx_port|gen_duplex_alt4gxb.u_gxb|alt4gxb_component|auto_generated|receive_pcs0|clkout}]

Define the Setup and Hold Relationship between 135-MHz Clocks and 337.5-MHz Zero-degree Clocks

These constraints apply only to soft transceiver SDI.
  • Setup—1.5 clocks (4.43 ns) from the 337.5-MHz zero-degree clock to the 135-MHz clock
  • Hold—zero clocks from the 337.5-MHz clock to the 135-MHz clock
    Use the set_min_delay command to specify an absolute minimum delay for a given path.
    set_min_delay -from  [get_clocks {rx_sd_refclk_337}]  -to  [get_clocks {rx_sd_refclk_135}] 0.000
    Use the set_max_delay command to specify an absolute maximum delay for a given path.
    set_max_delay -from [get_clocks {rx_sd_refclk_337}] -to [get_clocks {rx_sd_refclk_135}] 4.430

Minimize Timing Skew

You must minimize the timing skew among the paths from I/O pins to the four sampling registers.
  • sample_a[0]
  • sample_b[0]
  • sample_c[0]
  • sample_d[0]
To minimize the timing skew:
  • Manually place the sampling registers close to each other and to the serial input pin.
  • Because these four registers use four different clock domains, place two of the four registers in one LAB and the other two in another LAB.
  • Then, place the two chosen LABs within the same row regardless of the placement of the serial input.
  • Finally, do not place the four sampling registers at the immediate rows or columns next to the I/O, but at the second row or column next to the I/O bank. This location allows faster inter-LAB interconnections between I/O banks and their immediate rows or columns compared to core interconnection.
The following code is an example of a constraint, which you can set using the Intel® Quartus® Prime Assignment Editor:
set_location_assignment PIN_99 -to sdi_rx
set_location_assignment LC_X32_Y17_N0 -to "sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[0].u_txrx_port|soft_serdes_rx:rx_soft_serdes_gen.soft_serdes_rx_inst|serdes_s2p:u_s2p|sample_a[0]"
set_location_assignment LC_X33_Y17_N0 -to "sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[0].u_txrx_port|soft_serdes_rx:rx_soft_serdes_gen.soft_serdes_rx_inst|serdes_s2p:u_s2p|sample_b[0]"
set_location_assignment LC_X32_Y17_N1 -to "sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[0].u_txrx_port|soft_serdes_rx:rx_soft_serdes_gen.soft_serdes_rx_inst|serdes_s2p:u_s2p|sample_c[0]"
set_location_assignment LC_X33_Y17_N1 -to "sdi_megacore_top:sdi_megacore_top_inst|sdi_txrx_port:sdi_txrx_port_gen[0].u_txrx_port|soft_serdes_rx:rx_soft_serdes_gen.soft_serdes_rx_inst|serdes_s2p:u_s2p|sample_d[0]"