We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome,
Internet Explorer 11,
Safari. Thank you!
AR# 63991: 2015.1 Vivado Synthesis - IOB property set to true in XDC does not prevent control set optimization on the register, as a result the register cannot be placed into IOB
2015.1 Vivado Synthesis - IOB property set to true in XDC does not prevent control set optimization on the register, as a result the register cannot be placed into IOB
In my design, although I have the IOB property set to true in XDC, Vivado Synthesis still performs control set optimization.
This creates a feedback loop on the register that prevents it from being placed into IOB.
Vivado implementation gives the following warning:
WARNING: [Shape Builder 18-132] Instance dataout_one_reg has IOB = TRUE property, but it cannot be placed in an OLOGIC site. Instance dataout_one_reg cannot be placed in site OLOGIC_X1Y0 because the output signal of the cell requires general routing to fabric and cells placed in OLOGIC can only be routed to delay or I/O site.[..../test.xdc:34]
By adding the IOB attribute in RTL, Vivado Synthesis is able to replicate the register and have one of the registers that does not have a feedback loop drive the OBUF.
However, the IOB property is passed to both registers so the following critical warning is reported in Vivado Implementation.
CRITICAL WARNING: [Place 30-73] Invalid constraint on register 'dataout_reg_rep'. It has the property IOB=TRUE, but it is not driving or driven by any IO element.
How can I resolve this issue?
Both of these issues are fixed in Vivado 2015.3.
In Vivado 2015.3, when the IOB property is set on the register cell in XDC, Vivado Synthesis does not perform control set optimization so that the register does not have a feedback loop and only drives the OBUF.
When the IOB property is set in RTL, Vivado Synthesis replicates the register and only passes the IOB property to the one that does not have a feedback loop.
In Vivado versions prior to 2015.3, you can use one of the following workarounds:
1. Apply the IOB property in RTL and ignore the "CRITICAL WARNING: [Place 30-73]".
2. Set the "-control_set_opt_threshold" of Vivado Synthesis to "0" which prevents Vivado Synthesis from creating the feedback loop on the register.