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 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 becomes 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 needs 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 prevents 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.