Courtesy: Cadence Systems
Allegro X Constraint Manager provides a worksheet-based environment where you define and manage constraints for all the objects in your design. In large, complex designs with various object relations, grouping objects can easily manage constraints. Grouping objects helps to assign constraints to multiple objects at once. However, assigning unique values to individual objects that are part of these group objects requires understanding constraint inheritance and precedence. For instance, constraining multiple Net Groups, which share the same constraints except for one constraint for one of the Net Groups.
Constraining design objects in the Allegro X design environment is a streamlined process. Constraints are organized in a hierarchy, which governs their flow across the objects, ensuring that the expected constraints appear at the appropriate levels in the design.
Constraint Inheritance
Constraints defined for objects at the top level of the object hierarchy are inherited by the lower-level objects, as illustrated in the following table:
For example, if you define the MIN_LINE_WIDTH constraint for a Net Class object in the Physical domain, all the objects placed below the Net Class object in the constraint hierarchy—Net Groups, Buses, Differential Pairs, XNets, Nets, Pin Pairs, Region, and Region Class—inherit the new value of the MIN_LINE_WIDTH constraint as well.
In Constraint Manager, assigned values appear in bold blue and inherited values appear in white text (in dark mode, which is the default).
In the illustrated example, when you update the constraint value for the Net Class, POWER_GROUP(10), the value of the MIN_LINE_WIDTH constraint is updated for all the nets under it.
Constraint Precedence
Constraints defined for the objects that are placed at a lower level in the object hierarchy take precedence over the values of the same constraints applied to higher-level objects, as illustrated in the following image:
In the following example, you can override the value of the MIN_LINE_WIDTH constraint for a Net object that already has the constraint inherited from a higher-level object in the hierarchy, such as Net Classes or Differential Pairs. The constraint value for all the higher-level objects associated with the updated net remains unchanged.
Constraints for a design must be defined at the highest level of the object hierarchy. This ensures that the constraints are consistent across all the objects in the hierarchy, as all the lower-level objects inherit the constraints. You can update the individual objects that need to be constrained differently.
Constraint Resolution
The Allegro X constraint system adheres to object precedence when resolving constraints. Constraint resolution works differently for constraints, depending on the domain. There are no default values for any electrical constraints in the Electrical domain. You can have unspecified electrical constraints for design objects, but not in the Physical, Spacing, and Same Net Spacing domains. In these domains, physical design objects—clines, shapes, pins, or vias—are considered part of a net or an XNet. Constraint Manager uses the constraint value that is set on a net or XNet object.
If the net or XNet is not constrained directly, it inherits a constraint value from a higher-level object in the constraint hierarchy that includes this net as a member. The higher-level object can be a group object, such as a Match Group, Differential Pair, Bus, or Net Class.
In this way, the Constraint Manager moves one level up to look for a constraint value. It continues this process until it finds a constraint specified on a level that includes the net as a member and uses that constraint value. If no constraint value is specified on the net or on a hierarchy level to which the net belongs, the net inherits the constraint from the design (Dsn).
Conclusion
You can leverage the constraint inheritance and precedence behavior to your advantage by grouping design objects appropriately. This can significantly aid the process of constraining design objects. Instead of defining a consistent property at multiple object levels, if the objects are properly organized in group-objects, you can simply define the constraint at the highest required level and have the rest of the objects inherit the constraint.