Automatic Movement of IOB into Isolated Hierarchy

Isolation Design Flow for Zynq UltraScale+ MPSoCs and UltraScale+ FPGAs (XAPP1335)

Document ID
XAPP1335
Release Date
2023-05-15
Revision
2.2 English

The automatic insertion of IOBs into the intended isolated hierarchy is a feature of the Vivado Design Suite. Before Vivado tools, you had to manually instantiate IOBs inside of the HDL for each isolated module. Vivado tools, however, do this for you provided you have not already instantiated the IOB themselves. At initial inference, all IOB are at top level. Wherever Vivado IDF can see a clear usage for the IOB, it automatically moves this IOB from the top level into the desired isolated module. This movement happens in the Vivado synthesis and/or the opt_design step after synthesis but before placement.

However, there are some limitations to this feature because not all possible cases allow for such movement. These cases are as follows:

Case 1

Input with multiple destinations (that includes the top level). See the following figure.

Figure 1. Case 1 Block

In this case, a "reset" input to the top level MMCM also connects to at least on isolated region.

Case 2

Output whose input drives the IOB in question and at least one other region. See the following figure.

Figure 2. Case 2 Block

Case 3

Output whose input comes directly from an input port of the isolated module in question. See the following figure.

Figure 3. Case 3 Block
Note: It does not matter if that signal is used in the isolated module in question or not.

Case 4

Bidirectional IOB where input and output do not go to the same isolated region. See the following figure.

Figure 4. Case 4 Block

Case 5

IOB with connections only to top level logic. See the following figure.

Figure 5. Case 5 Block
Note: Top level IOB driving only top-level logic will not be moved

Case 6

IOB was manually instantiated by the user on their IP.

Directly instantiated IOB with the DONT_TOUCH property set on the buffer will not be moved. The DONT_TOUCH property can be inherited from the IP that instantiates the IOB or you can manually add the property.