Step 2: Create the Vivado Design and Run Through Synthesis

Isolation Design Flow + Dynamic Function eXchange Example Application Note (XAPP1361)

Document ID
XAPP1361
Release Date
2024-05-23
Revision
1.2 English
  1. Launch Vivado 2021.1 or a later version from the directory where the lab design scripts are located.
  2. Source the project script from the Vivado Integrated Design Environment (IDE) by running the following command from the Tcl console.
    source ./create_top_bd.tcl
    Note: The script create_top_bd.tcl creates a project and constructs the top level block design. The block design consists of three hierarchical blocks: static_iso_wrapper, rp1 and rp2.


  3. Create a block design container to create the Reconfigurable Partition for rp1 instance:
    1. Right-click the collapsed rp1 instance and select Create Block Design Container.
    2. Name the container rp1rm1 and click OK.

    3. Open the rp1rm1 tab, select the shift_0 and shift_addr_0 modules , then right-click to create the hierarchy. Name the hierarchy iso_2.
    4. Validate and save rp1rm1.
    5. Open the mb_dfx_controller tab and click Refresh Changed Modules.
    6. Click Refresh IP Catalog if the option appears in the mb_dfx_controller tab.
    7. Validate the design.
    8. Right-click the collapsed rp2 instance and select Create Block Design Container.
    9. Name the container rp2rm1 and click OK.
    10. Open the rp2rm1 tab and select the count_0 module of rp2rm1.
    11. Right-click to create the hierarchy and name the hierarchy iso_3.
    12. Validate and save rp2rm1.
    13. Open the mb_dfx_controller tab and click Refresh Changed Modules.
    14. Click Refresh IP Catalog if the option appears in the mb_dfx_controller tab.
    15. Validate and save the design.
  4. Enable DFX

    The following instructions enable the DFX capabilities within IP integrator and add new Reconfigurable Modules in the rp1, rp2 block design container.

    1. In the mb_dfx_controller diagram, double-click the rp1 instance to edit the block design container.
    2. Under the General tab, check both the Enable Dynamic Function eXchange on this container and the Freeze the boundary of this container options, then click OK.

    3. Validate and save the design.
    4. Repeat previous steps a, b, and c for rp2 to enable DFX for rp2.
  5. Add a New Reconfigurable Module.

    In the following steps, a new RM is created for the RP that now exists. Follow these instructions to create RM for each RP:

    1. Right-click rp1 and select Create Reconfigurable Module. In the dialog box that opens, give the RM a name of rp1rm2 and click OK.

    2. Right-click shift_left in the Design Sources tab under the Sources and click Add Module to Block Design.

    3. In the Sources tab, select Design Sources, then right-click shift_addr, then click Add Module to Block Design.
    4. Connect the pins to create the diagram as shown in following figure.

    5. Select the shift_left_0 and shift_addr_0 modules, right-click to create the hierarchy, and name the hierarchy iso_2.
    6. Validate and save rp1rm2.
    7. Open the mb_dfx_controller tab and validate and save the design.
    8. Right-click the rp2 instance, select Create Reconfigurable Module. In the dialog box that opens, and name the RM rp2rm2.
    9. Click OK.
    10. In the Sources tab, select Design Sources, right-click on count_down, then click Add Module to Block Design.
    11. Connect the pins to create the diagram as shown in following figure.
    12. Open the rp2rm2 tab, select the count_down module, right-click to create the hierarchy, and name the hierarchy iso_3.
    13. Validate and save rp2rm2.
    14. Open the mb_dfx_controller tab.
    15. Validate and save the design.
  6. Click Generate Block Design, which is under IP INTEGRATOR in the Flow Navigator window. Ensure the Out of context per IP synthesis option stays selected, and then click Generate.
    This step creates all of the IP identified in the block design and launches them through synthesis. This process can take a while to run. For this design, the block design covers the vast majority of the static logic representing the design infrastructure. This step does not launch out-of-context synthesis for the RTL submodules, which includes the shift and count Reconfigurable Modules. The example design instantiates the Zynq UltraScale+ MPSoC devices to support partial bitstream loading, via the PCAP.

    Dynamic Function eXchange Wizard is used to define relationships between the different parts of a DFX design. Within the DFX Wizard, you will define configurations, and configuration runs. A configuration is a full design image, with one RM per RP. A configuration run is a pass through the place and route tools to create a routed checkpoint for that configuration. The DFX Wizard also establishes parent-child relationships between configuration runs, helping automate required parts of the flow, including static design locking and pr_verify, and setting up dependencies between runs, so Vivado knows what steps to rerun when sources are modified. This example project has two configurations and their runs defined. There are two configurations created for the design, Config1 and Config2.

    Config1 contains shift_right and count_up RMs. Config2 contains shift_left and count_down RMs. Synth_1 is the parent run for the design.

    There are two runs in the example design. This first run establishes the static design, and the first pair of RMs. The second run uses the locked static design, and the second pair of RMs.

    The run impl_1 is the parent run and implements Config1. The child run child_0_impl_1 implements Config2.

  7. Use Dynamic Function eXchange Wizard to define configurations and run synthesis Within the DFX Wizard, you will define configurations and configuration runs. The DFX Wizard also establishes parent-child relationships between configuration runs. To create the configuration runs, follow the instructions:
    1. Open the DFX Wizard by clicking Dynamic Function eXchange Wizard in the Flow Navigator or by selecting that option under the Tools menu.

    2. Click Next. In the Edit Reconfigurable Modules step, you will see the Partition Definitions and their corresponding Reconfigurable Modules.

    3. Click Next. In the Edit Configurations step, click the automatically create configurations link to generate two configurations.

    4. Click Next. In the Edit Configuration Runs step, click the automatically create configuration runs link to create one run per configuration.
    5. Click Next, then click Finish to complete this section.
    6. Once the configuration runs are created, validate and save the design.
    7. Click Run Synthesis in the Flow Navigator. This launches the synthesis of the remaining modules and the entire example design.