Managing Out-of-Context Constraints - 2023.2 English

Vivado Design Suite User Guide: Creating and Packaging Custom IP (UG1118)

Document ID
UG1118
Release Date
2023-11-06
Version
2023.2 English

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)
Note: For AMD delivered IP, the OOC XDC file has _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.

Important: The 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.