Two new Tcl commands are used to subdivide and recombine the RPs for Vivado processing. Unsurprisingly, the command names are pr_subdivide and pr_recombine. These commands shift the perspective for Vivado tools, moving the HD.RECONFIGURABLE property lower (subdivide) or higher (recombine) to define the logical boundary of static versus reconfigurable.
The first new Tcl command is pr_subdivide. As the name implies, this command breaks up a RP into one or more lower level RPs.
pr_subdivide Description: Subdivide an RP into one or more lower-level RPs when using the Nested Dynamic Function eXchange solution. Syntax: pr_subdivide [-cell <arg>] [-subcells <arg>] [-quiet] [-verbose] [<from_dcp>] Usage: Name Description ------------------------- [-cell] (Required) Specify parent RP module name [-subcells] (Required) Specify child RP module names [-quiet] Ignore command errors [-verbose] Suspend message limits during command execution [<from_dcp>] (Required) Specify OOC synthesized checkpoint path for the RM specified by option -cell
pr_subdivide is used on the first implementation of a DFX design, the run that establishes the results of a static portion design. This is the case whether static is the very top level, or includes an RP that has just been subdivided. With a fully routed initial design checkpoint open in Vivado, running pr_subdivide will automatically perform these tasks:
- Run update_design -black_box on the target RP, if it is not already a black box.
- Run lock_design -level routing on the remaining design if the target RP was not already a black box.
- Load a post-synthesis RM checkpoint for this RP, identified by the <from_dcp> argument. This RM must have one or more instances of hierarchy (filled with logic or black boxes) that will become RPs themselves.
- Push the HD.RECONFIGURABLE property from the original partition (the -cell target) to one or more lower-level partitions (defined by the -subcells option).
- Place the HD.RECONFIGURABLE_CONTAINER property on the original partition as a placeholder. pr_recombine will need to see this property to push the context back up to this level.
If the target RP is already a black box, you must run lock_design -level routing BEFORE pr_subdivide has been run to lock down everything that is currently placed and routed. If lock_design is run after pr_subdivide, DONT_TOUCH properties added to the newly loaded RM netlist will prevent logical optimization, inhibiting performance.
Because pr_subdivide must be run on a fully routed design, only one RP can be subdivided at a time. If a design has more than one RP - for example, in the design above it there was an RP B at the same level as RP A - the first subdivided RP must be implemented before the second RP can be subdivided. Any number of RPs can be subdivided, but they can only be created when all other RPs in the design have placed and routed RMs residing within them.
Similarly, you cannot subdivide an RP, then immediately subdivide a new child RP without first implementing the new static area for the lower-level RPs. In the figure shown in Design Structure, when RP A is subdivided into RPs W and X, module A1 must be implemented before W or X are themselves subdivided, as that process requires static results for A1 to be locked.
The second new Tcl command is pr_recombine. This command is used to remove all lower level RPs, restoring the RP definition to the parent cell. This command is used less frequently than pr_subdivide, as it is only needed for bitstream generation for a parent-level RM, or to return to a specific design structure for analysis of that specific configuration.
pr_recombine Description: Re-establish a parent cell as a RP while removing lower-level RPs when using the Nested Dynamic Function eXchange solution. Syntax: pr_recombine [-cell <arg>] [-quiet] [-verbose] Usage: Name Description ----------------------- [-cell] (Required) Specify reconfigurable container module name [-quiet] Ignore command errors [-verbose] Suspend message limits during command execution
pr_recombine moves the HD.RECONFIGURABLE property to the target cell, removing it from any cells below it.
The target cell must currently have an HD.RECONFIGURABLE_CONTAINER property, deposited there by pr_subdivide, identifying it as a viable target for pr_recombine.