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.
- Extract the design from the archive. The
dfx_projectdata directory is referred to in this tutorial as the
- Open the Vivado IDE and select Create Project, then click Next.
- 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.
- Select RTL Project and ensure the Do not specify sources checkbox is unchecked, then click Next.
- Click the Add Directories button and select these Sources
directories to be added to the design:
- Click Next to get to the Add Constraints window, then
select these files:
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.
- Click Next to choose the part. In the
Part selector, 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 View After Project Creation
At this point, a standard project is open. Nothing specific to Dynamic Function eXchange has been done.
- Select 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.
- 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.
- 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 view 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 view 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.