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
2022-08-31
Revision
1.1 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 GUI 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.
    Figure 1. Top-Level Block Design
  3. Create a block design container to create the Reconfigurable Partition for rp1 instance:
    1. Right-click on the collapsed rp1 instance and select Create Block Design Container.
    2. Name the container rp1rm1 and click OK.
      Figure 2. Generate Output Products Window
    3. Select shift_0 and shift_addr_0 modules of rp1rm1, right-click to create hierarchy and name the hierarchy iso_2.
    4. Validate and save rp1rm1.
    5. Right-click on the collapsed rp2 instance and select Create Block Design Container.
    6. Name the container rp2rm1 and click OK.
    7. Open the rp2rm1 tab and select count_0 modules of rp1rm1.
    8. Right-click to create hierarchy and name the hierarchy iso_3.
    9. Validate and save rp2rm1.
    10. Open the mb_dfx_controller tab and click on Refresh Changed Modules.
    11. 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 on 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.
      Figure 3. Enable DFX on the rp1 Block Design Container
    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 on shift_left under the Sources->Design Sources Tab and Add Module to Block Design.
    3. Right-click on shift_addr under the Sources->Design Sources Tab and Add Module to Block Design.
    4. Connect the pins to create the diagram as shown in following figure.
    5. Select shift_left_0 and shift_addr_0 modules, right-click to create 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 on the rp2 instance and select Create Reconfigurable Module. In the dialog box that opens, name the RM rp2rm2..
    9. Click OK.
    10. Right-click on count_down under the Design Sources and Add Module to Block Design.
    11. Connect the pins to create the diagram as shown in following figure.
    12. Open the rp2rm1 tab and select count_down module, right-click to create hierarchy and name the hierarchy as iso_3.
    13. Validate and save rp2rm1.
    14. Open the mb_dfx_controller tab and click on Refresh Changed Modules.
  6. Right-click on mb_dfx_controller from Sources tab.
    1. Select Create HDL Wrapper and then select Let Vivado manage wrapper and auto update.
    2. Open the Sources tab and select mb_dfx_controller_wrapper from Sources tab.
    3. Right-click and then click on Set as Top.
  7. Click Generate Block Design which is under IP INTEGRATOR in the Flow Navigator window. Ensure 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.

    Figure 4. Example Design: Block Design

    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, and 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.

    Figure 5. Design Runs Tab – Configurations and their Runs
  8. 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 Finish to complete this section.
    6. Once the configuration runs are created, validate and save the design.
    7. Click on Run Synthesis in the Flow Navigator. This launches the synthesis of the remaining modules and the entire example design.