Setting a Bottom-Up, Out-of-Context Flow - 2025.2 English - UG901

Vivado Design Suite User Guide: Synthesis (UG901)

Document ID
UG901
Release Date
2025-12-05
Version
2025.2 English

You can set a bottom-up flow by selecting any HDL object to run as a separate out-of-context (OOC) flow. For an overview of the OOC flow, see Vivado Design Suite User Guide: Design Flows Overview (UG892).

The OOC flow behaves as follows:

  • Lower OOC modules run separately from the top level and have their own constraints.
  • OOC modules can be run as needed.
  • After you have run synthesis on an OOC module, a rerun is not required unless you change the RTL or constraints for that run.
  • The lower level OOC runs are treated as black boxes when the top level is run.

If any IP is synthesized in OOC mode, the top-level synthesis run infers a black box for these IP. Hence, you cannot reference objects, such as pins, nets, and cells, internal to the IP as part of the top-level synthesis constraints. During implementation, the netlists from the IP DCPs are linked with the netlist produced when synthesizing the top-level design files. The Vivado Design Suite resolves the IP black boxes. The tool applies IP XDC output products generated during implementation along with any user constraints. If any constraints reference items inside the IP, there are warnings during synthesis about this, but they can be resolved during implementation.

This can result in a large runtime improvement for the top level. Synthesis no longer needs to improve for the top level because synthesis no longer needs to be run on the full design.

To set up a module for an OOC run, find that module in the hierarchy view, and right-click the Set As Out-Of-Context for Synthesis option and select OK.

Figure 1. Set as Out-of-Context Synthesis Dialog Box

The Set as Out-of-Context for Synthesis dialog box displays the following information and options:

Source Node
Module to which you apply the OOC.
New Fileset
Lists the New Fileset name, which you can edit.
Generate Stub
A checkbox that you can check to have the tool create a stub file.
Clock Constraint File
Select to have the tool create a new XDC template for you. You can also use the drop-down menu to copy an existing XDC file to this Fileset. This XDC file must have clock definitions for all your clock pins on the OOC module.

The tool sets up the OOC to run automatically. You can see it as a new run in the Design Runs window and as a block source in the Compile Order tab.

Figure 2. Compile Order Tab

A new run is set up in the tool when you set a flow to Out-of-Context.

To run the option, right-click and select Launch Runs, described in Launching a Synthesis Run. This action sets the lower level as a top module and runs synthesis on that module without creating I/O buffers.

The run saves the netlist from synthesis and creates a stub file (if you selected that option) for later use. The stub file is the lower level with inputs and outputs and the black-box attribute set.

When you rerun the top-level module, bottom-up synthesis inserts the stub file into the flow and thereby compiles the lower-level module as a black box. The implementation run inserts the lower-level netlist, thus completing the design.

CAUTION:
Do not use the Bottom-Up OOC flow when there are AMD IP in OOC mode in the lower levels of the OOC module. To have AMD IP in an OOC module, turn off the IP OOC mode. Do not use this flow when there are parameters on the OOC module or the ports of the OOC module are user-defined types. Those circumstances cause errors later in the flow.