Post Go back to editing

SYSREF Pulse Width timing violation from IOB Placement constraint

Thread Summary

The user encountered a Pulse Hold timing violation on sysref_reg while compiling a Vivado project for a custom board with AD9695 chips at 1.3 GSPS sample speed (Device Clock = 325 MHz). The final answer suggests moving the SYSREF to a clock-capable pin and routing it through the global clock network to minimize skew, or constraining it to have a similar input delay as the device_clk if the pin change is not possible. The constraint in the jesd204_rx IP is ignored in the example design due to the use of a clock buffer (BUFG_GT).
AI Generated Content
Category: Hardware

Hi,

I'm pin verifying a Vivado project for a custom board which will connect with several AD9695 chips. (FPGA = xczu4cg-fbvb900-2-e). Vivado 2025.1

I have based the design off the ZCU102 - AD9695 example design.

When compiling for 1.3 GSPS Sample speeds (Device Clock = 325MHz) I get a Pulse Hold timing violation on sysref_reg. It looks like this is a limit of the RXTX_BITSLICE primitive in which 'sysref_reg' is placed due to a constraint in the jesd204_rx IP:

Generated jesd204_rx constraint:

# Make sure that the device clock to sysref skew is at least somewhat
# predictable
set_property IOB true \
[get_cells {i_lmfc/sysref_r_reg}]

In the example design I see sys ref is routed through a clock buffer (BUFG_GT), which causes the above constraint to be ignored.



Currently our SYSREF inputs are non clock capable. I'm wondering if the solution to this is to change the pins and route SYSREF through a clock buffer like the example design (although it would be a BUFG in our case).

Would routing sysref through a BUFG meet the requirement of predictable device clock to sysref skew mentioned in the constraint? Or could the constraint just be ignored without the clock buffer? (Or another solution?)

Thanks in advance

  • Hello,

    Would it be possible to move SYSREF to a clock-capable pin? Routing it through a BUFG could be a suitable approach; however, I would not recommend ignoring the constraint.

    A member of our team will review this issue in more detail shortly.

    Thank you for your patience and interest,

    Stanca

  • Hi,

    The constraint is ignored in the example design because you can't pack a flop into a IOB if it's fed from the global clock network.

    The best solution would be to move the sysref into a clock capable pin and route it through the global clock network to minimize skew.

    If you can't do that, since the sysref is usually low frequency, it's most of the time enough to just constrain it to have a similar input delay as the device_clk and if the timing passes it usually works.

    set_input_delay -clock [get_clocks device_clk] \
      [get_property PERIOD [get_clocks device_clk]] \
      [get_ports {sysref}]

    Regards,

    Bogdan

  • Okay good to know.

    We will route sysref to a clock capable pin.

    Thanks.