- Launch Vivado 2021.1 or a later version from the directory where the lab design scripts are located.
- Source the project script from the Vivado
Integrated Design Environment (IDE) by running the following command from the
Tcl console.
source ./create_top_bd.tclNote: The scriptcreate_top_bd.tclcreates a project and constructs the top level block design. The block design consists of three hierarchical blocks:static_iso_wrapper, rp1 and rp2.
- Create a block design container to create the Reconfigurable
Partition for rp1 instance:
- Right-click the collapsed rp1 instance and select Create Block Design Container.
- Name the container
rp1rm1and click OK.
- 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. - Validate and save rp1rm1.
- Open the mb_dfx_controller tab and click Refresh Changed Modules.
- Click Refresh IP Catalog if the option appears in the mb_dfx_controller tab.
- Validate the design.
- Right-click the collapsed rp2 instance and select Create Block Design Container.
- Name the container
rp2rm1and click OK. - Open the rp2rm1 tab and select the count_0 module of rp2rm1.
- Right-click to create the hierarchy and name the
hierarchy
iso_3. - Validate and save rp2rm1.
- Open the mb_dfx_controller tab and click Refresh Changed Modules.
- Click Refresh IP Catalog if the option appears in the mb_dfx_controller tab.
- Validate and save the design.
- Enable DFX
The following instructions enable the DFX capabilities within IP integrator and add new Reconfigurable Modules in the rp1, rp2 block design container.
- In the mb_dfx_controller diagram, double-click the rp1 instance to edit the block design container.
- 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.
- Validate and save the design.
- Repeat previous steps a, b, and c for rp2 to enable DFX for rp2.
- 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:
- Right-click rp1 and select
Create Reconfigurable
Module. In the dialog box that opens, give the RM a name of
rp1rm2and click OK.
- Right-click shift_left in the
Design
Sources tab under the Sources and click Add Module to Block Design.
- In the Sources tab, select Design Sources, then right-click shift_addr, then click Add Module to Block Design.
- Connect the pins to create the diagram as shown in following
figure.
- Select the shift_left_0 and shift_addr_0 modules, right-click to create the
hierarchy, and name the hierarchy
iso_2. - Validate and save rp1rm2.
- Open the mb_dfx_controller tab and validate and save the design.
- Right-click the rp2 instance, select Create
Reconfigurable Module. In the dialog box that opens, and
name the RM
rp2rm2. - Click OK.
- In the Sources tab, select Design Sources, right-click on count_down, then click Add Module to Block Design.
- Connect the pins to create the diagram as shown in following
figure.
- Open the rp2rm2
tab, select the count_down
module, right-click to create the hierarchy, and name the hierarchy
iso_3. - Validate and save rp2rm2.
- Open the mb_dfx_controller tab.
- Validate and save the design.
- Right-click rp1 and select
Create Reconfigurable
Module. In the dialog box that opens, give the RM a name of
- 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,Config1andConfig2.Config1contains shift_right and count_up RMs.Config2contains shift_left and count_down RMs.Synth_1is 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 runimpl_1is the parent run and implementsConfig1. The child runchild_0_impl_1implementsConfig2.
- 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:
- Open the DFX Wizard by clicking Dynamic Function eXchange Wizard in the
Flow Navigator or by selecting that option under the Tools menu.
- Click Next. In
the Edit Reconfigurable Modules step, you will see the Partition
Definitions and their corresponding Reconfigurable Modules.
- Click Next. In the Edit
Configurations step, click the automatically
create configurations link to generate two
configurations.
- Click Next. In the Edit Configuration Runs step, click the automatically create configuration runs link to create one run per configuration.
- Click Next, then click Finish to complete this section.
- Once the configuration runs are created, validate and save the design.
- Click Run Synthesis in the Flow Navigator. This launches the synthesis of the remaining modules and the entire example design.
- Open the DFX Wizard by clicking Dynamic Function eXchange Wizard in the
Flow Navigator or by selecting that option under the Tools menu.