Step 2: Load Initial Design Sources - 2022.1 English

Vivado Design Suite Tutorial: Dynamic Function eXchange (UG947)

Document ID
Release Date
2022.1 English

The first unique step in any DFX design flow (project based or otherwise) is to define the parts of the design that will be marked reconfigurable. This is done via context menus in the Hierarchical Source View in project mode. These steps will walk through initial project creation through definition of partitions in a simple design.

  1. Extract the design from the archive. The dfx_project data directory is referred to in this tutorial as the <Extract_Dir>.
  2. Open the Vivado® IDE and select Create Project, then click Next.
  3. Select the <Extract_Dir> as the Project location. Leave the Project name as project_1, and leave the Create project subdirectory option checked. Click Next.
  4. Select RTL Project and ensure the Do not specify sources at this time checkbox is unchecked, then click Next.
  5. Click the Add Directories button and select these Sources directories to be added to the design:
    • <Extract_Dir>\Sources\hdl\top
    • <Extract_Dir>\Sources\hdl\shift_right
  6. Click Next to get to the Add Constraints page, then select these files:
    • <Extract_Dir>\Sources\xdc\top_io_<board>.xdc
    • <Extract_Dir>\Sources\xdc\pblocks_<board>.xdc

    Note that these constraint files are full design constraints, scoped to the top level design. If you would like to perform your own floorplanning, only select the top_io xdc, omitting the Pblocks XDC. Stop the flow after synthesis to create your own floorplan.

  7. Click Next to choose the part. In the Default Part page, click on Boards and choose the target board matching the constraint file(s) you have selected. Then click Next and then Finish to complete project creation. The Sources window shows a standard hierarchical view of the design.
    Figure 1. Sources Window After Project Creation

    At this point, a standard project is open. Nothing specific to Dynamic Function eXchange has been done.

  8. Select Tools > Enable Dynamic Function eXchange.
    This prepares the project for the DFX design flow. Once this is set it cannot be undone, so archive your project before selecting this option.
    Figure 2. Enabling Dynamic Function eXchange

    In the ensuing dialog box, click Convert to turn this project into a DFX project.

  9. Right-click on one of the “shift” instances and select the Create Partition Definition option.

    This action will define both shift instances as Reconfigurable Partitions in the design. Since each instance has come from the same RTL source, they are logically identical. Out-of-context synthesis will be run to keep this module separated from top, and the one post-synthesis checkpoint will be used for both shift instances.

    Tip: If there are multiple instantiations of the same module within a design, but not all need to be reconfigurable, then the modules must be manually modified to become unique. Then you can independently tag desired instances as Reconfigurable Partitions.
  10. In the dialog box that appears, give names to both the Partition Definition and the Reconfigurable Module. The Partition Definition is the general reference for the workspace into which all Reconfigurable Modules will be inserted, so give it an appropriate name, such as shifter. The Reconfigurable Module refers to this specific RTL instance, so give it a name that references its functionality, such as shift_right, then click OK.
    Figure 3. Creating the shifter Partition Definition

    The Sources window has now changed slightly, with both shift instances now shown with a yellow diamond, indicating they are Partitions. You will also see a Partition Definitions tab in this window, showing the list and contents of all Partition Definitions (one at this point) in the design. In addition, an out-of-context module run has been created for synthesizing the shift_right module.

    Figure 4. Sources Window After Defining shift Partition

    At this point, more Reconfigurable Module sources may be added. This is done via the Dynamic Function eXchange Wizard.

    Important: After Partitions have been defined, all additional RMs must be added via the DFX Wizard, and any management of RM sources, configurations, and runs must also be done via this wizard.