All the constraints in the primary constraint set (constrs_1 by default) are applied
through synthesis and implementation of the parent run. All constraints for the
static portion of the implemented parent run are then contained within that locked
static checkpoint so there is no need to reapply these static constraints for
subsequent child runs. While the DFX Wizard shows constraints sets specified for
child runs (default or any other constraint set), these child runs do not apply
constraints unless explicitly requested in each run by setting the
APPLY_CONSTRSET
run property. Constraints specific to any
Reconfigurable Module must be applied for any child run, whether they are
constraints in the default constraint set or any new constraint set.
If constraints unique to individual RMs are required, they can be applied in different XDC sources added as sources within each Reconfigurable Module under the partition definition and then scoped to that module. Follow these steps to add and associate RM-level constraints.
- Add or create a new constraint file. This can be done by clicking
Add Sources in the Flow Navigator or clicking the +
sign in the Sources window. Select as many XDC files as are required.
These newly added XDC sources are added to the active top-level constraint file (unless another exists and has been selected in the dialog box in the previous figure), even if the Add Sources action was requested from the Partition Definition pane.
- For each XDC source, right-click and select the Move to Reconfigurable
Module command.
In the resulting dialog box, select the Reconfigurable Module from the list.
This action removes the selected XDC from the top-level constraint set and places it in the file set for the target RM. The result can be seen by examining the RM within the Partition Definitions tab. Repeat for all RM-level XDC added to the project
Note: This process can be undone by right-clicking on an XDC file in the Partition Definitions pane and selecting Move to Design Sources. This returns that XDC to the active top-level constraint set. - Select the XDC within the Partition Definition tab and examine the Source
File Properties. Set the
SCOPED_TO_REF
property to the name of the design module. This allows all the constraints within this module to include hierarchical references starting at the RM top rather than the design top. TheUSED_IN
properties can be set for these constraint files the same as they can for constraints in the top-level constraint set, and thePROCESSING_ORDER
can be used to shift when the constraint file is processed by the tools.
Alternatively, theSCOPED_TO_CELLS
property can be used to achieve the same result by identifying the hierarchical path to the module instance rather than calling out the module name. Either are valid methodologies for designs with single instantiations of a partition definition.
With the
SCOPED_TO_REF
orSCOPED_TO_CELLS
value set, all hierarchical instances within the XDC can omit the top-level path to the target RM. This XDC is applied whenever this particular Reconfigurable Module is included in a DFX configuration. No single RM-specific design constraints should be stored in the top-level constraint set; that set should be reserved for static constraints as well as RM-level constraints that are common to all variants within a given RP.Note: If a single partition definition is used to define multiple RP instantiations in a design, any RM-level constraints is applied for each instance when only usingSCOPED_TO_REF
. This means that any physical location constraints (for example Pblock ranges and LOC assignments) is applied each time. This would be impossible to achieve as each RP has a different physical location, so physical assignments must be tied to a specific RM in a specific RP. This can be done by using theSCOPED_TO_CELLS
property in addition to theSCOPED_TO_REF
property.
For more information on constraints scoping, see Constraints Scoping in the Vivado Design Suite User Guide: Using Constraints (UG903). For a DFX example, see Lab 3 in the Vivado Design Suite Tutorial: Dynamic Function eXchange (UG947).
By placing constraints that apply only to a single RM within the source set for that RM, you have the ability to build any possible DFX configuration and have the appropriate constraints applied for that parent or child run. No additional manipulation of source sets is necessary.