By default, IP are synthesized OOC of the top-level design. When you use the out-of-context flow, an OOC flow-only XDC is required for sequential logic timing during Vivado synthesis. This XDC file provides clock definitions for clocks from the top-level, either from your IP or from another IP.
When creating your custom IP, it is recommended that you include an OOC XDC file to provide these clock definitions for synthesizing the IP standalone.
For more information on the OOC flow, see the following documents:
- Vivado Design Suite User Guide: Designing with IP (UG896)
- Vivado Design Suite User Guide: Synthesis (UG901)
_ooc
appended to the filename. This is not a requirement, because the
USED_IN
file property determines if it is an OOC
XDC file, not the filename.In a typical design, an IP receives some of its required constraints from the top-level design. For example, if your custom IP does not directly interface with the device boundary, it typically relies on the parent design to supply the input clock definitions. The OOC XDC file generally only contains these input clock definitions. This is required so that clock definitions exist when the IP is synthesized OOC of the top-level constraints. While this is not a requirement, it is not recommended to add any additional constraint types. During implementation of the entire design, the IP netlists link with the top-level netlist and the OOC XDC is not required.
There are two instances in which an IP must have the input clock definition in the IP XDC file instead of the OOC XDC file, which are, as follows:
- IP contains a clock definition connected to an input buffer
- IP contains a clock definition internal to the IP
In OOC mode, Vivado synthesis does not insert I/O buffers.
- If your custom IP port has an instantiated input buffer, leave the input clock definition in your IP XDC file.
- If the input clock definition is defined on an internal element of the IP, such as a Flip-Flop or a GT, leave the input clock definition in the IP XDC file.
- If your use case does not fall into one of the two categories, move the clock definition to the OOC XDC file.
After the OOC XDC file is created, set the USED_IN
property to
out_of_context
. This marks the XDC file to be processed in the OOC
flow only.
USED_IN
property for an
OOC XDC file should be {synthesis implementation out_of_context}
. If it
is only set to out_of_context
, it is not used during synthesis or
implementation.