Product Documentation
Virtuoso Unified Custom Constraints User Guide
Product Version IC23.1, November 2023

1


The Constraint Manager Assistant

The Cadence® Virtuoso® unified custom constraint management system allows you to establish design needs, save them as constraints, and share those constraints across specification, simulation, and implementation to drive the accelerated layout solution with reduced errors. A constraint-driven design preserves the design intent by enabling efficient design collaboration.

The unified custom constraint management system is available in:

This user guide is aimed at developers and designers of integrated circuits and assumes that you are familiar with:

Constraints Workspace Configuration

The Constraints workspace configuration assists you in the creation, selection, and editing of constraints.

You can access the Constraints workspace from the Virtuoso® Layout Suite XL, and the Virtuoso® Schematic Editor XL by using one of the following methods:

The Constraints workspace comprises of the following assistants:

Additionally, in VLS XL, the Layers and Objects assistants are also displayed.

For more information on workspaces, see the Getting Started with Workspaces and Working with Workspaces chapters in the Virtuoso Studio Design Environment User Guide.

Constraints-Helper Workspace Configuration

The Constraints-Helper workspace configuration assists you in the creation of constraints.

You can access the Constraints-Helper workspace from the Virtuoso® Schematic Editor XL (only) by using one of the following methods:

The Constraints-Helper workspace comprises of the following assistants:

For more information on workspaces, see the Getting Started with Workspaces and Working with Workspaces chapters in the Virtuoso Studio Design Environment User Guide.

An Introduction to Constraints

A simple way to define a constraint is to consider it as an objective that can be used to influence the possible implementation, placement, or routing in a system. In the context of layouts and schematics, this would be a design object with respect to its goal. Constraints are therefore requirements that need to be followed during design implementation.

This document refers to designs as being the full set of design objects in a design hierarchy, including all instances, nets, terminals, pins and instance terminals expressed as cell, instance or occurrence. By understanding constraints in your design hierarchy, you can determine specification limits for design objects.

A constraint can have parameters that are pre-defined name-value pairs that further define the design intent and the status of that constraint.

Constraints are stored in the layout database or in The Constraint View (not the schematic view) for schematics.

Virtuoso Unified Custom Constraints - A Use Model Overview

The Virtuoso Unified Custom Constraints system provides for constraints to be captured alongside connectivity in schematic applications to form a full design specification. This unique capability allows electrical designers to capture additional concerns to ensure that the electrical performance of their design is guarded against unwanted electrical side-effects during implementation.

These additional physical requirements can include:

This formal specification facilitates a vastly improved dialog between front-end and back-end engineers.

Constraint Manager Overview

To provide for this improved dialog, the Constraint Manager is available as a docked assistant inside both the Virtuoso Schematic Editor (VSE) and the Virtuoso Layout Suite (VLS) at the XL tier and above, displaying specification and implementation constraints respectively.

The history of specification and implementation constraints are tracked via creation, last modified, and last checked timestamps (see Constraint History) that also identify the reason for the change and the person or application that made that change. Additional implementation constraints can be directly entered into the VLS Constraint Manager by the back-end engineer.

Constraints can also be overridden (see Overriding Constraints), and this state is clearly marked so that the specification and implementation can be brought back into alignment with further discussion between front-end and back-end engineers.

Devices can also be carefully specified in the VSE Constraint Manager via direct access to the VLS modgen device builder. Specifications can also be applied to cells as well as designs (see Creating Constraints at Different Design Levels), providing stronger control of IP as well as designs.

In summary, the Constraint Manager enables the specification to be carefully managed and implementation progress be tracked.

Constraints Database

The provision of a unified constraints database, accessible using the Constraint Manager, provides constraint storage for and access to, for example, many types of constraints including:

Circuit Prospector Overview

Virtuoso Unified Custom Constraints offers a valuable assistant in VSE XL to automate or assist with the constraint create process for designers. The Circuit Prospector Assistant is capable of finding circuit sub-structures in a design then generating the right set of constraints. Structures covered as standard include cascades, current mirrors, differential pairs, and so on.

As the Circuit Prospector is extensible, many other structures can be added to Circuit Prospector’s library by CAD departments and designers.

If you have a structure in an existing design (and have already populated it with a set of appropriate constraints), the Circuit Prospector can snapshot the structure and its constraints, and add it to its library. The Circuit Prospector provides the means to generate constraints quickly, accurately, and repeatedly. The barriers to constraint driven design have therefore been significantly reduced with the introduction of the Circuit Prospector.

The various components of the constraint-driven flow, from constraint specification to implementation by applications and automatic status tracking, help to accelerate the design process significantly and augment specification-driven design.

The Constraint View

The constraint view name (default constraint) is displayed in the Parameters column in the Constraint Manager.

Note:

See also: Creating Constraints in the Constraint Manager.

Multiple constraint views can be associated with each schematic. In terms of Save, Save a Copy, Discard Edits, and Close, constraint views remain in sync with the associated schematic.

You can associate a constraint view with a single schematic view of the same cell by setting the CI_SAME_CELL_UNIQUE_SCHEMATIC_CACHE environment variable.

A difference can arise when the design hierarchy is read-only or unmodified, but the constraint view has been modified. Allowing constraint changes without modifying the design is an important reason for storing constraints separately from the database cellviews.

The constraints view for the current cell is opened in append (write) mode, but the constraints associated with the sub-cells are opened in read-only mode.

Constraint Name Column

Constraint names can be displayed as a column in the Constraint Manager. To view the shortcut menu, right-click the filter and select Column — Name option, as shown below:

The constraint names are displayed in the new Name column of the Constraint Manager assistant.

Changing a Constraint View Name List

The default constraint view name used is “constraint”. The rest of this section will be of interest only if you need more than one constraint view per schematic or if you require to use alternative names for your constraint views.

You can specify the constraint views that you want to use in your design by modifying the global constraint view list, where by default “constraint” is used as the view name (see Constraint Manager Options Form (Schematic) for information on the Global Constraint View List option).

However, when generating a layout or running a simulation, the constraint view to be used needs to be specified in the constraint view list of the physConfig (through CPH, see Configure the Physical Hierarchy in the Virtuoso Layout Suite documentation) and the config (through HED, see Cadence Hierarchy Editor User Guide). If nothing is specified, the same view names are used in both cases.

When VLS XL (and higher tiers) is launched, VSE XL picks up the constraint view list that has been set in the physConfig. Sub-configurations can also be created.

You can also configure constraint views using the Cadence Hierarchy Editor (see the Cadence Hierarchy Editor User Guide).

On the rare occasion that a config cannot be used, or does not exist, constraint views can also be configured globally using the viewNameList environment variable.

It is still recommended that you use “constraint” as the default constraint view name, and perhaps create additional constraint view names when overrides are required.

Constraint Storage

Constraint storage differs from schematic to layout. In the schematic, constraints are stored in an OpenAccess database (hierDesign.oa) that resides in a view called constraint view; whereas, in the layout, the constraints are stored in the layout database itself.

When you open in Schematic XL a design that does not have associated constraints, a constraint view is not created. A constraint view is created when you:

Ensuring that the Constraint View Is Editable

Checking out a schematic view does not check out the (companion) constraint view automatically and the constraints remain grayed out in the Constraint Manager assistant. Therefore, if you want to open the constraint view in edit mode, you must select the Make Editable option from the Save Constraints drop-down list box on the Constraint Manager toolbar.

If the schematic view is initially opened in read-only mode, the constraints displayed in the Constraint Manager assistant appear inactive.

Introducing the Constraint Manager Assistant

The Constraint Manager dockable assistant pane allows for the addition, modification, and deletion of constraints from/to the Cadence Constraint Storage system. The Constraint Manager user interface comprises of two main component parts; Constraint Browser and Constraint Parameter Editor.

The Constraint Manager is available as an assistant in both schematics and layout. In Schematic XL, as shown in the figure below, the Constraint Manager displays the content of the constraint view being used as per a given configuration.

In Layout XL, the Constraint Manager displays the constraints that currently exist in the layout.

The Constraint Manager displays a full set of constraints for a design wherever you are in the hierarchy with the current cellview, and wherever the constraints were created in that hierarchy. The Constraint Manager displays a full set of constraints for the current cellview and below.

If you are in the Virtuoso Layout Suite, the hierarchy displayed in the Constraint Manager (and the Navigator) will be controlled by the CPH (Configure Physical Hierarchy).

Only those cells at the current level can be edited (those with a white background). Constraints, with a gray background, that are found at a lower level cannot be edited.

Examples of constraints include matching, symmetry, orientation, matched orientation, IR drop, clustering, alignment, area, distance, boundaries, guard rings, custom module generators (modgens), cell plans, and clusters.

The Constraint Manager also keeps track of all added constraints by grouping constraints by instance or constraint type. Each constraint can be modified, for example symmetry can be changed from mirror to simple.

The Constraint Manager allows designers to manually create constraints by selecting groups of instances, nets, pins, and terminals from the design canvas and applying constraints to them. For example, a designer may look to apply a set of constraints to common circuit structures, related devices (such as the same size, area, or type), devices with shared characteristics and connectivity, and symmetrical devices with specific properties. For information on how this information is captured see The Circuit Prospector Assistant.

You can only have one Constraint Manager assistant active in each session window. If you open multiple top-level cellviews within a session, the Constraint Manager assistant updates to display the design constraints for the currently active top-level cellview.

The figure above shows the Constraint Manager assistant in Layout XL. Some of the Constraint Manager Toolbar options differ from those available in Schematics XL. In addition, the constraints created using the Constraint Manager in Schematics XL will also be reflected (transferred) in the Constraint Manager in Layout XL (for more information on this, see Transferring Constraints Between Schematics and Layout in the first instance).

Accessing the Constraint Manager

You can access the Constraint Manager by:

Constraint Manager Toolbar

The Constraint Manager toolbar varies when accessed from Virtuoso Schematic XL and Virtuoso Layout XL. The images below show the difference.

Figure 1-1 Constraint Manager toolbar (Virtuoso Schematic Editor XL)

Figure 1-2 Constraint Manager toolbar (Virtuoso Layout XL)

The Constraint Manager toolbar provides the following options (available in both schematics and layout unless otherwise stated):

Save Constraints
drop-down
(schematics only)

Saves the constraints listed in the Constraint Manager to the constraint view that is currently in use (and is configured) with the given schematic.

The main VSE menu File – Save/Save a Copy/Discard Edits options also update for constraint use. For example, Save (Constraint) will display when a constraint update has been made but not yet saved. Consequently, the File menu save options can also be used to save constraint status.

Click the Save Constraints drop-down list box for the following options:

- Save a Copy (schematics only)

Invokes the Save a Copy form which allows you to save a copy of the current view. This allows you to save different constraint views (see The Constraint View).

- Load From (option available in schematics and as a standalone toolbar option in layout)

Invokes the Load Constraints form.

The Load From option allows you to populate the Constraint Manager assistant with constraints of a corresponding cellview (including any saved templates), from another library.

Figure 1-3 Load Constraints from an External View

Alternatively, you can use the ciLoadConstrFrom SKILL function to load the constraints from the source cache to the target cache of the same type.

Any constraint inconsistencies or corruptions will be cleared when constraints are loaded. In such cases, a warning message is also displayed in the CIW advising you of this action.

On completion of the constraints loading process, an INFO message is displayed in the CIW listing the count of constraints, parasitic constraints, and constraint groups that were successfully loaded from the specified cellview.

In VSE, the constraints can be loaded from a constraint cellview, while in VLS constraints can be loaded from a layout cellview. To be relevant, and in-context, the members of the loaded constraints must have the same instance or net names as those in the current cellview.

When Replace mode (the default) is selected, all constraints in the Constraint Manager assistant will be purged from the cache before the new constraints are loaded.

If Append mode is selected, the new constraints from the selected cellview will be added to the existing constraints in the Constraint Manager assistant, except where the consistency checker detects a conflict with an existing constraint. If the constraint name conflicts with an existing constraint name, the loaded constraint will be renamed. However, if the consistency checker detects an incompatibility between an existing constraint and a new constraint, the loaded constraint will not be created.

In VLS XL, the Load From option is available directly from an icon on the Constraint Manager assistant toolbar. Additionally, in VLS XL, the Constraint View field name in the Load Constraints form is labeled as Layout View.
- Discard Edits (schematics only)

Select to discard any edits made to constraint values since the last save.

The Discard Edits pop-up window is displayed asking you to confirm that you want to discard edits.

The File – Discard Edits (Constraint) option in the schematic editor can also be used to discard any constraint edits made. A discard edits form is also displayed for confirmation.

- Make Read Only/Editable (schematics only)

Select to change the constraint view’s mode from edit to read-only, or conversely. When you choose to switch the constraint view to read-only mode, the Make Read Only form is displayed. This form allows you to choose whether to save or discard your changes, if any, before making the constraint view read-only.

Alternatively, you can use the File – Make Read Only/Editable option in the schematic editor to change edit mode. You can also use the File – Make Read Only menu from the CIW to display the Make Read Only form and select the constraint view on which edit permissions need to be revoked.

Checking out a schematic view does not automatically trigger a check out of the (companion) constraint view. Therefore, you might see that the constraint view remains grayed out in the Constraint Manager even after you have checked out the schematic view. To ensure that the constraint view is in edit mode, you must select the Make Editable option from the Save Constraints menu on the Constraint Manager toolbar. This assumes that the schematic view was not initially opened in read-only mode.

When a constraint view is in read-only mode, for example after setting to Make Read Only, the Constraint Creation menu and the Update Schematic Constraints and Delete buttons appear disabled. The text of the constraints view directory, and the text of the constraints contained directly within, are also be grayed out.
- Options (schematics only)

Displays the Constraint Manager Options form.

Constraint Creation
(schematics and layout)

Creates the selected constraint comprising of the currently selected object group members (as selected in the design canvas or the Navigator Assistant).

Constraints that cannot be generated with the current object selection will be grayed out. For detailed information, see Constraint Creation and Current Object Selection and Constraint Creation History.

Individual constraints are categorized and located in the following related constraint sub-menus: Electrical, Placement, or Routing. For more information on what constraints can be found in each constraint category and specific constraint creation conditions that need to be met for each constraint, see The Constraint Manager Assistant.

In addition to these three constraint sub-menus, you have the Rapid Analog Prototype sub-menu. The constraint generators available under this sub-menu are the same as:

  • Generators associated with all finders available in the Rapid Analog Prototype category of the Circuit Prospector assistant.

When the Constraint Manager assistant is opened in read-only mode, the Constraint Creation menu will be grayed out to prevent creation of any constraints. For more information on how to create constraints, see Creating Constraints in the Constraint Manager.

See Customizing Constraint Types Using a Configuration File in the Virtuoso Unified Custom Constraints Configuration Guide for information on:

  • controlling the constraint types and parameter names that should be displayed.
  • how to display constraints in a hierarchical menu format in the Constraint Creation menu.

- Add Design Intent Constraints

Lets you create a constraint on a design intent using the Constraint Manager. For more information on design intents, refer to the Virtuoso Design Intent User Guide.

- CloneFamily

A Clone Family template can be used to create cloning constraint on the selected devices. A clone is an identical set of devices with the same topology. For detailed information on cloning and clone families, refer to the Generating Clones section of the Generating a Layout chapter in the Virtuoso Layout Suite documentation.

Select some devices on the canvas and the CloneFamily submenu gets enabled in the Constraint Creation menu as shown below.

The Clone Family template is created with a Clone Def constraint on the selected devices.

Adding Clone Def to an Existing Clone Family Template

To create one or more clones in the schematic with the same topology as the selected clone source, do the following:

  1. Right-click a Clone Family template or a Clone Def constraint. The context-sensitive menu displays the Add Clone option.
  2. Select Add Clone.
    This displays the Capture Clone form. In addition, the pointer changes into a ghost image of the source Clone Def devices, as shown below. When a Clone Family template is selected, the first Clone Def is used as source Clone Def. This pointer indicates a dragSet of the source Clone Def.

The Capture Clone form displays the following two list boxes and buttons to change the orientation of the dragSet:

    • Source lists the devices from the source Clone Def.
    • Target lists the devices that belong to the target Clone Def.
  1. Move the pointer over target devices to identify whether they have the same topology as the source devices (the devices from the source Clone Def). If the target device has the same topology, it appears with green halo.
    For a target device to appear with green halo, it should have the same master as the source device. In addition, the target device should not already be a part of another Clone Def or Modgen constraint.

For example, the figures below show the difference in highlights based on pointer movement over different target devices. The first figure indicates all four target devices under the pointer have the same topology as the source devices; whereas, in the second figure, only two target devices out of four match.

  1. Click the target devices on which you want to create the new Clone Def constraint. The list boxes in the Capture Clone form show the correspondences between the source and target devices, as shown in the figure below.
    After a matching target device has been selected for each source device, the new Clone Def constraint gets created and added to the Clone Family template, as shown below.

Important Points to Remember

While creating clones, you can:

  • Remove devices from the dragSet by deselecting device names in the Source list box of the Capture Clone form or using Ctrl+Click or Ctrl+Area select on source schematic devices. The removed device gets highlighted with white halo and the pointer shows only the remaining source devices.
  • Add (previously removed) devices from the source in the dragSet by selecting the device names in the Source list box of the Capture Clone form or using Shift+Click or Shift+Area select on source schematic devices.
  • Remove a previously defined correspondence with Ctrl+Click or Ctrl+Area select on a target schematic device.
  • Rotate the whole dragSet with center-click or r bindkey. You can also use the Rotate button in the Capture Clone form.
  • Mirror X the whole dragSet with Ctrl+Center-click. You can also use the Upside Down button in the Capture Clone form.
  • Mirror Y the whole dragSet with Shift+Center-click. You can also use the Sideways button in the Capture Clone form.
  • Access the Capture Clone form from the Constraint Manager assistant in the schematic or layout. However, in both the cases, the functionality is run on the schematic window. Therefore, when this form is launched from the layout Constraint Manager, the layout cellview should be opened in Layout XL with a valid schematic “connectivity reference” cellview. In addition, all layout instances should be bound to schematic devices.
  • Transfer from schematic to layout the entire Clone Family template as a complete unit.
- Common Centroid

The Common Centroid template and constraint generator can be used to create a group of constraints that implements a common centroid (center of gravity) for two or four selected devices (see also Additional Use Case).

The order of devices selected is important. Therefore, if you have four devices currently selected either in the canvas or in the Navigator, choosing Common Centroid displays the Common Centroid form.

The Common Centroid form has the following options:

  • Axes enables you to use a New_Pair of axes, or to select a pair of axes that is already in use by another Common Centroid template.
  • Orientations enables you to choose the orientation constraint to be added to the constraints’ template. The options here are: none (where no orientation constraint is created), and vertical and horizontal (where an orientation constraint is created based on the setting selected).
  • Re-order Selection (by name): This option sorts the selected instances by name so that symmetries are created on the instances regardless of the selection order. For example, if instances M2<1:0> and M1<2:0> are selected, then:
    • The two horizontal symmetries are created between
      • M1<0> and M2<0>
      • M1<1> and M2<1>
    • The two vertical symmetry are created between
      • M1<0> and M1<1>
      • M2<0> and M2<1>
  • Re-order Selection (disabled): This option disables the reordering of the selected instances, which allows you to create symmetries as per the order in which the instances are selected.

For example, if four devices are selected in the order of A, B, C, and then D, the Common Centroid template created contains three symmetries: the pairs AB and CD will be on the same vertical axis, and AC will be on a horizontal symmetry axis. An optional orientation with all four devices is also added, depending on the value of the Orientations option described above.

Editing an orientation constraint within the template is prevented by the template callback, as is the deletion of any templates. Editing symmetry constraints is however allowed.

While creating a common centroid template, you need to first create the orientation constraint. If this constraint is created successfully, you need to continue with the symmetry constraints creation. Otherwise, you first need to find an existing orientation constraint with same members and parameters.

If you are able to find an existing orientation constraint with same members and parameters, you need to mark this constraint to be moved into the template, otherwise abort the template creation.

While creating the symmetry constraints, if any of the symmetry constraint cannot be created, then you need to delete the constraints that are already created for this template and abort the template. However, for symmetry constraints, you do not need not to find an existing constraint. This is because the axes chosen are always unique or from the existing common centroids.

In addition, to avoid displaying of messages during constraint creation, you can create the constraints in the silent mode. This can be done by making the argument verbose = nil in ciConCreate. Once all the constraints are successfully created, you can show the creation messages at one go.

  • Using SKILL

A Common Centroid template can also be created in SKILL by using the template definition name "commonCentroid". For example, to create a Common Centroid template for devices A, B, C, and D, the command is as follows:

ciTemplateCreate cache "commonCentroid" ?members '( '("A" 'inst) '("B" 'inst) '("C" 'inst) '("D" 'inst))

This creates a new template with two new axes.

The ?userParams argument for ciTemplateCreate specifies the axes names and the optional orientation:
'('("vertical" VAxisName_s) '("horizontal" HAxisName_s) '("orientation" "vertical" | "horizontal"))

The axes names and orientation can be specified in any order or combination, and are all optional. When an Axis parameter is missing, an axis is created, but when the Orientation direction is missing, the orientation constraint is not created. The calling function is responsible for creating and naming the axes and ensuring that the axes have the correct direction before it calls ciTemplateCreate.

  • Templates and Constraint Transfer

As is the case with all templates, any related constraints are fully transferable to the layout, and all transferred constraints form part of the resultant layout template.

  • Example of Use

If the Common Centroid template is created in a schematic, and the mFactor of all devices is identical after the devices are transferred to the layout template, the template contains 3x the mFactor value symmetries for each pair of mFactor instances.

In the example above, if mFactor=2 for all devices, the layout template contains symmetries for the following pairs (A.1 B.1) (A.2 B.2) (C.1 D.1) (C.2 D.2) (A.1 C.1) (A.2 C.2).

If an orientation constraint exists in the schematic template, it will have all mFactored members in the layout transferred constraint. This is equivalent to having A.1 B.1 C.1 D.1 as a common centroid, and A.2 B.2 C.2 D.2 as another common centroid; the latter being a common centroid for each mFactored finger.

  • Additional Use Case

You can also create a Common Centroid template on two instances, given the condition that the mFactor (multiplier factor) on both instances is equal, and of an even number (at least 2).

For example, a Common Centroid is created, in a schematic, on two instances (A and B) (both having mfactor = 2). Then, one symmetry constraint is created with A and B as members, and with a vertical axis. When this constraint is then transferred to layout, three symmetry constraints will be created on: (A.1-B.1) (B.2- A.2) (A.1-B.2). The first two constraints are on the same axis (vertical), as in the schematic, while the third constraint will be on the horizontal axis.

Similarly, when mFactor = 4, the symmetry constraint in the Common Centroid, in the schematic, would become 6 symmetry constraints in the Common Centroid template in layout. That is, for members A and B again, this would be (A.1-B.1)( A.2-B.2) (A.1-B.2) (A.3-B.3) (A.4-B.4) and (A.3-B.4). The third and sixth constraints would have a horizontal axis. So, the result is 1.5X constraints in layout where X is the mFactor value.

Common Centroid is an example of a Constraint Template. Templates can be created and edited for various types of symmetries, alignments, and so on. For information on creating constraint generators, see Creating Custom Constraint Generators in the Virtuoso Unified Custom Constraints Configuration Guide.
- Matching (strength)

Matching (strength) is an example template that can be used to generate constraints for objects that are currently selected in the design canvas. Selection will invoke the Matching (strength) form.

Using this form, you can set constraint matching strength to be either low, medium, or high.

If matching constraints cannot be achieved, individual constraints inside the matching template (a managed collection of constraints) will be marked as passed (green).

Matching (strength) is an example of a Constraint Template. Templates can be created and edited for various types of symmetries, alignments, and so on. For information on creating constraint generators, see Creating Custom Constraint Generators in the Virtuoso Unified Custom Constraints Configuration Guide, and ciRunMatchingConstraintsGenerator SKILL function in the Virtuoso Unified Custom Constraints SKILL Reference.

- Design Intent

If you have Virtuoso Design Intent enabled, this option will be available in Layout XL and lets you create a design intent using the Constraint Manager. For more information on design intents, refer to the Virtuoso Design Intent User Guide.

Constraint Editors
(schematics and layout)

Drop-down menu that lists available constraint editing functionality: Module Generator..., and the Process Rules Editor.... Selecting any of these options will launch the associated application.

Whatever constraint editor was selected last will be shown as the “default” option to be selected for next use.

The constraint editor options remain active even when the current cellview is in read-only mode.
- Module Generator...

Invokes the layout editor and displays the Modgen Editor.

The Module Generator provides a simple and fast method of generating multiple Pcell instances into a complex, highly matched array based on defined Pcell leaf structures.

For more information, see Editing Modgens in the Virtuoso Module Generator User Guide.

- Process Rule Editor...

Invokes the Process Rule Editor form.

From here you can edit process rules for the technology file, the design, or only for selected objects. Alternatively, you can create new constraint groups or process rules.

For more information, see The Process Rule Editor.

Check Constraints
(Schematics)

When you click Check Constraints from the Constraint Manager assistant of the Schematic window, if the cellview contains constraints the Constraint Status and Template Status check starts automatically based on the current settings in the Constraints tab of the Schematic Rules Check Setup form. Alternatively, you can use the ciCheckConstraints SKILL function to run the constraint checker.

To access the Schematic Rules Check Setup form, select Check – Rules Setup in VSE. For more information, see Constraints Checks in the Virtuoso Schematic Editor User Guide.

Check Constraints
(Layout)

When you click Check Constraints from the Constraint Manager assistant of the Layout window, PVS-CV gets launched to check whether the specified constraints have been implemented correctly in the layout. Alternatively, you can use the ciCheckConstraints SKILL function to run the constraint checker.

After the checks, the status of the constraints gets updated in the Constraint Manager assistant as any one of the following: Passed, Failed, or Not Checked.

In addition, any constraint violation detected during this check by PVS-CV is reported in the Annotation Browser assistant of the Layout window.

PVS-CV is a licensed tool. Therefore, to use the Check Constraints option from the Constraint Manager assistant of the Layout window, the Phys_Ver_Sys_Const_Validator (license number 96300) license must be checked out in addition to the Layout license. Initially, PVS-CV runs on the layout with default settings. However, you can change these settings using the PVS-CV form before running the Constraint Checker.

To open the PVS-CV form, in the Constraint Manager assistant, select Options from the Constraints Check drop-down list.

The PVS-CV Options Form is displayed, as shown below.

The options for running PVS-CV from Constraint Manager is taken from the .cadence/pvs directory. If you are running PVS-CV for the first time, this information is created in the.cadence/pvs directory.

The PVS-CV Options Form contains the Input and Constraint Options panels represented by their icons with appropriate names.

Input

When you open the PVS-CV form, the Input – Layout section is displayed by default. You can set the following fields in the Layout section:

  • Read data
    • Ignore Layout Errors — Select this check box to ignore an input design error (for example, some master cells may be absent). By default, CV detects layout errors and terminates the run.
  • Check selected constraints from Virtuoso Constraint Manager only — Select this option to check only the constraints selected in the Constraint Manager.
  • Net-based mode — When selected, only constraints on specified nets are checked.
    • Nets from list — Net names are typed into the text field.
    • Nets from file — Name of a text file is entered in the text field.

Constraint Options

    • When you click the Constraint Options icon, the Constraint Types Options section is displayed.

The Constraint Options panel consists of three tabs related to different groups of constraint types.

  • The Placement constraints tab displays the list of all supported placement constraints in Virtuoso, such as Alignment, Area Utilization, Boundary area, Distance, Guard Ring, Matched Orientation, Symmetry (Pins), Cluster, Cluster Boundary, Orientation, Symmetry (Inst), Rail, and Cell Boundary.
  • The Routing constraints tab displays the list of all supported routing constraints in Virtuoso, such as Shielding, Diff Pair, Bus, Matched Length, Symmetry (Nets), PR Overrides, Net Class.
  • The Electrical&Custom constraints tab contains set of Electrical constraints and Custom constraints.

The Constraint Options panel is used to set up constraint types that you want to check.

To enable or disable some specific constraint types, just click the appropriate check box against the constraint name.

  • Enable all — If you want to check all or most of constraint types, use this button at the lower-right corner of the form. It makes all constraint types enabled and you can deselect the ones you do not want to check.
  • Disable all — If you want to check only a few of constraint types, use this button at the lower-right corner of the form. It makes all constraints disabled and you can select the ones you want to check.

For more information on running PVS-CV, see the Running PVS CV chapter in the Cadence Physical Verification User Guide.

Also, for detailed description on PVS-CV functionality, see Appendix H- PVS CV Functionality in the Cadence Physical Verification User Guide.

Constraint Comparison Report
(Layout only)

Invokes a web page that compares the constraints set on the schematic and layout views, sorting any differences into various categories.

Each constraint is detailed in the report with each change that has been made to its members, parameters, or attributes being flagged.

For more information, see Comparing Constraints between Schematic and Layout.

For a video demonstration of the process of generating a constraint comparison report, see Comparing Constraints Between Schematic and Layout on Cadence Online Support.

Update Schematic Constraints
(Schematics only)

Performs a constraint status update for the existing schematic constraints against the equivalent constraint status in layout.

For more information, see Updating Constraints and Constraint Status.

Update Selected Layout Constraints From Schematic
(Layout only)

Performs a constraint status update for the existing layout constraints against the equivalent constraint status in schematics.

For more information, see Updating Constraints From Schematic to Layout.

Constraint Propagation
(Schematics and Layout)

Contains options to propagate constraints through the layout hierarchy.

For more information, see Pushing and Pulling Constraints in a Schematic or Layout Hierarchy

Show Selected
(Schematics and Layout)

Toggles on and off the display of the selected constraints in the Constraint Manager assistant.

This feature helps you in identifying only those constraints that are currently selected in the design canvas. This can be especially useful if you have a high number of constraints listed in the Constraint Manager.

Delete
(Schematics and Layout)

Deletes the currently selected constraint (or object group) in the Constraint browser.

Select All
(Schematics and Layout)

Selects all constraints in the Constraint Browser.

Deselect All
(Schematics and Layout)

De-selects all constraints in the Constraint Browser.

Constraint Parameter Editor
(Schematics and Layout)

Toggles on and off the display of the parameter editing pane.

The parameter editing table can also be displayed by double-clicking a constraint in the Constraint Browser.

Customizing Constraint Manager Assistant Content

You can customize the options on display in the Constraint Manager toolbar, and the Constraint Manager assistant itself.

Additional customizations are detailed throughout this document.

To add/remove Constraint Manager user-interface options and feature content:

  1. Right-click over the Constraint Manager toolbar area. This displays a context-sensitive menu that provides options for customizing the interface. For example, the figure below shows the context-sensitive menu displayed in Schematic XL.
  2. Select/deselect the elements that you want to have on display in Constraint Manager assistant.

Saving and Restoring Constraint Manager Customizations

All Constraint Manager user-interface customizations are saved to, and restored from, setting files that are stored in the .cadence/dfII/ci directory.

There are separate settings files for the schematic constraint manager and the layout constraint manager to allow for separate configurations.

All settings found in the Cadence Search Path, as specified in setup.loc, will be loaded in order. This allows for default settings files to be stored under share/cdssetup/dfII/ci and for CAD departments to specify their own customizations.

Module Generator and Process Rule Editor Constraint Manager Options

You can run constraint editing functionality, such as layout cell planning and modgen functionality, by selecting Module Generator..., or Process Rule Editor... from the Constraint Editor menu on the Constraint Manager Toolbar. Alternatively, you can open an external constraint editor by double-clicking a constraint in the Constraint Browser. Use the 'constraintType argument of the ciRegisterConstraintEditor SKILL function to specify the constraint type that can be edited using a particular constraint editor. In addition, you can configure to open an external constraint editor when you double-click a template in the Constraint Browser or click any template parameter in the Constraint Parameter Editor pane. For detailed information, refer to Defining the Interface for Editing a Template and its Parameters.

The constraint editor that was selected last is shown as the “default” option to be selected for next use.

If these buttons are available, they will be displayed as either enabled or disabled (grayed out) as follows:

For more specific information on physical design constraints and their uses in Layout XL, see Constraint Manager in Layout XL. See also Editing Modgens in Virtuoso Module Generator User Guide.

For information on how to plug in other third party constraint editing tools, see Custom Constraint Editors in Virtuoso Unified Custom Constraints Configuration Guide.

For more information on the Process Rule Editor, see The Process Rule Editor

Updating Constraints

The Update Schematic/Layout Constraints options, found on the respective application Constraint Manager toolbars, are used to synchronize the constraints between the two views.The status of the constraints (see Constraint Status) in one view, with respect to the other view, is captured in the status column along with information as to whether or not the constraints are, for example, enforced or violated.

The enablement of the Update Schematic/Layout Constraints options and the content of the icon tooltip is dependent upon the current setting of the updateConstraints environment variable and whether or not any constraints are currently selected. Also, see Update Schematic/Layout Constraints Options Tooltips for related information.

Constraints in the target view will be updated if the corresponding constraints in the source view are more recent. This will only apply when you choose to update all constraints.

Related to this, selecting the Check option on the Constraint Manager toolbar automatically performs status checks based on the current settings in the Constraints tab of the Schematic Rules Check Setup form (for schematics) or on the current settings in the Batch Checker form (for layout).

Only those constraints that exist in both schematics and layout can have their status updated in the schematic Constraint Manager.

When the equivalent layout cellview is open, the schematic Constraint Manager will automatically update the latest layout status whenever you switch between schematic or layout view tabs. The Update Schematic Constraints command ensures that the constraints in the schematic are in sync with the layout, by pulling in all/selected constraints in the layout into the constraint view, and updating the status information displayed in the schematic Constraint Manager.

Although this command will sync any design intent changes if Virtuoso Design Intent is enabled, its primary function is to update constraints. To sync design intent changes, the Sync All Design Intent command should be used instead. For more details, see the Virtuoso Design Intent User Guide.

Figure 1-4 Update Schematic Constraints option on the Constraint Manager toolbar

To update constraints in the schematic Constraint Manager (constraint view) and reflect constraint status in the layout:

  1. With the Constraint Manager assistant on display in a schematic view, launch the layout tool (for example Launch – Layout XL).
  2. If you now open the equivalent layout cellview, the layout Constraint Manager will automatically display inherited schematic constraints on any corresponding components and nets, in addition to any constraints that were entered directly in the layout.
    A blank layout will not show any constraints.
    See Transferring Constraints Between Schematics and Layout which describes how schematic constraints are transferred to layout.
  3. Clicking the Update Schematic Constraints option in the schematic Constraint Manager toolbar brings in the constraints in layout that do not currently exist in the schematic, and syncs up constraints that are different (have different parameters) between schematic and layout. In addition, the status of the constraints in the schematic are also updated.
    Figure 1-5 The Status column in the schematic Constraint Manager
    Currently, only selected constraints will be updated using this process, and not selecting any constraints will serve as an “update all” operation.

Controlling Constraint Updates Using the updateConstraints Environment Variable

The use model of the Update Schematic/Layout Constraints options can be controlled using the updateConstraints environment variable.

Update Schematic/Layout Constraints Options Tooltips

The content of the Update Schematic/Layout Constraints tooltip is dependent upon the current setting of the updateConstraints environment variable and whether any constraints are selected.

The tooltips can therefore be one of the following, for example:

Editing a Constraint in Associated Constraint Generator Dialog Box

To edit a constraint, open the associated Constraint Generator dialog box by a double-clicking one of the following:

For an example, see Editing a Generated Modgen (GenericModgen Template).

Constraint Browser

The Constraint Manager displays design constraints (in creation order), along with their parameters, in the Constraint Browser. You can use the Constraint Manager to browse, add, modify, and delete constraints.

Figure 1-6 The Constraint Browser (schematics)

Each constraint is displayed in its own row, with the browser itself comprising a selection of columns and cells that display properties associated with each constraint. Icons and variable colors and fonts are used to aid parameter visualization. This sections discusses:

Constraint Filters

Filters are used in the Constraint Manager to restrict the constraint types and members displayed to be only those that match certain, filtered, criteria.

For example, you can choose to only display those constraints of type Alignment and/or Correlation. Alternatively, you can choose to display all constraint types, but only show constraint members of a certain type, for example only nets and pins.

Constraint filter options are accessible from the Show pull-down on the Constraint Manager assistant.

Figure 1-7 Constraint Filter options on the Constraint Manager

Figure 1-8 Filters available from the Show pull-down on the Constraint Manager

Alongside any filters that you have created manually (see Creating a Constraint Filter), the Show drop-down also includes a list of (editable) template filters. In addition to providing the ability to filter on particular constraint types, these pre-defined constraint filters let you choose to filter constraints based on their timestamp/history information (for example All Created Today or All Modified Today) or to only view those constraints that are associated with placement or routing (All Placement or All Routing). By default, All constraints (types and members) will be displayed in the Constraint Manager.

Choose the All Selected filter if you are only interested in identifying those constraints that belong to any objects (constraint members) that are currently selected in the design canvas. This can be especially useful if you have a high number of constraints listed in the Constraint Manager.

Applying a Constraint Filter

To apply a constraint filter:

An applied filter will also take account of any constraints contained within Constraint Templates.

When a filter has been applied, the filter icon in the Constraint Browser will show as filled (in orange). Floating your cursor over the Type column header will also display what type of filter is currently applied.

Creating a Constraint Filter

To create a constraint filter:

  1. Select the ... (Customize Constraint Filters) option adjacent to the Show pull-down.
    This will display the Customize Constraint Filters form.
  2. In the Filter Name field, overtype any current filter name and enter the name of the new constraint filter to be created.
    You should only use A-Z, a-z, and 0-9 characters when creating a new filter name.
  3. In the Show section, select/deselect the Constraint Types that are to be shown (included) when the new constraint filter is selected in the Constraint Manager.
    If you did not enter a new filter name by this stage, the Filter Name field will display <custom> once you start to customize the content of the, as yet, unnamed filter. A <custom> filter can be applied (by selecting the Apply button), but it cannot be saved (the Save icon at the top of the form will be inactive).
  4. Optionally, in the Show section, select/deselect the Member Types that are to be shown (included) when the new constraint filter is selected in the Constraint Manager.
  5. Optionally, in the Show section, choose any history attributes that you would like to filter on using the Creation Date, Last Modified Date, and Last Checked Date options.
    For more information on constraint history attributes, see Constraint History.
  6. Optionally, in the Show section, choose to only apply the new constraint filter to the objects currently selected in the design canvas (or in the Constraint Manager) by checking the Selected check box.
    Checking the Selected objects only option with automatically check the Selected check box.
  7. Optionally, in the Show section choose to filter on constraint Hierarchy filter settings.
    Uncheck the Hierarchy check box to hide all constraint sub-directories in the Constraint Manager.
    Check the Hierarchy check box to show constraint sub-directories in the Constraint Manager. The options contained in the Hierarchy filter now allow you to control the display of overridden constraints in different levels of the hierarchy.
    • Choosing to filter on Overridden sub-hierarchy will only show, in the Constraint Manager, those constraint sub-directories that contain overridden constraints.
    • Choosing to filter on Un-overridden sub-hierarchy will only show constraint sub-directories that do not contain overridden constraints.

    For more information see Creating Constraints at Different Design Levels and Overriding Constraints.
  8. Select the Save icon at the top of the form to store the new constraint filter.
    The new constraint filter will now be available for selection from both the Show and Filter Names pull-downs for any cellviews opened.
    Filters are stored in the .cadence/dfII/ci/filters directory as SKILL files (.il). If there are any problems when filters are being re-loaded a warning message will be displayed in the CIW.

Updating a Constraint Filter

To update a constraint filter (user created or template):

  1. Select the ... (Customize Constraint Filters) option to the right of the Show pull-down.
    This will display the Customize Constraint Filters form.
  2. Select the constraint filter to be updated from the Filter Name pull-down.
  3. Optionally, in the Show section, select/deselect the Constraint Types that should now be shown (included) in the updated constraint filter.
  4. Optionally, in the Show section, select/deselect the Member Types that should now be shown (included) in the updated constraint filter.
  5. Optionally, in the Show section, check/uncheck the Selected check box to determine if the filter should only be applied to the objects currently selected in the Constraint Manager.
  6. Select the Save icon at the top of the form to update the currently selected filter.
    You will be prompted to overwrite the currently selected filter.
  7. Select Yes in the Save Filter form to update the filter.
    The updated filter will now be available for selection from both the Show and Filter Names pull-downs.

Deleting a Constraint Filter

To delete a constraint filter (user created or template):

  1. Select the ... (Customize Constraint Filters) option to the right of the Show pull-down to display the Customize Constraint Filters form.
  2. Select the constraint filter to be deleted from the Filter Name pull-down.
  3. Select the adjacent Delete Filter button.
    You will be asked to confirm the deletion of the selected constraint filter.
  4. Select Yes in the Delete Filter form to confirm the deletion of the selected constraint filter.
    The constraint filter will now be deleted from both the Show and Filter Names pull-downs and the (show) All (constraints) filter will automatically be applied.
If you are having difficulties deleting a filter you can remove it directly from .cadence/dfII/ci/filters.

Constraint Browser Features

You can use the Constraint Browser to:

Key Bindings

You can use the following bindkeys when using the Constraint Manager:

Key Binding Action

Delete

Deletes the current selection.

Ctrl + A

Selects all constraints.

Right Arrow

Expands the current constraint to show members.

Left Arrow

Collapses the current constraint to hide members.

Up/Down Arrows

Move up and down the Constraint Manager tree.

Shift/Ctrl + Select

Used for extended selections.

Constraint Browser Context-Menus

Depending on where you right-click in the Constraint Browser, a different context-menu will be displayed.

Constraint Browser Column Header Context-Menu

If you right-click over the Constraint Browser column header area, the following context-menu is displayed:

From here:

From here, you can choose the sort order category that you want to apply to constraint display in the Constraint Browser. For example, you can choose to sort the constraints by Status, which lets you to group together those constraints that currently have a Passed or a Failed status.

From here, you can choose (filter) what constraint information is to be displayed. This could be to filter to only display constraints that have been created during a certain period, or to only display constraints of a certain type.

This works in the same manner as Constraint Filters and choosing Options from this menu will directly display the Customize Constraint Filters option.

Constraint Browser Table Context-Sensitive Menu

If you right-click the Constraint browser table area, the following context-sensitive menu is displayed:

Option Description

Add Member

Adds a constraint member to the selected constraint.

For more information see Adding Constraint Members.

Expand All Below

Expands the directories, templates, or hierarchy based on the way you accessed the context-sensitive menu to select the Expand All Below option.

  • When you right-click a constraint and select the Expand All Below option, the constraint is expanded and its members are visible.
  • When you right-click a template and select the Expand All Below option, the template is expanded along with its constraints.
  • When you right-click a directory and select the Expand All Below option, the entire hierarchy of the directory is expanded, be it a template or a constraint.
  • When you right-click the root directory and select the Expand All Below option, the entire hierarchy is expanded, be it a template, constraint, or a directory.

Collapse All Below

Collapses all the directories available in the Constraint Manager window.

However, if a constraint is currently selected, then choosing this option will collapse the constraint to hide the members of the current constraint.

This option does not apply when used against the selected constraint member.

Select All Members

If a constraint is currently selected, choosing this option will select all the member constraints in the browser (as shown in figure 1-10), in the Navigator, and on the design canvas.

This option does not apply when used against the selected constraint member.

Delete

Deletes one or more selected constraints.

Add Clone

Creates one or more clones in the schematic with the same topology as the selected clone source. For steps, see Adding Clone Def to an Existing Clone Family Template.

Options

Displays the Constraint Manager Options Form (Schematic).

Figure 1-10 Using Select All Members Context-Sensitive Menu

Constraint Manager Options Form (Schematic)

Selecting Options from the Constraint Manager file menu displays the Constraint Manager Options form. The options form displayed in the schematic view is shown below. To view this same form in the layout editor, refer to the steps covered in the Constraint Manager Options Form (Layout) section.

Alternatively, you can select Options from the Constraint Browser Table Context-Sensitive Menu to display the Constraint Manager Options form.

Option Description

Global Constraint View List

For more information on this option, see Changing a Constraint View Name List.

Halos

  • Checking the Enable option switches on the use of halos to highlight constraints in the design canvas.
  • Selecting the Setup option displays the Set Constraint Halo Options form, providing designers with the capability to set particular halo colors, and their style attributes, to one or more chosen constraints (see also Configuring Constraint Halo Display).

You can set a Halo Limit, which is set to a maximum of 32 constraints by default. This is the maximum number of constraints that are haloed.

For more information on the use of halos, see Halo Highlighting.

Advanced Options

You can select the Show Folders check box to see the directories for sub-cell instances as well as the constraints at the current level schematic. These directories will be shown corresponding to all the children of the current cellview, initially with a question mark icon.

Selecting the Show Folders check box activates the Enable Constraint Overrides and Enable Move Constraints to/from Current Cell check boxes.

For more information see Overriding Constraints.

For more information, see Moving Constraints to Current or Sub-Cells.

Figure 1-11 Constraint browser table context-menu with advanced options added

Selection Behavior

By default, the Select constraints after creation check box is selected in the Selection Behavior group box. As a result, after a constraint is created, it appears as selected in the Constraint Browser pane.

When a large number of constraints are created simultaneously, this process of selecting the created constraints automatically can affect performance adversely. To prevent performance issues, you can use the following options:

  • Selection Limit: set to a maximum of 32 constraints by default. If the number of constraints created is greater than this limit, the constraints are not selected automatically after they are created.
  • Cross-selection Limit: set to a maximum of 32 constraints by default. If the number of constraints created is greater than this limit, the constraints are not cross-selected automatically after they are created.
    Setting a large selection and cross-selection limit is not recommended because it can slow down the constraint creation process, especially when the constraints also need to be haloed.

Constraint Manager Options Form (Layout)

Selecting Options from the Constraint Manager Constraint Browser Table Context-Sensitive Menu will display the Constraint Manager Options form.

Option Description

Halos

  • Checking the Enable option switches on the use of halos to highlight constraints in the design canvas.
  • Selecting the Setup option displays the Set Constraint Halo Options form, providing designers with the capability to set particular halo colors, and their style attributes, to one or more chosen constraints (see also Configuring Constraint Halo Display).
For more information on the use of halos see Halo Highlighting.

Advanced Options

You can select the Show Folders check box to see directories for sub-cell instances as well as constraints at current level layout. These directories will be shown corresponding to all children of the current cellview, initially with a question mark icon.

The question mark icon indicates that the hierarchy inside the child has not been checked for the existence for any constraints.

On clicking the plus icon against a directory name, the number of constraints inside that directory will be displayed. In addition, the question mark will be removed against the directory icon in case there are constraints inside the directory.

Selection Behavior

By default, the Select constraints after creation check box is selected in the Selection Behavior group box. As a result, after a constraint is created, it appears as selected in the Constraint Browser pane. When a large number of constraints are created simultaneously, this process of selecting the created constraints automatically can affect performance adversely. To prevent performance issues, you can set a Selection Limit, which is set to a maximum of 32 constraints by default. If the number of constraints created is greater than this limit, the constraints are not selected automatically after they are created.

Setting a large selection limit is not recommended because it can slow down the constraint creation process, especially when the constraints also need to be haloed.

Soft Blocks

In the Constraint Browser of the layout window, directories for soft block instances are displayed right after the current level constraints. You are allowed to create pin and boundary constraints in the soft blocks in the L1 editing mode.

You can create boundary constraints on a soft block by selecting the soft block boundary. This can be done by making the soft block objects selectable in the object palette and using the constraint creation menu.

You can also create pin constraints on soft block pins from the current level. Constraints created on boundaries and pins of soft blocks are stored in the soft block itself and not at the current level. However, once constraints are created, they will be displayed inside directories for soft block instances.

When the soft block instances are editable, you can also modify the constraint parameters for pin and boundary constraints on soft blocks. You can also delete the existing pin and boundary constraints for these soft blocks.

Unlike other directories, the soft block directories will not appear grayed out unless the soft block is in the read-only mode. In addition, if the soft block contains instances then the hierarchy below those instances will be shown but will remain non-editable.

The soft block icons are used to indicate soft block instances in the Constraint Browser, as highlighted in the figure below.

Finished Blocks

Constraints inside directories that represent instances for finished blocks will appear grayed out and remain non-editable. In addition, when a constraint inside a finished block or a soft block is selected, all editors — Module Generator, and Process Rule Editor—will be disabled.

Stop Point Icons

In earlier releases, the directories disappeared from the schematic Constraint Browser below the layout stop points whenever the Layout XL window is opened. Layout stop points are schematic symbols for which a layout master existed, as per the specified layout view list. However, now a logical hierarchy is displayed in the schematic Constraint Browser below stop points. The stop points are indicated visually using the stop point icons. Therefore, whenever you open the VLS XL window, the directory icons in VSE XL will automatically change to the stop points icons. When you close the VLS XL window, the stop-point icons will change back to directory icons.

Constraint Browser Columns

The Constraint Manager has the following sortable, and re-positionable, columns:

Right-clicking over the Constraint Browser column headers displays the Constraint Browser Column Header Context-Menu.

Constraint Types

The Type column in the Constraint Browser displays the constraint type, for example Symmetry, Alignment, and Orientation.

You can alphabetically sort on the constraints by clicking the Type column header.

A constraint type is a formal definition of a design annotation that describes required electrical or physical relations between a set of design objects (constraint members) through a set of pre-defined constraint parameters, such as symmetry and orientation.

The number in parenthesis after each constraint type shows how many members (instances, nets, terminals, pins, and so on) that each constraint has. A directory is also displayed directly below the Type column header. This directory is The Constraint View directory for the current constraint view and provides information on the cell/view name and the number of constraints in the current constraint view.

Each constraint type must be a member of one constraint category. Constraint categories allow you to manage the loading and viewing of constraint types. For example, when retrieving the constraint cache for a design, applications can specify the categories of constraint that they are interested in. Constraints retrieved from the cache can also be filtered according to category.

You can create new categories and also place constraints in additional categories to allow you to view your constraints in a more convenient way. For information on creating categories see Customizing the Circuit Prospector in the Virtuoso Unified Custom Constraints Configuration Guide.

Constraint Parameters

The Parameters column in the Constraint Browser summarizes the important constraint parameter and value settings for each displayed constraint.

A pre-defined constraint parameter describes the required electrical or physical implementation to the constraint-aware tools.

Constraint members will also often have their own parameters and values and these can be summarized when a constraint is expanded to reveal its members (see Constraint Browser Features).

Parameters will, by default, inherit the parent constraint’s value for that parameter. If the parent does not have such a value, the parameter value will be set to the default value for the member type.

Both constraints and their member parameter values can be edited using Constraint Parameter Editor in the lower section of the Constraint Manager.

For information on all the parameters associated with each default constraint type see Appendix A, “Default Constraint Types”.

Member Parameters

Individual constraint members can also have their own parameters. For example, each member of an alignment constraint can have a specific “side”, such that in an alignment of 5, 3 of them have their top side aligned and the remaining 2 have their bottom side aligned. Only those parameters that make sense to be applied to members can be set on members.

Constraint Axis

The Axis column in the Constraint Browser displays information on axis direction, either vertical or horizontal.

A constraint axis is a virtual reference support object used by symmetry, alignment, and distance constraint types to define the direction and location of symmetrical pairs and aligned objects.

Symmetry, Distance and Alignment constraint types should always reference an axis.

Axes then are constraint specific objects that are associated with particular Default Constraint Types (mentioned above). Each axis can be associated with more than one constraint, so that multiple symmetries and multiple alignments to the same axis can exist.

Constraints axes can only be created if an axis is created and stored in the constraint cellview in the front-end.

The following table describes the parameters associated with constraint axes.

Axis Parameter Type Default Value Allowed Values

direction

enumerated list

vertical

vertical | horizontal

axisLocation

boolean

any

any | fixed

coordinate

integer

0.0

-

realizedCoordinate

integer

0.0

-

Symmetry and Alignment constraints do not have their own direction and coordinate parameters, but instead should be associated with an axis.

See also Editing the Constraint Axis Parameter.

Constraint Status

The Check option on Constraint Manager Toolbar can be used to check the enforcement status of constraints in the schematic or layout. Additionally, for example, the status of each layout constraint, with *respect to the schematic, can be updated dynamically, or on demand, using the Update Schematic Constraints command.

* For example, if it exists in the schematic or not, or if its parameters match its schematic counterpart.

A constraint’s current status is indicated using symbols and strikethrough text.

You can click the Status column header to sort based on the constraint status.

The Status column also displays the status of constraint templates. For more information, refer to the Viewing Template Status in Constraint Manager section.

Constraint Status Icon Constraint Name and Definition

New

Informs that the constraint is new in the current view (for example, the schematic view), but does not yet have a corresponding constraint in the other view (for example, the layout view).

Different

Informs that there is a difference between this constraint and the corresponding constraint in the other view.

The related constraint status tooltip describes what the differences are, which could be any or all of the constraint parameters, member parameters, member order, or axis parameters.

The Constraint Comparison Report can be used to examine any differences in more detail. For more information, see Comparing Constraints between Schematic and Layout.

Passed

Informs that the constraint has been met successfully.

Inactive

Informs that the constraint is not currently active. This means that either it has enabled=false or it is out-of-context (that is, the constraint is in the same hierarchy, but as part of a different traversal), or it has been overridden. Again, the related tooltip provides more details.

Failed

Informs that the constraint has not been met (validated).

For example, depending on the constraint, it is possible the parameters do not match, are not aligned, are not symmetrical, and so on.

New and Passed

Informs that the constraint is new in this view, and has also been marked as passed.

New and Failed

Informs that the constraint only exists in the current view and that it has also failed in this view.

(No Icon)

A constraint that is blank, with no icon, represents a constraint that has not yet been checked.

In the layout view, the latest constraint Status information is also displayed in the Constraint Parameter Editor pane of the Constraint Manager assistant, as shown below.

Filtering Constraint Status

You can use Constraint Filters to only show in the Constraint Browser those constraints that have, for example, Passed or Failed status.

Constraint Conflicts

A conflict can be something that causes a constraint to fail its consistency check. For example, an instance cannot be a member of more than one symmetry constraint. If a symmetry constraint with members /I2/MP0 and /I2/MP1 is transferred to layout where the members are mapped to |I2|MP0 and |I2|MP1. Creating a new symmetry constraint in layout with members |I2|MP0 and |I2|MP2 would override the transferred constraint because the |I2|MP0 member causes a conflict.

For more information, see Constraint Transfer in the Virtuoso Layout Suite documentation.

There is no verification check to ensure that a constraint set by a schematic is achievable in layout. Individual applications are responsible for marking constraints as passed incrementally as they are run.

Constraint Notes

In the Constraint Browser, if a page icon is displayed in the Notes column, it indicates that a note has been associated with the corresponding constraint.

Designers can add notes to constraints to provide more details about the purpose of the constraint or to record and special considerations for implementation.

Constraint notes cannot be added to constraint members. However, any existing constraint notes will be transferred to a new constraint when a constraint is moved to the current cell (see Moving a Constraint to the Current Cell) or to a sub-cell (see Moving a Constraint to Sub-Cells). In the case of moving to a sub-cell, all constraints will show the same note.

Figure 1-12 Notes have been added to a number of symmetry constraints

Any notes that have been applied to a constraint can be accessed from the Notes column in the Constraint Manager. You can see the content of a note by moving the mouse cursor over the Note icon to raise a tooltip.

By default, the note’s tooltip displays maximum 30 characters in a line width and 10 lines in height. If a line in the notes contains more than 30 characters, the characters after the 30th one get replaced with an ellipsis symbol in the tooltip. Similarly, if a note has more than 10 lines, the lines after the default 10th line are replaced with an ellipsis symbol in the tooltip.

To control the number of maximum characters in a line width or maximum number of lines that are visible in any constraint note’s tooltip, use the noteTooltipMaxCharWidth and noteTooltipMaxLines environment variables.

For information about editing the tooltip content, see Editing the Note Parameter.

Creating Constraints in the Constraint Manager

Constraints can be created at the current level in the design hierarchy with members specified at different levels as you descend and return through a hierarchy, or by selecting the objects from any level in the Navigator Assistant (for an example of use, see Creating a Shielding Constraint and Setting a Shield Net).

See also Creating New Constraints in the Virtuoso Unified Custom Constraints Configuration Guide.

When creating a constraint at the top level of a design, the name of the cell will be displayed in the Constraint Browser with the constraint view name and the number of constraints shown in separate brackets after it.

Constraint Creation Basics

This section covers nuances that you need to understand before starting to create a constraint.

Constraint Members

Constraint members can be instances, nets, pins, or terminals depending on the type of constraint.

For information on what type of members a particular constraint can have see Default Constraint Types.

A constraint member is specified by a fully qualified path from the root of the hierarchy, for example:

“(amsPLL.vco:schematic) /I18 (amsPLL.vco2phase:schematic) /MN0 (gpdk.nmos:symbol)”

Constraint Creation and Current Object Selection

A particular constraint can only be created if the correct number of a specific object type is currently selected in the design canvas (or in the Navigator assistant). For example, a Matched Length constraint can only be created if two or more nets are currently selected.

If you attempt to create a constraint that only requires (max) one member, but have multiple candidate members currently selected, then the equivalent number of constraints of that type will be created as a result of your current object selection. For example, a Process Rule Override (PRO) constraint requires that a single net, net class, or design be selected to create a single PRO constraint. Therefore, if you have three nets currently selected, for example, this would create three PRO constraints if you then chose to create a constraint of that type.

If you have a range of object types selected, all constraints that can be created from the current object selection set will be shown as available. Those objects that are not required, or allowed, for a particular constraint will then be ignored on the creation of that constraint. For example, if you have two nets and two pins currently selected, the two pins will be ignored when creating a Matched Length constraint. This therefore allows you to do an area select on the canvas, rather than individually selecting the exact object types that you want to be constraint members.

Some constraints require all objects to be of the same type. This can therefore lead to a situation where there are sufficient objects currently selected to allow for the creation of two different constraints. For example, if you have two instances and two nets currently selected and then choose to create a Symmetry constraint. The result will be that a Symmetry constraint will be created for the selected instances and another, separate constraint, for the selected nets. If one of these constraints is not required, it can be deleted (see Deleting Constraints).

To aid constraint creation, those constraints that cannot be created, due to the current object selection set, will be grayed (filtered) out in the Constraint Creation menu on Constraint Manager Toolbar. Those constraints that can be created will be shown as active/selectable.

Constraints are categorized by type, as either Electrical, Placement, Routing, or Rapid Analog Prototype in the Constraint Creation menu.

For example, if you have (only) two nets selected in the design canvas, the types of Routing constraints that you can create on them appear as enabled in the sub-menu and others are disabled, that is, grayed out, as shown below.

The list of available constraints will dynamically update depending upon the currently selected object set.

Steps to Create Constraints in the Constraint Manager

To create a new constraint using the Constraint Manager:

  1. If not already on display, access the Constraint Manager.
    For information on the various methods of accessing the Constraint Manager, see Accessing the Constraint Manager.
    When the Constraint Manager is invoked it will take account of any current object selections in the design canvas and Navigator.
  2. Optionally, descend to the level of the design hierarchy that you want to create the constraint in.
    You can descend the design hierarchy using Edit – Hierarchy – Descend Edit.
    For more information see Creating Constraints at Different Design Levels.
  3. (If not already selected) In the current design session window, or in the Navigator Assistant, select those design objects (instances, nets, pins, or terminals) that you want to include as constraint members in the new constraint.
    You can create constraints that comprise of member objects located at different levels of the hierarchy by using the cell view tabs on display. Ensure that the shift key is selected when you are clicking the objects to be constrained. Again, selection can be made on the canvas or using the Navigator.
    Some constraint types have lower and upper limits to the number of members that they comprise of, and also the type of object members that can be included in a constraint. For example, it might not be possible to mix instances and nets in the same constraint. If an anomaly is identified, a warning message is displayed informing you that you will not be able to create the constraint.
    For information on what object members (and their number) that can be included in a particular constraint see Default Constraint Types.
    For certain constraints the order in which you select member objects can also be important. You can change member order using the Constraint Manager assistant (see Display Constraint Type Members). For more information on what constraints require correct member order selection again, see Default Constraint Types.
  4. Choose the type of constraint that is to be created by selecting it from the Electrical, Placement, Routing, and Rapid Analog Prototype sub-menus available within the Constraint Creation menu on the Constraint Manager toolbar.
    Only those constraints that can be created for the current selected object set will be shown as selectable. Those constraints that cannot currently be created will be grayed (filtered) out. For more information, see Constraint Creation and Current Object Selection.
    Assuming that constraint membership number and type rules are adhered to, the new constraint will be added to the Constraint Browser with a default constraint name applied, for example Constr_69.
    If you are creating a constraint for one or more iterated objects see Creating Constraints for Iterated Objects.
    If The Circuit Prospector Assistant is currently open, and you have search results selected, choosing to create a new constraint will create one or more constraints based on the selected search results in the Circuit Prospector rather than the current selections in the design canvas or the Navigator.

Related topics

Creating Constraints Using the BitSelector

While creating constraints, if you select the full iterated name in the BitSelector, for example MN1<0:2>, then one or more constraints will be created between the individual vector members (that is, MN1<0>, MN1<1>, and MN1<2>). The number of constraints that are created depends on the type of constraint chosen.

For most constraint types a single constraint will be created containing the individual vector names (for example, alignment(MN1<0>, MN1<1>, MN1<2>). For symmetry and distance constraint types, multiple constraints will be created (for example, symmetry(MN1<0>, MN1<2>) and symmetry(MN1<1>).

If you select individual vector members from the BitSelector, one or more constraints of the selected type will be created dependent upon the number of vector members selected and the chosen constraint type.

Creating Constraints for Iterated Objects

If you select one or more iterated instances, nets, pins, or instTerms from the design canvas or the Navigator Assistant, the Constraint Member Selection form is displayed after you select the type of constraint that you want to create. A separate form, using a tree format, is displayed for each selected iterated instance.

The Constraint Member Selection form is also opened when constraints need to be created between multiple selected busses and net bundles.

To create constraints for multiple iterated objects:

  1. From the design canvas, or the Navigator assistant, select the iterated objects that you want to create a constraint between.
  2. Choose the constraint type to be created by either:
    1. Selecting the constraint type from the Constraint Creation menu on the Constraint Manager toolbar, or
    2. Right-clicking over the Constraint Browser and selecting Add Constraint. From here, you can select the constraint type required.

    The Constraint Member Selection form is displayed.
  3. Select the iterated object Name that you want to create a constraint for and click OK.
  4. Step 3 will be repeated until selections have been made for all iterated objects currently selected.
    Once you have made all your selections for each selected iterated object the constraint will be created and displayed in the Constraint Browser.
In Schematic, you can choose the All Selected filter in the Constraint Manager to show constraints on all the members of the iterated instance in the design canvas or the navigator.

Creating Modgen Constraints

Modgen constraints can be created interactively on selected instances in Schematic (or Layout) by doing one of the following:

Creating Generic Modgen Constraints

The GenericModgen constraint generator enables you to create generic modgen constraints on one or more selected devices.

Run this constraint generator from the Rapid Analog Prototype sub-menu in the Constraint Creation menu of the Constraint Manager assistant.

To enable the GenericModgen constraint generator option on the Rapid Analog Prototype sub-menu, ensure you have at least one device selected on the schematic or layout canvas.

On clicking the GenericModgen constraint generator, the GenericModgen form appears with the following tabs: Pattern, Dummies, Guard Ring, and Layer Options (refer to the figure below).

Use this form to specify the device interdigitation pattern, orientation, default orientation, spacings, and abutment. The device interdigitation pattern can contain dummies and there are options for setting up the parameters on those dummies. You also have the options for adding guard rings and setting the modgen merge layer. The sections below explain use of each tab in detail and finally how to generate the generic modgen template.

Setting Patterns, Orientations, Dummies, Spacings, and Abutment

When you access the GenericModgen form, the Pattern tab is displayed by default. The first field, Device mFactors, is uneditable. It displays the mFactor information of the selected device. Use this tab as following to set the device interdigitation pattern, orientations, dummies, spacings, and abutment parameters:

  1. In the Device Mapping field, specify the symbols to be used for creating the device interdigitation pattern. By default, the field shows the device mapping of the currently selected devices. If you edit this field, ensure that the symbol specification starts from A and continues in descending alphabetic order without skipping any alphabet. For example, A:PM6 B:PM3 C:PM1 this is valid; however, A:PM6 C:PM3 D:PM4 is invalid.
  2. Specify the number of modgen rows in the Num Rows field within the Interdigitation Pattern group box. This number controls the pattern and orientation arrangement of the device symbols.
    The Num Rows field is interlinked with the Pattern and Orientation fields. When you change any one of these three fields, it results in corresponding adjustments in the other two field values. The following figure illustrates this:
    You can undo the changes made using the Ctrl+Z shortcut key, which works only in these three fields.
  3. Specify the device interdigitation Pattern. In this field, each device symbol must appear as many times as the mFactor of the corresponding device. The dummies are specified by an asterisk (*) and gaps by a hyphen (-).
    To add dummies on the left, right, top, and/or bottom of a device interdigitation pattern, you can alternatively use the options provided in the Dummies group box. This is an automated way of adding dummies around a pattern. However, if you need to add dummies somewhere in between, you should use the manual mechanism of inserting asterisks in the Pattern field.
    The field supports the use of the modgen pattern editor shorthand notations. For example, A2 or (A)2 is equivalent to A A.
  4. Specify the device Orientation. Each orientation must appear as many times as the mFactor of the corresponding device. The orientation must be one of the following: R0, R90, R180, R270, MX, MY, MYR90, or MXR90.
  5. Select the Default Orientation from the given radio buttons: R0, MX, MY, R180, R90, MXR90, MYR90, or R270. These radio buttons are useful for defining the default orientation of the dummies if any are added using the Dummies group box.
    In the Default Orientation section, the text adjacent to each radio button can be replaced with an icon of your own choice. For more information, refer to the Replacing Text with Icons on the Pattern Tab section.
  6. Select the required check box adjacent to the Select Edge field in the Dummies group box. This specifies the side on which the dummies should be added in the pattern, that is, Left, Right, Top, and Bottom.
  7. Click the required button, Add or Remove, to specify the Operation to be performed to add new or remove existing dummies.
    In the Operation section, the text displayed on each button can be replaced with an icon of your own choice. For more information, refer to the Replacing Text with Icons on the Pattern Tab section.
    If you click the Add button, on the selected edges, dummies (represented by asterisks) get added in the Pattern field and the Orientation field gets updated with an equal number of default orientation notations. For example, in the figure below, if you select MY as the Default Orientation and select Left and Top edges, the Pattern and Orientation fields start showing the added dummies. Also note the change in the Num Rows field when dummies were added on the Top edge.
    When you click Add, at a time, only one row of dummies is added on the specified edge. To add more than one row of dummies, click Add as many times as the number of rows you want. You can also add dummies of different default orientations (refer to the image below). To do this, ensure that you change the selected Default Orientation before clicking Add.
    To remove all dummies on the specified side, select the desired edge and click the Remove button (as shown in the image below).
    While removing the dummies, the Default Orientation selection is not considered as done while adding dummies.
  8. Enter the Device Horizontal Spacing in the Spacing group box.
    The specified horizontal spacing has no effect if the Abut All check box is selected.
  9. Enter the Device Vertical Spacing.
  10. Select the Abut All check box if abutment of devices is needed.

Replacing Text with Icons on the Pattern Tab

On the Pattern tab of the GenericModgen form, you can replace the text with icons for the following:

For this, create a .cadence/icons/16x16 directory in your current working directory and save in it the required icon files with a .png extension. The name of the icon file should be the same as the text displayed on the form. For example, to replace the text of the R0 radio button, save the new icon file with the name R0.png. Similarly, to replace the text of the Add button, name the icon file as Add.png.

If the GenericModgen form is currently open, the changed icons show on the form only after you close the form and reopen it.

Specifying Dummy Net

The Dummies tab has options for specifying the dummy nets. These options are the same as those available in the Modgen Editor.

The following steps explain use of each option available on the Dummies tab:

  1. Select the required Dummy Net from the drop-down list box.
  2. Select the option to determine from where the Dummy Parameters should be obtained. You have the following three options in the drop-down list box: neighbor, default, or specify.
    If you choose specify from the Dummy Parameters drop-down list box, the following three additional fields are displayed to you: Dummy Num Fingers, Dummy Length, and Dummy Width.
  3. Add values of your choice to the additional fields displayed to specify the custom dummy parameters.
    Values previously specified in the additional fields are ignored if you later choose neighbor or default from Dummy Parameters.

Adding a Guard Ring Around Generated Modgen

The Guard Ring tab has options for adding a guard ring around a generated modgen. These options are the same as those available in the Modgen Editor. When you open this tab, you see only the Add Guard Ring check box.

On selecting this check box, the following fields also become visible: Type, Shape, Net, Spacing, and MPP.

The Use Fluid check box in the Fluid Guard Ring group box appears as enabled only if your design supports creation of fluid guard ring devices.

The following steps explain the use of each option available on the Guard Ring tab:

  1. Select the Add Guard Ring check box to add the guard ring.
  2. Select the Type of guard ring. You have two options in the drop-down list box to choose from: ring or pane.
  3. Select the Shape of the guard ring. You have two options in the drop-down list box to choose from: rectangular or rectilinear.
  4. Enter a value in the Spacing field. This value determines the spacing between the modgen devices and the guard ring. This is in addition to the minimum DRC spacing rule.
  5. Select the MPP to use for the guard ring.
  6. If you want to create a fluid guard ring instead of a normal guard ring, select the Use Fluid check box. In this case, the value specified in the MPP drop-down list box becomes inapplicable and therefore, the list box disappears from the form, as shown below.
  7. Select the Device around which the fluid guard ring needs to be created. If no device is specified in the technology file, this list displays the value, undefined.
  8. Specify the Width of the fluid guard ring.
  9. Select the Use Min DRC for Spacing check box if you want to create the fluid guard ring at the minimum DRC from the devices. When you select this check box, value specified in the Spacing field will not be used and therefore, it disappears from the tab.

Specifying Merge Layers for Generated Modgen

The Layer Options tab allows you to specify the Merge layers for the generated modgen by selecting the check box adjacent to the desired layers from the list or by selecting one of the Layers preset, that is, default, well, or none.

You can filter the list of Merge layers by specifying the required criterion in the Layer Filter field. For example, if you specify no (as illustrated in the figure below) in the Layer Filter field, only the layer names that satisfy this filter criterion are listed in the Merge layers list box.

By default, the Merge layers list box in the Layer Options tab lists all available layers in the layout. However, if you select the Use Layer Palette LPPs Only check box in the Layout Editor Options form, it enables the synchronization of layers displayed on the Layer Options tab and the layers listed in the Palette assistant of Layout XL.

To access the Layout Editor Options form, choose the Options – Editor... menu from the Layout XL window.

When you enable layer synchronization and change the filters in the Palette assistant by using the available check boxes (that is, Used, Valid, and Routing), you can ensure layers of only specific category are displayed in the Layer Options tab’s Merge layers list box. This change will be visible when you update the filters in the Palette assistant and then launch the GenericModgen form through the Constraint Manager, as illustrated in the figure below.

Specifying Standard Routing Options for Generated Modgen

The Routing tab can be used to specify the options to control the scope and region of pin to trunk routing for a generated modgen constraint.

The following steps explain the use of each option available on the Routing tab:

  1. Select the Route check box to enable pin to trunk routing for the generated modgen.
  2. The Trim Trunks check box is selected by default. This means that while routing, both the ends of a trunk will be trimmed to the first twig on that trunk. If you uncheck this check box, trunk trimming gets disabled and the length of the trunk will be the same as the width of the modgen.
  3. Select a layer on which a horizontal trunk should be created from the Horizontal Trunk Layer drop-down list.
  4. In the Horizontal Trunk Width field, enter a value that defines the width of the horizontal trunk when it is created.
  5. In the Horizontal Trunk Spacing field, enter the required spacing between horizontal trunks in the same channel.
  6. Select the Twig Layer to be used by the router for creating horizontal and vertical twigs.
  7. Specify a value for the Twig Width for creating horizontal and vertical twigs.
  8. The Twig Width Use Pin Width check box is selected by default. This means that the router will consider the width of the twigs equal to the width of the pin. If you deselect this check box, the router uses the width value specified in the Twig Width field.
  9. The Add Vertical Trunks check box is selected by default. This means that a vertical trunk will be created for a net if a horizontal trunk exists for that net in multiple channels. If you deselect this check box, creation of vertical trunks gets disabled.
  10. Select a layer on which a vertical trunk should be created from the Vertical Trunk Layer drop-down list.
  11. In the Vertical Trunk Width field, enter a value that defines the width of the vertical trunk when it is created.
  12. In the Vertical Trunk Spacing field, enter the required spacing between vertical trunks in the same channel.
  13. Specify the Channel0 Device Spacing. This is the spacing between the last (bottom) trunk in the channel and the devices immediately below it.
  14. Specify the Channel1 Device Spacing. This is the spacing between the first (top) trunk in the channel and the devices immediately above it.
  15. Select the Constraint Group from the drop-down list to specify which routing rules should be used by default. By default, the virtuosoDefaultSetup constraint group is selected.
    The figure below illustrates a routed modgen:
    The figure below shows the different types of device spacings in the routed modgen illustrated above:

Generating a GenericModgen Template

After specifying the required configuration information on all the tabs of the GenericModgen form, click OK. This generates a GenericModgen template in the Constraint Manager assistant that contains a modgen with the specified configuration, as shown in the figure below.

Editing a Generated Modgen (GenericModgen Template)

To edit the generated GenericModgen template, do one of the following:

Viewing or Editing a Generated Modgen (GenericModgen Template)

A generated modgen can be previewed and edited within the Modgen Editor. To do so,

  1. Select the Modgen or GenericModgen template in the Constraint Manager.
  2. Click the Module Generator... button on the Constraint Manager toolbar, as shown below.

In the Modgen Editor, you can modify the values specified for Device Horizontal Spacing and Device Vertical Spacing of the generated modgen, and deselect the Abut All check box. Refer to the figure below to see an illustration of such edits.

The generated modgen should only be modified through the GenericModgen template parameters. If it is edited using the Modgen Editor, the GenericModgen template parameters will be out-of-sync with those edits. Also, those edits will be lost if the GenericModgen template parameters are subsequently changed.

Creating Modgen Template for Resistor Arrays

The Rapid Analog Prototype submenu on the Constraint Creation menu of the Constraint Manager assistant provides the following three constraint generator options: SeriesResistorArray, ParallelResistorArray, and BlockResistorArray. You can use these options to create a modgen template for arrays of resistors.

Note:

To create a modgen template for a particular type of resistor array, click the corresponding option on the submenu. The form for that resistor array type appears. The fields in all three forms are the same. The only difference is in the name of the form, which corresponds to the chosen resistor array constraint generator option. For example, if you chose the SeriesResistorArray constraint generator option to create a resistor array constraint on resistors R7 and R10, the following form is displayed.

In the displayed resistor array constraint generator form, set the parameters of the required resistor array constraint as follows:

  1. Specify the number of Row or Col (column).
    By default, these two fields display values that are calculated automatically based on the segments of the selected resistors taking into consideration the most optimal, rectangular, fully-filled pattern for the generated resistor array. The same consideration drives the recalculation of either the Row or Col field, if one of these two fields is modified. If the recalculated value is not an integer, the value gets rounded off to the closest higher number, which can cause dummies and spaces to be added to the generated resistor array. For example, if the selected resistors R7 and R10 have 4 and 3 segments, respectively, the values displayed by default in the Row and Col fields in the resistor array constraint generator form are 1 and 7, respectively. If you now change the value in the Row field to 2, the Col field is automatically updated to 4. When you generate the modgen template for the selected series resistor array, a dummy resistor array constraint is also added, as shown below.
    The resistor array generators avoid any dummy usage unless the array fails to balance the configuration. Based on the selected topology and rotation, a resistor array can achieve single row/column configuration especially for series/parallel configuration in the BlockResistorArray constraint generator.
    While generating a resistor array template, you can change the value in the Segments field for the selected devices in the Property Editor assistant.
    If you are unable to edit this field, do one of the following:
    • Set the sfactorNames Layout XL environment variable. For example, in the CIW, run the following command:
      envSetVal "layoutXL" "sfactorNames" 'string "s S segments"
    • In the Layout XL Options form (Options - Layout XL), choose Series-connected factor from the drop-down list box in the Schematic Parameter Names group box, as shown below.
  2. To continue with setting the parameters on the resistor array constraint generator form, specify the Horizontal Spacing. This value is used to identify the spacing required between columns of devices in the generated resistor array.
  3. Choose the Horizontal Spacing Layer from the available options, as shown below. This list is populated with the names of the layers available in the layer headers of the corresponding layout cellview. By default, the spacing between devices is according to all the design rules (Drc). By selecting Drc from the Horizontal Spacing Layer list, you can avoid the requirement of setting any spacing constraint.
  4. Specify the Vertical Spacing. This value is used to identify the spacing required between rows of devices in the generated resistor array.
  5. Choose the Vertical Spacing Layer from the available options. This list is the same as the Horizontal Spacing Layer drop-down list box.
  6. Select the Topology for the generated resistor array from the available eight serpentine topologies. Out of these eight, four are row-based and four are column-based. The selection of a topology can help you change the orientation of the resistors in the generated resistor array. The following figures illustrate how topology is translated in a resistor array:
  7. Specify the Place Rotation for the generated resistor array as H (horizontal) and V (vertical). If the figs associated with the pins of the resistor are left and right, the default Place Rotation is H; if the figs are top and bottom, the default Place Rotation is V.
  8. Set Add Routes to Yes if routing needs to be added to the generated resistor array. By default, the No radio button is selected, which implies that adding of routes is disabled.
  9. Specify the Route Width and Route Layer if you choose to add routing to the generated resistor array.
  10. Select the Dummy Net that should be used in the modgen if the modgen contains dummy devices. This list contains the names of all the nets associated with the selected devices.
  11. Click OK to generate the modgen template for the selected resistors.

Creating Constraints at Different Design Levels

In addition to creating constraints at the top level of design (see also Creating Constraints in the Constraint Manager), you can also create constraints further down the design hierarchy.

By default, constraint directories are off. To activate these directories, right click the Constraint Browser, select Options, then ensure that Show Folders is selected in the displayed Constraint Manager Options form.

If you descend down a level in the design hierarchy, (using for example, Edit – Hierarchy – Descend Edit) and open the descended cell in a New Tab, you will notice that the Constraint Manager will clear itself of any constraints that had been created at any level in the hierarchy above the current schematic view. The Constraint Manager will only of course be empty if no constraints have been previously created at the level of the design now on display.

When a configuration is controlling the current design hierarchy (that is, the current schematic has been opened in the context of a CPH (see Configure the Physical Hierarchy) or a HED configuration), and you then descend into a schematic that is on a path outside of that hierarchy, the Constraint Manager will consequently not be able to compute a constraint view because the path is not now part of that managed hierarchy. In such cases, the Constraint Manager will display a message under the toolbar area informing you that you are: “Currently below the design hierarchy controlled by the physical implementation. Open the Configure Physical Hierarchy tool from the layout window to modify the design hierarchy”.
You are unable to generate constraints from within a Pcell cellview.

The Constraint Manager only displays those constraints that have been created in the current cell’s constraint view and below. Constraints are always created in the constraint view for the current cell.

If you descend a further level down into the design hierarchy and create some constraints, these constraint will still be visible in the Constraint Manager if you again return back up a level.

In layout, the Constraint Manager re-routes as you descend the layout hierarchy, in effect considering the newly descended cell as the root cell.

Figure 1-13 Constraints shown created at different levels of the design hierarchy

If we now switch tabs, to the I4 (ampp) view, you will notice that the full_diff_opamp constraint view constraints are now not shown as they were created at the level above I4 (ampp).

As mentioned, the Constraint Manager only shows those constraints created at the current level and below.

Figure 1-14 Constraint created at the current level

When the constraints are transferred to the layout view (see Transferring Constraints Between Schematics and Layout), ALL constraint views for the entire design are transferred to the layout view, not just the top level constraints.

Full hierarchical cross-selection is also possible between the Constraint Manager in layout and its equivalent in the schematic at all levels in the design hierarchy.

Viewing Constraints in the Constraint Manager

You can view all constraints that have been created in the cache, irrespective of whether they were solely created for back-end or front-end use.

For example, a Correlation constraint that has been created in the front-end, for front-end use only, will still be visible in the Constraint Manager in the back-end. Constraints are therefore never hidden, irrespective of whether they can be used in their current context or not.

See also:

Moving Constraints to Current or Sub-Cells

A constraint will be shown multiple times in the Constraint Manager if a particular constraint objects exists at numerous lower levels in the design hierarchy.

A constraint directory for each instantiation of that object will be displayed in the Constraint Manager. That is, a constraint directory will be displayed for each instance that the object is found in the design below the current point.

Figure 1-15 Multiple existences of anand2 exist below this level in the design

You can however choose to change this so that the constraint only exists at the current level in the design hierarchy.

Moving a Constraint to the Current Cell

To be able to move an existing constraint to the current cell on view, you need to have a hierarchical cell with constraints that have already been set in the sub-cell in question.

If you have created a constraint in a sub-cell (that is, a cell this exists lower in a hierarchy), you can move that constraint to exist only in the top cell.

To move a constraint to the current cellview, perform the following steps:

Steps 1-3 are optional depending on whether the Move to Current Cell option has already been added to the Constraint Browser context menu.
  1. Right-click in the Constraint Browser area to display the context-menu.
  2. Select Options to display the Constraint Manager Options form.
  3. Ensure that in the Advanced Options section the Enable Move Constraints to/from Current Cell check box is selected, then click OK in the Constraint Manager Options form.
  4. Ensure that the cellview that you want to move the constraint to is current.
  5. In the Constraint Browser, select the (currently out-of-context) constraint that is to be moved to the current cell.
    The constraint to be moved to the current cell must be a constraint that was created in a (lower) sub-cell in the hierarchy. You must also currently be at the (top) level of the hierarchy at which you want the sub-cell to move to.
  6. Right-click over the Constraint Manager and select Move to Current Cell from the displayed Constraint Browser Context-Menus.
    The status bar displays information on what the Move to Current Cell option does and, where appropriate, the reason why it may not be enabled at a particular time.
    Figure 1-16 Move to Current Cell in the Constraint Manager Context-Menu
    A confirmation message will be displayed asking you to confirm your action. You will be advised that all constraint views will have to be saved following the operation. If only one constraint has been selected, the constraint view to be saved will named.
    Figure 1-17 Confirm Move of Selected Constraint to the Current Cell
  7. Select Yes to confirm that the selected constraint be moved to the current cell only.
    The constraint now only exists in the current cell (see also the Owner constraint attribute value in the Constraint Parameter Editor pane.
    Figure 1-18 Symmetry Constraint Moved to Current Cell
    Figure 1-19 Constraint Owner attribute updates for new location of constraint
    For each selected constraint, a message will be displayed in the CIW detailing the source and destination constraint views.

See also Moving a Constraint to Sub-Cells and Overriding Constraints.

Moving a Constraint to Sub-Cells

You can choose to move a constraint that has been created in the top cell to the sub-cellviews of its existing members.

For example, a constraint created in top cell full_diff_opamp with member instances I3 and I4 will initially, after creation, exist only in the cellview it was created in. That is, full_diff_opamp. However, if you then choose to move that constraint to the member sub-cells, it will no longer exist in full_diff_opamp, rather it was will now exist in multiple locations in instance cellviews I3 and I4. Consequently, it will now be viewable in the Constraint Browsers of these cellviews (I3 and I4) and viewable as out-of-context (that is, the constraint is in the same hierarchy, but as part of a different traversal) in the top cellview (full_diff_opamp).

To move a constraint to sub-cells below the current top cell view:

Steps 1-3 are optional depending on whether the Move to Sub-Cell option has already been added to the Constraint Browser context menu.
  1. Right-click in the Constraint Browser area to display the context-menu.
  2. Select Options to display the Constraint Manager Options form.
  3. Ensure that in Advanced Options the Enable Move Constraints to/from Current Cell check box is selected, then click OK in the Constraint Manager Options form.
  4. Ensure that the cellview containing the constraint that you want to move to sub-cells is current.
  5. Click the constraint in the Constraint Manager that you want to move to its member sub-cells.
  6. Right-click over the Constraint Manager and select Move to Sub-Cell from the displayed Constraint Browser Context-Menus.
    A confirmation message will be displayed asking you to confirm your action. You will be advised that all constraint views will have to be saved following the operation. If only one constraint has been selected, the constraint view to be saved will named.
  7. Select Yes to propagate the constraint everywhere that the current cell is used in the design. The constraint will now become a multiple occurrence constraint, existing at sub-cell levels.
    For each selected constraint, a message will be displayed in the CIW detailing the source and destination constraint views.

See also Moving a Constraint to the Current Cell and Overriding Constraints.

Overriding Constraints

Constraint overrides provide the option of having a constraint set as overridden rather than deleted or modified. Setting a constraint as overridden can allow, for example:

You can therefore use a constraint override to create an override of a lower level constraint in the current cell’s constraint view. Creating the override will create a copy of the constraint at the current level.

The Create Override option can be added to the Constraint Browser context-menu by:

  1. Right-click over the Constraint Browser to display the Constraint Manager context-menu.
  2. Select Options to display the Constraint Manager Options form.
  3. Check the Enable Constraint Overrides check box (this may need to be proceeded by first selecting the Show Folders check box).
  4. Click OK to close the Constraint Manager Options form and have the Create Override option added to the Constraint Browser context-menu.

To create a constraint override:

  1. Select the constraint that you want to override in the Constraint Manager.
  2. Select Create Override from the Constraint Browser Context-Menus (if this option is not available, see above on how to add it).
    A confirmation message will be displayed asking you to confirm your action.
  3. Select Yes to create an override for the current constraint in the current cell’s constraint view.
    The selected constraint will now display with an override icon to the left of it.
Additional override information will be displayed in the tooltip for the constraint that has been overridden.
Remember to save the constraint view to store the new override settings.

Constraint Creation History

The latest constraints to have been created in the current design are listed at the bottom of the Constraint Creation menu.

This list provides you with information on the latest constraint creation history and also a shortcut to creating the same type of constraint again.

Constraint history is saved and restored between sessions.

Separate constraint history lists are shared across schematic Constraint Managers and layout Constraint Managers.

Setting Constraint Creation History Limits

The default constraint history list size is 5. However, this can be changed in the CIW or the .cdsenv file using the constraintMenuHistorySize environment variable. For example:

envSetVal ("constraint" "constraintMenuHistorySize" 'int 10)

Virtuoso Custom Digital Placer and Creating Constraints on Pins/Pin Figures

The Virtuoso Custom Digital Placer and the constraints SKILL functions can be used create constraints on individual pin figures (geometries).

For pins, the naming convention is: <terminalName>:<pinName>

For pin figures, the naming convention is: <terminalName>:<pinName>:<pinFigName>

Both objects will be displayed in the Constraint Manager assistant, or SKILL function output, as ‘pin type objects.

For more information, see Pin Placement Constraints in the Virtuoso Custom Digital Placer User Guide.

Constraint Templates

A constraint template is a managed collection of constraints.

Constraint templates are pre-dominantly used to bring together a set of detailed constraints into a more abstract collection in order to manage them as one. Templates can be used to automatically manage constraints for functional groups of devices, such as analog differential pairs, cascodes, and so on.

The Constraint Manager assistant has built-in example templates, matching (strength) and Common Centroid. The former being used, depending on the strength that you set, to create more/less constraints for a device pair when the strength is set higher or lower respectively. This is performed in order to have the layout match up to a higher or lesser extent accordingly. And, the latter Common Centroid template being used to create a collection of constraints that implement a common centroid for two or four selected devices.

Template Management

Template management is performed using two SKILL callbacks:

  1. Templates are created using a create callback that uses a list of design objects, and an optional set of arguments and parameters, to create and return the set of constraints that will then become the template members.
    The Constraint Manager automatically creates a template and stores this returned set of constraints as template members, in effect a managed collection of constraints.
    The templates also feature template parameters, which are equivalent to constraint parameters. These are defined in the template definition either through static values or SKILL expressions.
    The template parameters are a new capability. Therefore, the create callback creates (collects) the constraints followed by the creation of a “managed” collection.
  2. Templates are managed using a modify callback, where every time a template member constraint is modified (the member or its parameters) the modify callback will be executed to validate the edits.
    For more information on the template callbacks, refer to the Virtuoso Unified Custom Constraints Configuration Guide.
    This is similar to consistency checks that can be set to be performed for constraints.
    The modify callback can:
    • Reject any changes (returns nil) so that the constraint edit is rejected and the constraint then returns to its previous state.
      A modify callback that always returns nil will cause the constraints in a template to be read-only. A modify callback that only allows for the first constraint to be edited, may control the template to follow that of the “leader” constraint’s parameters.
    • Accept any changes (returns t) so that the constraint edit is accepted and the template content is not changed (apart from deleted constraints which will be removed from the list).
    • Accept any changes (returns a list of constraints). Here, the template content is replaced with the new constraint collection being returned.
      The constraints that are now no longer managed by the template, and were not destroyed by the callback, will now become visible in the Constraint Manager.
      The modify callback is called automatically by the constraint system with the template ID and the constraint under edit as parameters. That is, the parameters are passed at the time of the call, not later.

    When the callback is not a defined or callable SKILL procedure, the template content will be read-only. The modify callback of a template can only edit or delete constraints that are members of that template. Modifying another constraint will not re-trigger the callback (that is, the first callback has authority over the template until the callback returns).

Editing a Template

Assuming that a user-defined template has a modify callback, it is possible to:

Defining a Template

New template definitions can be created using the ciTemplateCreateDefinition SKILL function. Using this command, you will define the template type name, the check callback, the create callback, and (optionally) whether or not the template should accept user parameters when created. Optionally, it is also possible to define a collection of template parameter definitions, (equivalent of constraint parameters for constraints).

The template type name is used to look-up the template definition at a later point.

You should ensure that the template is declared and that the two callback functions (check and create), referred to by the definition, are loaded.

It is recommended that you declare any template types, and load the SKILL function definitions, at startup. If a template has not been declared at initialization, a warning message will be displayed stating that the template has yet to be defined and that it should be declared.

The example below shows how to define a template and register it in the Constraint Manager as a constraint generator.

Example

;;
;; (c) Copyright 2012 Cadence Sesign Systems Inc. ALL RIGHT RESERVED ;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; How to define a template, register it in the browser as a
;; constraint generator
;; define two callbacks: one create callback and one modify callback;
;; the create callback is the "macro" or "script" that given an ORDERED
;; set of members and a set of user parameters, creates a set of
;; constraints; the modify callback is called when any edits are
;; attempted on the member constraints of a template: edit, delete,
;; members change, etc. The modify callback receives external
;; parameters that tell which template is modified and which particular
;; constraint, user parameters or template parameters are modified
;; **************************************************************************************
;; NOTE: template parameters, usage, definition and interaction with template callbacks 
;;  are described and demonstrated in a dedicated section to Template Parameters for a matter of clarity.
;; **************************************************************************************
(defun demoPairCreateCallback (cache ;; the constraint cache where the template is created
          listOfDevices ;; the list of design objects (same format as ciConCreate
          @key (params nil) ;; list of template parameters described in dedicated sections
          (userParams nil) ;; any list; not stored or interpreted by Virtuoso
          )
  (let (newCon conList)
    ;; many checks can go in here; we skip them for clarity
    ;; this creates constraints
    newCon = (ciConCreate cache 'matchedParameters ?members listOfDevices)
    (when newCon conList = (cons newCon conList))
    (unless (car userParams) == "low"
     newCon = (ciConCreate cache 'symmetry ?members listOfDevices)
     (when newCon conList = (cons newCon conList))
     ;; two constraints for medium
     )
    (when (car userParams) == "high"
   newCon = (ciConCreate cache 'correlation ?members listOfDevices
    ?params (list (list "coefficient" 0.8 )
           (list "correlatedParameters" "m w"))
    )
   (when newCon conList = (cons newCon conList))
   ;; three constraints for high
   )
    ;; the only acceptable return value is a list of constraint user
    ;; types; these are the constraint members of the template
    conList)
  )
(defun demoPairCheckCallback (template ;; the template being modified (ci user type)
         @key (constraints nil) ;; the constraint being modified (ci user type)
         (params nil) ;; template parameter described and demonstrated in a dedicated section.
         (userParams nil) ) ;; any list; (same intent as create CB)
  t ;; accepts all changes
  )
(defun demoPairCheckCallback (template ;; the template being modified (ci user type)
         @key (constraints nil) ;; the constraints being modified (ci user type)
         (params nil) ;; template parameters described and demonstrated in a dedicated section.
         (userParams nil) ) ;; any list; (same intent as create CB)
  nil ;; rejects all changes, all constraints are read-only when in this template
  ;; any other value is treaded
  ;; as nil and changes are not permitted
  )
;; declare the template definition -- this is called at
;; start-up (CDS init, lib init, PDK)
(ciTemplateCreateDefinition "mypair" ;; the template type "name"
       'demoPairCheckCallback ;; check with callback
       'demoPairCreateCallback ;; create with this callback
       ?params ;; template parameter definition list described and demonstrated in a dedicated section
       ?acceptsUserParams t) ;; if nil, no user parameters passed to callbacks
;; add the constraint generator in the browser make sure you have an
;; icon that exists; this example uses the "add" icon; put your icon
;; in .cadence/dfII/icons
ciRegisterConstraintGenerator(
         list(nil
       'name "My Pair Demo"
       'description "Generate Various Levels of Constraints for a pair"
       'expression "(demoNewPair args insts cache)"
       'addToToolbar t
       'iconName "add"
       'args list(
           list( "strength" `enum "low" "medium" "high")
        )
       )
      )
;; this get called when the UI button gets pressed
(defun demoNewPair (args insts cache )
  ;; call the template creation API
  (ciTemplateCreate cache ;; the cache storage
      "mypair" ;; the template type
      ?members insts ;; template member
      ?params ;; template parameters described and demonstrated in a dedicated section
      ?userParams (list args->strength) ;; user parameters for
      ;; creation, does not
      ;; get stored
      )
  )

Creating a Template Instance

Template instances can be created using the ciTemplateCreate SKILL function. For more information on how to create a template in SKILL, refer to the last two sections of the above Example.

Using this command, you need to define the constraint cache, the template definition name, the template type name, the list of template members, optionally any user-defined parameters for the template, and a collection of template parameters.

Template Parameters

Template parameters are the equivalent of constraint parameters but are applicable to templates, and also have extra features over constraint parameters.

Constraint and Template Parameters

They appear in the Parameter editor panel in the Constraint Manager and are accessible through the parameter property on template objects and are stored in the design along with the constraint template.

Template Parameters v/s Constraint Parameters

Template parameters are defined through a parameter definition using SKILL. These definitions are then passed to ciTemplateCreateDefinition() during the template definition creation process. Template Parameter Definitions can be defined using static values and using SKILL expressions. These expressions provide a dynamic way to define template parameters definition. In contrast to static values, these expressions are evaluated whenever a template is instantiated, making the parameter definition flexible, and dynamic.

Template Parameter Definition

Template parameters all have their own definition object which is specified through a SKILL list that features:

Template Parameter Definition: Format

A template parameter definition is of the following format:

list( <t_parameterName>  <s_dataTypeSymbol> [<g_OptionaldefaultValue>] [<OptionalRangeOfPossibleValuesList>])

Where:

Template Parameter Definition: Usage

Template parameter definition are passed as a list of definitions as an argument ciTemplateCreateDefinition.

Example

In this example, myParamsDefinitionList is the list of template parameter definitions that defines a set of parameters and is then passed to ciTemplateCreateDefinition().

;; strength: enumeration parameter can take values "low" "medium" "high" and its default is "low"
;; doubleNoDefault :  float parameter with no default or range 
;; doubleWDefault : float parameter with default value 3.75 and minimum value only  of 2.5 (open range) 
;; doubleWDefault2 : float parameter with default value 3.75 and minimum value range of 0.1 and maximum 4.2 (full range)
;; intNoDefault  : integer parameter with no default or range 
;; intWDefault : integer parameter with default value 5 and minimum value range of 1 (open range)
;; intWDefault2 :  integer parameter with default value 5 and minimum value range of 1 and maximum 6 (full range)
myParamsDefinitionList = list(list("strength" 'enum "low" list("low" "medium" "high")) 
 list("doubleNoDefault" 'float)                  
 list("doubleWDefault" 'float 3.75 2.5)   
 list("doubleWDefault2" 'float 1.5 0.1 4.2)      
 list("intNoDefault" 'int)      
 list("intWDefault" 'int 5 1)     
 list("intWDefault2" 'int 5 1 6))
myNewTemplateDefinition = ciTemplateCreateDefinition("matchNewCreateCB" ;; template name definition
 '_ciMatchModifyCallback ;; modify callback
 '_ciMatchCreateCallback   ;; create callback 
 ?params myParamsDefinitionList  ;; optional list of template parameter definition
 ?acceptsUserParams t)  ;; optional flag that specifies if user parameter are allowed
For more information about ciTemplateCreateDefinition(), refer to the Virtuoso Unified Custom Constraints SKILL Reference.

Template Parameter Expressions

The default value, g_OptionaldefaultValue and range of possible values, (l_OptionalRangeOfPossibleValuesList) for a parameter definition can dynamically be defined using SKILL expressions.

An expression needs to be enclosed in a double quoted string of the following form: “<Expression>”.

<Expression> can be any SKILL expression.

For more information on SKILL expressions, refer to the SKILL documentation.

An expression is often an evaluation of a function call, that is, “myFunction()” or can be more complex, that is, “6 *factor(2*3 + 5)”.

For more details, see Section Definition of a template parameter expression.

For example,

;; strength enumeration with a default value
;; doubleDef float with a default value expression
;; doubleOpRange float with a default value expression  and a minimum value only (open range)
;; doubleFRange float with a default value expression  and a minimum value and a maximum value (full range)
;; intDef integer with a default value expression
;; intOpRange integer with a default value expression  and a minimum value
;; intFRange  integer with a default value expression  and a minimum value and a maximum value
paramDefinitionList  = list(list("strength" 'enum "(enumDefault 1)" "(getEnumList)")
list("doubleNoDefault" 'float)
 list("doubleDef" 'float "(getDef 'float)")
list("doubleOpRange" 'float "(getDef 'float)" "(getFloatRangeMin)")
 list("doubleFRange" 'float  "(getDef 'float)" "( getFloatRangeMin t)" "(getFloatRangeMax nil)")
 list("intDef" 'int "(getDef 'int)")
 list("intOpRange" 'int "(getDef 'int)" "(getIntRangeMin t)")
 list("intFRange" 'int  "(getDef 'int)" "(getIntRangeMin t)" "(getIntRangeMax nil)")

Template Parameter Instances

Once a template parameter definition is specified, it is possible to instantiate a template parameter instance. As for constraint parameter instances, in the case of template parameters, an instance is a SKILL list composed of:

Template Parameter Instances: Format

The list is of the following format:

list(<templateDefinitionName> <value>)

Template Parameter Instances: Usage

Template parameter instances are mainly used in three different locations:

For more information and a complete code example of the template callbacks and ciCreateTemplateDefinition, refer to ciTemplateCreateDefinition() of the Virtuoso Unified Custom Constraints SKILL Reference.

Example

This example shows in an ordered manner:

;; Specification of a list of template parameter definition, from the previous example.
myParamsDefinitionList = list(list("strength" 'enum "low" list("low" "medium" "high")) 
 list("doubleNoDefault" 'float)                  
 list("doubleWDefault" 'float 3.75 2.5)   
 list("doubleWDefault2" 'float 1.5 0.1 4.2)      
 list("intNoDefault" 'int)      
 list("intWDefault" 'int 5 1)     
 list("intWDefault2" 'int 5 1 6))
myNewTemplateDefinition = ciTemplateCreateDefinition("matchTemplateWithParameters " ;; template name definition
 '_ciMatchModifyCallback    ;; modify callback function from the previous example
 '_ciMatchCreateCallback   ;; create callback function from the previous example 
 ?params myParamsDefinitionList   ;; optional list of template parameter definition
)     
;; Specification of a list of template parameter instances
parameterInstances = list(
 list("strength" "medium") ;; “strength”: definition name “medium” :  value chosen for this instance
 list("doubleNoDefault" 5.6) ;; “doubleNoDefault”: definition name 5.6 :  value chosen for this instance
 list("doubleWDefault" 2.4)  ;; “doubleWDefault”: definition name 2.4 : value chosen for this instance
 list("intWDefault" 2)    ;; “intWDefault”: definition name 2 : value chosen for this instance
 list("intWDefault2" 3)) ;; “intWDefault2”: definition name 3 : value chosen for this instance 
)
insts = '(("M1" inst) ("M2" inst)) ;; a simple list of instances
;; Pre-requisite: have a valid CI cache object  at this point: i.e. cache = ciGetCellView()
;; Call to ciTemplateCreate()
myNewTemplate = ciTemplateCreate (
  cache     ;; Cache storage object 
  "matchTemplateWithParameters"  ;; Template definition name
  ?members insts    ;; instances the template will be created on
  ?params  parameterInstances    ;; list of parameter instances is passed here
  )

For more information on ciTemplateCreate(), refer to the Virtuoso Unified Custom Constraints SKILL Reference.

Creating a Template in Constraint Manager

For information on creating user-defined templates in the Constraint Manager see Creating User-Defined Constraints in the Virtuoso Unified Custom Constraints Configuration Guide.

Make sure that the constraint generator is installed and an icon is associated with the template name type.

Defining the Interface for Editing a Template and its Parameters

A template and its parameters can be edited within one of the following:

By default, you can edit the template parameters in the Constraint Parameter Editor pane of the Constraint Manager assistant. However, to choose a different mode for editing, you can use the following arguments:

Opening the Constraint Generator Dialog Box for Editing

When you set the 'useCGenForEdit argument of the ciRegisterConstraintGenerator function to t, you can open the constraint generator dialog box in the following two scenarios:

By default, this argument is set to t only for the generic module generators (GenericModgen constraints). Therefore, no other generators get affected and it is still possible to edit their parameters within the Constraint Parameter Editor pane.

Opening an External Constraint Editor for Editing

By default, you can open an external constraint editor only when you double-click a constraint in the Constraint Browser. This is managed based on the value specified with the 'constraintType argument of the ciRegisterConstraintEditor SKILL function. To open an external constraint editor when a template is double-clicked in the Constraint Browser or a template parameter is clicked in the Constraint Parameter Editor pane, do the following:

  1. Reset the 'useCGenForEdit argument of the ciRegisterConstraintGenerator function to nil, which is otherwise set to t by default.
  2. With the 'templateTypes argument of the ciRegisterConstraintEditor function, specify a list of template types that can be edited in a particular constraint editor.
  3. Set the 'useForTemplateEdit argument of the ciRegisterConstraintEditor function to t, which is otherwise set to nil by default.

For example, the following definition of the ciRegisterConstraintEditor function ensures that Module Generator opens when templates of types CurrentMirror and SeriesResistorArray are double-clicked:

ciRegisterConstraintEditor(
list(nil 'name "Module Generator..." 
'description "Modgen Editor "
'constraintType "modgen"
'constraintParams nil
'editorAvailableExpression "isCallable('mgCreateOrEdit)"
'startEditorExpression " mgCreateOrEdit(geGetEditCellView() constraint nil) "
'iconName " nexGenEd_dot_dot_dot "
'addToToolbar t
'templateTypes '("CurrentMirror" “SeriesResistorArray”)
'useForTemplateEdit t
)
)
Note:

Viewing Template Status in Constraint Manager

By default, the template status is not checked. It is only when you click the Check menu item on the Constraint Manager Toolbar that each template and its member constraints are evaluated and accordingly, certain icons depicting the identified status are displayed under the Status column, as shown below.

You can click the Status column header to sort based on the constraint status.

During the evaluation, the templates are checked using the associated preconditions set using the ciRegisterConstraintGenerator SKILL function.

The following table lists the different scenarios in which a particular template status is displayed:

Scenario Template Status

The specified precondition failed


The specified precondition passed, but any member constraint(s) failed


The specified precondition passed, but any member constraint(s) became inactive


The specified precondition passed and all member constraints passed too


The specified precondition passed, but any member constraint(s) was not checked


In the Constraint Browser, when you move the pointer on a template status displayed under the Status column, a tooltip is displayed. This tooltip describes the differences related to any or all of the constraint parameters, member parameters, member order, or axis parameters.

To know more about the different template status icons that might be displayed, refer to the table in the Constraint Status section.

Deleting Constraints

To delete a constraint:

  1. Select one or more constraints from the Constraint Browser.
  2. Either:

Saving and Storing Constraints (Schematics Only)

You can save those constraints detailed in the Constraint Manager by selecting the Save Constraints option on Constraint Manager Toolbar (schematics only).

Alternatively, you can use the Save, Save a Copy, and Discard Edits options available in the File menu of the Virtuoso Schematic Editor XL to handle any updates done for a constraint. When you update a constraint, but have not saved it yet, save menu options are labeled as Save (Constraints) and Discard Edits (Constraints). See also Switching On/Off Constraint Menu Options in Schematics XL File Menu.
The Constraint View can be copied, renamed, or deleted using the Library Manager. For more information, see the Cadence Library Manager User Guide.

Front end constraints are stored in a separate view. This constraints view cannot be opened directly, rather it can only be opened through the opening of a schematic or configuration hierarchy.

Back end constraints are stored in the layout cellview. The reasons for storage differentiation between layout and schematics is down to the nature of the front end, for example:

Switching On/Off Constraint Menu Options in Schematics XL File Menu

You can use the comanageConstraintView environment variable to switch on/off the display of the File – Save (Constraint) and Discard Edits (Constraint) menu options in Schematics XL.

Switching off this option can speed up performance because the constraint infrastructure will no longer be queried to find the associated constraint view to update the status of the schematic File menu items for constraints.

Selection and Cross-Selection of Constraints

Whenever one or more constraints are selected in the Constraint Browser, Constraint Parameter Editor will update to present the parameters and parameter values of the selected constraints.

If you select multiple constraints from the Constraint Browser, you can edit multiple constraints’ parameters at the same time. For more information see Editing Constraint Parameters.

Any constraint, or member object, selections that are made in the Constraint Manager will be reflected in the design canvas. In such circumstances, the canvas will auto-pan to the selected constraint or member object, helping to visualize the constraint. The Constraint Manager also interacts directly with the Navigator and the Property Editor. That is, any selections made in the Constraint Browser will be reflected in both of these assistants. In addition, the Constraint Manager reacts to selection/deselection notifications from the Search assistant and the design canvas. Notifications can be sent out using hsmSelect.    

Standard selection utilizes Shift+Select, Ctrl+Select, and deselect all.

Halo Highlighting

If you have halo highlighting on, by ensuring that Halo has been selected from the Constraint Browser Context-Menus, any selections made in the Constraint Manager will cause the constraint members to be haloed/highlighted on the canvas.

Constraint haloing is fully supported for lower-level cell constraints (see also Creating Constraints at Different Design Levels and Cross-Selection of Constraints Between Schematic and Layout Constraint Managers).

Selecting a constraint will cause halos to be drawn around each constraint member on the canvas, with a connecting line being drawn between all objects that belong to the currently selected constraint.

If you have selected multiple constraints in the Constraint Manager, this will result in multiple constraints being haloed in the canvas simultaneously, with each constraint type being haloed in a different color.

You cannot currently plot halos. You can however print the constraint details (see the Custom Constraints Functions chapter in the Virtuoso Unified Custom Constraints SKILL Reference). It is also possible to export canvas details, using the File – Export Image option or using hiExportImage.
When a constraint is selected in the Constraint Manager, use the View – Display Dimming option in VSE to dim all objects in the design canvas to better highlight the location of the selected constraint. For more information, see Display Dimming in the Virtuoso Schematic Editor User Guide.

See also:

Cross-Selection of Constraints Between Schematic and Layout Constraint Managers

Cross-selection of constraints between the schematic Constraint Manager and the layout Constraint Manager is controlled by the crossHalo environment variable, as defined in the constraint partition.

Cross-Selection at Different Design Levels

To better understand cross-selection at different levels of a design, consider the following scenario:

Taking the above scenario into consideration, cross-selection of constraints at different levels of a design works as follows:

Given a schematic Constraint Manager that is displaying the constraints in the hierarchy of a design called “top”, and a lower-level cell is now selected in the schematic Constraint Manager, then the constraints cross-selection should occur only in the physical Constraint Managers that are currently displaying the constraints of those designs that comprise a valid (logicalCV physicalCV) VLS XL pair.

No attempt is made to cross-select constraints in a physical Constraint Manager that might map to the lower level design (that contains the logical constraint) on the SRC side. Similarly, if a constraint is selected in the physical Constraint Manager, cross-selection should only happen in the logical Constraint Manager that is associated with a design that comprises a (logicalCV physicalCV) VLS XL pair with the design with which the physical Constraint Manager is associated. Inside the logical Constraint Manager, only the constraint that has generated the physical constraint should be cross-selected.

Configuring Constraint Halo Display

Constraint visualization functionality, provided in the Set Constraint Halo Options form, offers designers the capability to set particular halo colors, and their style attributes, to one or more chosen constraints.

To access and configure halo display:

  1. Right-click over the Constraint Browser to display the Constraint Browser context-menu.
  2. Select Options to display the Constraint Manager Options form.
  3. Ensure that Enable is checked in the Halos section (it is checked by default).
  4. Click the Setup option to display the Set Constraint Halo Options form.
Alternatively, you can open this form by running the ciSetHaloOptions SKILL function in the CIW.

The Set Constraint Halo Options form comprises of two tabs:

Sequence Halo Styles Tab

The Sequence Halo Styles tab contains a library of (20) default constraint halo visualization Index items that can be edited using the halo Styles options.

The Sequence Halo Styles tab contains the following options:

Select item to set visualization options

Select the constraint halo color item (1 to 20) that you want to edit.

The Index rows list in which order a halo style will be applied. For example, if only 3 constraints are selected, the first 3 style combinations will be used for halos on each member group in the design canvas.

Styles

Use the following display options to control the visualization of the selected constraint Index item.

- Mode

Select the constraint highlight mode (from fadeout, glow, plain, random, and none). By default, fadeout is the highlight mode which displays halos.

Selecting glow will also display the halo effect, while plain mode displays without haloing (plain Mode however supports alpha blending and underlay/overlay modes).

Choosing random will display constraint highlighting in scattered dots.

- Color

Select the color of the constraint halo Index item.

- Level

Select the location of the halo style from either over or under (the default).

- Width

Select the width of the constraint highlight lines.

You can choose from thick, normal, or thin. The default being thin.

- Transparency

Select the transparency setting from a range of 0% - 100%, the default being 40%.

First Members Halo Styles Tab

The First Members Halo Styles tab contains a list of Constraint Types that you can select to apply a particular halo style to.

For some constraint types the first member has a particular role, for example it could be a reference for the other members. It may therefore be valuable to highlight it in a particular manner, for example by using a larger width for its halo style.

The First Members Halo Styles tab contains the following options:

Constraint Types

Lists the constraint types available to be selected and assigned a particular color scheme (by applying the options in the Styles section).

Concerned Types

Lists the constraint types currently selected to have a particular color scheme applied.

Styles

Use the following options to control the visualization of the selected Concerned Types.

- Mode

Select the constraint highlight mode (from fadeout, glow, plain, random, and none). By default, fadeout is the highlight mode which displays halos.

Selecting glow will also display the halo effect, while plain mode displays without haloing (plain Mode however supports alpha blending and underlay/overlay modes).

Choosing random will display constraint highlighting in scattered dots.

- Level

Select the position location of the halo style from either over or under (the default).

- First Member Color
This option is only active for the symmetry constraint.

Select a unique color for the first symmetry constraint member. For a symmetry constraint this would visualize, in the schematic, which member should be placed on the left side of the symmetry axis in the layout.

For symmetry constraints that have two members, all first members will be haloed and grouped together. This provides traversal, rather than linear groupings, for each constraint.

- Width

Select the width of the constraint highlight lines.

You can choose from thick, normal, or thin. The default being thin.

- Second Member Color
This option is only active for the symmetry constraint.

Select a unique color for the second symmetry constraint member. For the symmetry constraint this would visualize, in the schematic, which member should be placed on the right side of the symmetry axis in the layout. For symmetry constraints that have two members, all second members will be haloed and grouped together. This provides traversal, rather than linear groupings, for each constraint.

- Self-Symmetry Color
This option is only active for the symmetry constraint.

Select a color for any self-symmetry constraint members (this will be a unique member of all symmetry constraints with one member only). For those symmetry constraints with only one member currently selected in the Constraint Manager, all members will be haloed and grouped together in the same selected color.

- Transparency

Select the transparency setting from a range of 0% - 100%, the default being 40%.

Halo Index Styles Examples

Saving Constraint Halo Options

If you click the Save button in the Set Constraint Halo Options form this will display the Save Halo Options form.

In the Save Halo Options form, select the path location (your home directory for local use or the .cadence directory for site-wide use) where you want to store the customized halo options and they will be available for use across various sessions.

Constraint halo options are read from the file that is retrieved using the search filter criteria that has been specified in setup.loc. Therefore, there could be site-specific, user-specific or design-specific halo option files.

Adding Constraint Members

You can add and remove constraint members at any time, as well as edit constraint parameters, notes, axes, and so on.

To add a new constraint member to a constraint:

  1. Select in the canvas or from the Navigator assistant the objects that you want to add as members to a constraint.
  2. In the Constraint Manager, right-click the constraint to which you want to add members.
  3. Choose Add Member from the Constraint Browser Table Context-Sensitive Menu.
    The selected constraint’s membership expands to include the selected objects.
    Some constraint types have restrictions on the number of members that they can contain and also on the type of members that can be mixed within a constraint. For example, it might not be possible to mix instances and nets in the same constraint. If an anomaly is identified, a warning message is displayed stating that the constraint cannot be created. For information about members that can be mixed within a constraint, see Default Constraint Types.

Deleting Constraint Members

To delete a constraint member:

  1. Select one or more constraint members (using the Shift or Control keys) from the Constraint Browser.
  2. Either:
You cannot delete a constraint member (or members) if the constraint would be left with less than the minimum required members (objects) for that particular constraint type. For information on deleting the whole constraint see Deleting Constraints.

Interactive Constraint Searching

You can use interactive Search functionality to help locate design components. This can be particularly useful when trying to populate constraints or templates with nets and instances that are located in large, complex designs.

In schematics, the Search assistant searches for constraints throughout the entire design hierarchy, starting at the current edit cellview (rather than the top cellview scheme as followed by the Navigator) and then displays the lower level design constraints. Selecting these constraints causes the Search assistant to send constraint selection notifications to the Constraint Manager (via hierarchical selection management (HSM)), that is hierarchical in nature which the Constraint Manager can successfully handle.

Cross-selection will only work with instances, instance terminals, nets and pins.

For more information on interactive search, see The Search Assistant and Toolbar in the Virtuoso Schematic Editor User Guide.

Constraint Parameter Editor

The lower section of the Constraint Manager has an integrated Constraint Parameter Editor. You can use this editor to add and/or edit parameters and parameter values for one or more constraints, or constraint members, that have been selected in the Constraint Browser as well as view the Constraint History.

The Constraint Parameter Editor pane can be displayed by:

  1. Ensuring that the Constraint Parameter Editor option is selected in the Constraint Manager toolbar.
  2. Double-clicking a constraint in the Constraint Browser.

If you right-click the Constraint Parameter Editor pane, a context-menu is displayed allowing you to view the table information by parameter (View by Parameter) or by constraint (View by Constraint). There are also shortcuts to expand and collapse all table contents, as well as options to scroll back and forward through the listed parameters/constraints.

In the parameter filter drop-down list box, member parameters are displayed only if the member of the selected constraint has such parameters.

Selecting and Displaying Constraints and Constraint Members in the Constraint Parameter Editor

Constraints are edited by initially selecting the constraint/member that you want to edit from the Constraint Browser and then modifying the parameter or parameter values in the Constraint Parameter Editor pane. A number of constraint parameters can be edited simultaneously by making multiple selections in the Constraint Browser.

You must select each constraint member individually in the Constraint Browser for them to be displayed in the Constraint Parameter Editor pane. Selecting one or more constraints does not automatically select the associated constraint members.

Using Shift-select, when constraints are expanded, will select the constraint members. However, when the constraints are collapsed the members will not be selected. Members must therefore be on view for a Shift-select to include them in a selection.

At the top of the Constraint Parameter Editor pane, you will see the following two drop-down menus:

For information on all the parameters associated with each constraint type see Default Constraint Types.

Constraint History

Selecting History (or All) from the Parameter Filter pull-down displays the creation, modification, and check attribute values for the current constraint.

In addition to related Status and Notes parameters, each constraint can have the following specific History parameters (also shown as constraint tooltip information):

In addition to being able to use the default constraint history filters, you can also set your own filters based on constraint history. For more information, see Constraint Filters.

Editing Constraint Parameters

A designer can set or modify a constraint, and the member parameters of constraints in a design, using the Constraint Parameter Editor pane. Constraint parameters apply to the whole constraint or all of its members, while a member parameter only applies to a particular member. Member parameters, when set, will take precedence over constraint parameters.

Multiple selections in the Constraint Browser will cause the attributes to be rolled up and collapsed in the Constraint Parameter Editor pane. To view the Name, Axis, and so on, parameters of all selected constraints you have to click the “+” icon to the left of the individual parameter name. This will expand the selected constraint parameter. You can also right-click over the Constraint Parameter Editor and select Expand All from the Constraint Parameter Editor context-menu to expand the contents of all the collapsed parameters.

Some of the common constraints parameters found in most constraint types are: Name, Axis (Symmetry, Alignment, and Distance constraints only), Enabled, and Notes.

In the layout view, for most constraint types, a Status parameter is also displayed in the Constraint Parameter Editor pane.

Information on how to edit these constraint parameters follow on in this section. All other parameters will follow a similar editing practice.

For information on controlling what parameter names are displayed, see Customizing Constraint Types Using a Configuration File in the Virtuoso Unified Custom Constraints Configuration Guide.

Editing the Constraint Name Parameter

The name of a constraint is automatically generated when the constraint is first created. The default is to create the first constraint in a session as Constr_0, the second constraint as Constr_1, and so on.

The name of a constraint is also displayed when the mouse cursor is moved over the constraint type in the Constraint Browser.

To edit a constraint’s Name parameter:

  1. In the Constraint Browser, select the constraint whose name you want to edit.
  2. Click in the Name parameter value field in the Constraint Parameter Editor pane.
  3. Edit the current text entry.
    A check will be performed to ensure that the new name is unique.

Editing the Constraint Axis Parameter

The Axis parameter is only displayed for Symmetry, Alignment and Distance constraints (see also Constraint Axis).

When, for example, a Symmetry constraint is created using the Constraint Manager, it will have an axis parameter, but the field value in the Axis column will be left empty until you manually enter or select an existing axis name value.

To add or edit an Axis parameter name value:

  1. In the Constraint Manager select the constraint whose axis parameter name value you want to add/edit.
  2. In the Constraint Parameter Editor pane, either:
    1. Click the drop-down list to the right of the Axis parameter and select the name value to be applied to the Axis parameter.
      or
    2. Manually type a new axis name value into the Axis parameter name field (which will allow for a new axis name to be defined for the current constraint).
If you require a number of constraints to share the same axis, ensure that each constraint has the same axis name value selected.

If you do not enter a specific axis name, directly into the Axis parameter name field, an auto-generated axis name will be applied, for example Axis_0. This axis name will now also be made available from the axis parameter name pull-down for any future selections.

Editing Axis Sub-Parameters

To add/edit a constraint’s axis sub-parameter values:

  1. In the Constraint Manager select the constraint whose axis sub-parameter value(s) you want to add/edit.
  2. In the Constraint Parameter Editor pane, select the Axis constraint parameter.
  3. Click the “+” icon to the left of the Axis parameter to display all of the sub-parameters associated with constraints axes: direction, axisLocation, coordinate, and realizedCoordinate.
  4. Edit the sub-parameter values as required using the available pull-downs and edit fields.
    Any sub-parameters that you have changed from their default values will now be displayed in standard, black font (as opposed to italic blue font). For more information, see Constraint Parameter Editor Status Visualization.

After applying the sub-parameter edits, the new axis sub-parameter values are added to the Axis parameter value fields.

The axis parameter edits made, for example axis name and direction, are also displayed in the Axis column of the Constraint Browser.

Editing the Enabled Parameter

Constraints can be enabled or disabled. Enabled constraints are to be considered in the design process while disabled constraints should be ignored.

Constraints can be disabled by setting the associated Enabled parameter to false. When a constraint is disabled, the constraint gets struck-out, in purple text, in the Constraint Browser.

However, if you have changed a constraint’s Enabled parameter to be false, but then edit another of the constraint’s parameters, this automatically switches the Enabled parameter back to true.

The Status section in the constraint tooltip also shows that the current constraint is disabled.

To edit a constraint’s Enabled parameter:

  1. In the Constraint Browser select the constraint whose Enabled parameter you want to edit.
  2. Click in the Enabled parameter value field in the Constraint Parameter Editor pane.
  3. In the value field, select either true or false from the pull-down.
    If you have chosen to disable a constraint, the constraint appears as struck out text in the Constraint Browser.

See also Editing the Status Parameter (Layout Only).

Editing the Status Parameter (Layout Only)

You can set a constraint’s Status parameter to be either passed, failed, or not checked.

An passed parameter means that the constraint has been met, while an failed parameter means that the constraint has not been met (not satisfied). These can either be set by an application, for example a placer or router, or can be user-specified.

To edit a constraint’s Status parameter:

  1. In the Constraint Browser select the constraint whose Status parameter you want to edit.
  2. Click in the Status parameter value field in the Constraint Parameter Editor pane.
  3. In the value field, select either passed, failed, or not checked from the pull-down.
    Depending on the status selection made, the constraint text gets updated in Constraint Browser.

Editing the Note Parameter

Each constraint in the Constraint Manager can have a text note associated with it. Where a note already exists, a note icon is displayed in the Note column of the constraint in the Constraint Manager.

To add or edit a constraint’s Note parameter:

  1. In the Constraint Browser, select the constraint whose Note parameter you want to edit, or add.
  2. Click in the Note parameter value field in the Constraint Parameter Editor pane.
  3. In the Note value field, either:
    1. Add a note or edit an existing note.
      or
    2. Click the ... button to open the Edit Text form.
      From here, you can enter the text note manually or Load an existing text file. Selecting the Load option invokes a browser form where you can locate the text file to be added. Once you have added/edited the text note, click the OK button.
      The new or updated note displays, partially, in the Note field.

    If you have added a new note, a note icon appears in the Note column of the constraint in the Constraint Manager.

Constraint Parameter Editor Status Visualization

The Constraint Parameter Editor provides a variety of visual mechanisms to display the current status of a parameter and its current value.

Default Parameter Values

Reverting to Default Values

For certain parameters you can quickly revert back to the default parameter value.

  1. Click in the value field of the parameter you want to restore the default value for.
  2. If the current value is different from the default value for the parameter a red Revert to default icon is displayed to the right of the parameter value field.
    The tooltip for the icon could be, for example, Revert to default: 0.
  3. Click the Revert to default icon to automatically change the value of the current parameter back to the default value for that parameter.

Read Only Values

Parameter values that are set as read-only are displayed in gray font and cannot be edited.

Differences in Parameter Values Across Selected Objects

If there are differences in parameter values across selected constraint members, the parameter name is highlighted in red font and the parameter values summarized by the string (various).

If there are no differences in parameter values across selected objects with the same parameter, a single value is displayed.

Transferring Constraints Between Schematics and Layout

In the forward dialog (schematic to layout transfer), constraints in the schematic can be transferred or updated in the layout on demand by using the Update Layout Constraints command displayed in the Constraint Manager menu in Layout XL. The constraints in the schematic hierarchy are transferred to the layout only if the layout is flat, that is, the constraint transfer stops at the layout stop points as per the physConfig. In addition, the status of the constraints in layout gets updated dynamically any time when the status of the corresponding constraints change in the schematic. The transfer and update of constraints take into account the elaboration of the components and nets in the layout (for example, m-factored or inherited instances and hierarchy expansion). On constraint transfer, the names of layout constraints bound to schematic constraints are updated to match the schematic constraints’ names. Therefore, when a schematic constraint is transferred to the layout, the following checks are done:

In the backward dialog (layout to schematic transfer), constraints in the layout can be transferred or updated in the schematic on demand. The status of the constraints in schematic are dynamically updated any time when the status of the corresponding constraints change in the layout.

If Virtuoso Design Intent is implemented, to ensure that a constraint view is not created when transferring constraints from Layout XL to Schematics XL using the Update Schematics/Layout Constraints button, all design intents implemented using the constraint manager must have their constraints included in the design intent template (physical constraint). For more information, see the Virtuoso Design Intent User Guide.

The constraint view list fields in the Cadence Hierarchy Editor (HED) and the Configure Physical Hierarchy (CPH) utility allow you to configure constraints for a design hierarchy for the purpose of simulation and physical implementation, respectively.

To generate layout representations of the schematic design components, select the Connectivity – Generate – Selected From Source option.

If any member is transferred from schematic to layout, its associated constraint also get transferred. However, if any member of the constraint is missing, the constraint name appears as struck out in the Constraint Manager assistant in Layout XL, as shown below:

In addition, if any instance is transferred from schematic to layout, its related constraint and nets also get transferred. For more details, see Defining a Constraint List at the Global Level and Constraints in Layout.

For further information, see the following:

For general information on constraint management in Layout XL (and higher tiers) see Constraint Manager in Layout XL.

Using Schematic Constraints in Layout

Enabled constraints can be transferred from schematics to layout in a logical to physical transfer.

Constraints are transformed during the transfer by mapping the schematic members to the corresponding objects in the layout, taking account of m-factor, fingers, and other implementation choices.

A transferred constraint is considered to be out-of-context if any of its members are not present in the layout. If all constraint members are out-of-context, that is, none of the constraint members exist in the layout, the constraint is not shown in the layout Constraint Manager.

Once constraints have been transferred to layout, the layout designer can create additional constraints on the design, enable or disable constraints, or add notes to them. Doing all of this may help resolve or avoid issues where some constraints cannot be met because of conflicting requirements, particularly when using automated software applications.

For more information see Constraint Transfer in the Virtuoso Layout Suite documentation.

Pushing and Pulling Constraints in a Schematic or Layout Hierarchy

You can push and pull constraints and their parameter members on a schematic or layout hierarchy by using the Constraint Propagation options. These are available on the Constraint Manager toolbar in Schematics XL and in VLS XL (and higher tiers) (only).

This functionality relies on connectivity to propagate constraints through nets in the hierarchy, therefore this functionality is available only in VLS XL (and higher tiers).

You can specify whether to push up or pull down these constraints in the hierarchy using the above and below values of the hierarchicalScope parameter. The setting, local is mandatory and set by default. To propagate custom constraints and their member parameters, this parameter needs to be specified as an enumSet type.

You can also tag constraints for propagation automatically, without having to explicitly set the scope parameter by checking the AutoTag option in the propagation dialog box. This is displayed after choosing Push Constraints or Pull Constraints from the Constraint Propagation drop-down list.

The constraint propagation works on selected instances. However, if nothing is selected, constraints propagates to or from all instances at the next level of the hierarchy.

Ensure that the net to be pushed or pulled is connected to the instTerm of the selected instance.

After the appropriate constraints have been specified, choosing Push Constraints or Pull Constraints from the Constraint Propagation drop-down list propagates these constraints as required.

When a constraint is pushed or pulled, the constraint name is preserved if possible. If a constraint with that name already exists, the next available name is generated by keeping the source constraint name as the basename and adding a counter to it. For example, if there is a constraint named myConstraint that needs to be pushed and another constraint with the same name already exists, then a counter can be added to the pushed constraint’s name like myConstraint_1, myConstraint_2, myConstraint_3, and so on depending on availability. If you need to extract the basename from the names of such constraints, you can use the ciConBaseName SKILL function.

The Constraint Propagation drop-down list has the following options:

Following is an example use of pushing and pulling constraints in a soft block:

Option Description

Push Constraints

Specified constraints are copied (pushed) to softblocks and schematic/layout cells lower in the design.

On completion, the copied constraints’ members, such as nets and terminal instances, correspond to the original constraint members because they are physically connected.

For Layout only, see also ciPushConstraints and ciPushConstraint.

Push constraints can also be propagated recursively either to the bottom or the top of the hierarchy from the Constraint Manager. To do this, you need to click from the Constraint Manager assistant toolbar.

You can also tag constraints for propagation automatically without having to explicitly set the scope parameter by checking the AutoTag option in the propagation dialog box.

Pull Constraints

Specified constraints are copied (pulled) from blocks lower in a design up to the top design.

On completion, the copied constraints’ members, such as nets and terminal instances, correspond to the original constraint members because they are physically connected.

For Layout only, see also ciPullConstraints and ciPullConstraint.

Similarly, Pull constraints can be propagated recursively either to the bottom or the top of the hierarchy from the Constraint Manager. To do this, you need to click from the Constraint Manager assistant toolbar.

You can also tag constraints for propagation automatically without having to explicitly set the scope parameter by checking the AutoTag option in the propagation dialog box.

Compare Constraints in Hierarchy

Compares the pushed and pulled constraints with the source constraint.

For Layout only, see also ciHierCompareConstraint and ciHierCompareConstraints.

Update Constraints in Hierarchy

Updates the pushed and pulled constraint as per the changes made in the source constraint and vice versa.

For Layout only, there is an optional update argument in both the ciPushConstraint(s) and ciPullConstraint(s) APIs.

Here, IP inst is an instance, while ipNet refers to a lower level net.

Constraints vs. Rules

Process Constraints

Process constraints are technology specific rules typically stored in a technology file, for example constraints concerning the minimum or maximum allowable width for a given layer.

The design rule driven capability (*DRD) in the Virtuoso Layout Suite provides the necessary interactive assistance in this regard and the automatic applications (placer, router, and optimizer) adhere to these rules.

*When DRD markers exist in a design, they should be read, processed, and then have their Constraint Status updated to ensure that their display setting is current.

Additionally, in some cases, a foundry may provide multiple rule values.

Design Constraints

Design constraints are user-defined rules that are set to meet specific design goals such as performance and reliability, typically specified by the circuit designer.

Examples of design constraints include:

Layout Specific Rules

Layout specific rules are rules that enable a more compact layout and help to build the layout incrementally. For example, grouping or fixing some (placed and routed) components in the design during ECO. These may or may not be driven by Design Constraints.

For more specific information on physical design constraints and their uses in Layout XL, see Constraint Manager in Layout XL.

Process Rules for Objects

By default, the process rules for all objects are derived from the foundry constraint group in the technology database. These rules can however be overridden for specific objects or for a given design.

Process rule overrides on any object apply to other objects following a hierarchical precedence. For example, when applied to nets they will affect all routes and shapes that belong to that net, and when applied to routes they will affect all the shapes on that route. In Virtuoso, applications follow the precedence of: wires (paths/pathSegs/vias/guides) -> routes -> nets -> net classes -> wire edit constraint group -> design, when looking up constraints on objects (defaulting to foundry). The lookup is further guided by the ordering of constraints within any one constraintGroup and the precedence ordering of the constraint groups themselves.

The ciAddProcessRules SKILL function only applies the hard lookup find, that is only to those constraints that are within any single constraintGroup.
You are encouraged to use CST Access SKILL Functions as they will allow for access to process rules directly using SKILL.

Example of Use

To determine Metal1 minWidth on a pathSeg, the route that contains the pathSeg is checked first. If a value is found, the lookup stops, otherwise a value for Metal1 minWidth is searched for on the net that contains the pathSeg. Again, if found, the search stops. Otherwise, it continues up to larger container objects, with the last place searched being the technology database foundry constraint group. Also, while looking for a constraint on the object it is possible that more than one Metal1 minWidth constraint is found. The process rules applied to an object have an order, and during lookup they are traversed in that order. If a group is encountered in the object’s rule list, it is traversed completely before continuing to the next element as shown below:

C = constraint
G = group
Indent = group membership
C1 Metal1 minWidth
C2 Metal1 minWidth
G1 group
C3 Metal1 minWidth
C4 Metal2 minWidth
C5 Metal2 minWidth

Based on the above, the value for Metal1 minwidth is taken from constraint C1 while the value from Metal2 minWidth is taken from constraint C4.

See also The Process Rule Editor.

Using Constraint Notes

The constraint notes functionality is only available in Virtuoso Schematic Editor XL.

Constraint notes can be added to a design canvas to assist design reviews, and enhance communication between front- and back-end engineers, as well as acting as a source of future reference.

In Schematic Editor XL, while working on a writable schematic design, you can generate system-defined and user-defined constraint notes for existing and new constraints, and user-defined constraint notes for a template. This can be done either automatically or manually.

The system-defined constraint notes are created for a restricted list of constraint types that comprise Symmetry, Matched Parameters, Distance, Orientation, Modgen, Cluster, Guard Ring, and Cell Boundary. For more information, refer to the System-Defined Constraint Notes section.

On the contrary, the user-defined constraint notes can be created for all system-defined and user-defined constraint types. For information on how to create your own, customized constraint notes, refer to the User-Defined Constraint Notes for Constraints section.

The capability to generate user-defined constraint notes for a template is useful because a template reflects the design intent that should be recognizable to the designers. Optionally, you can toggle between the constraint note for a template and the constraint notes for the underlying constraints. For more information, refer to the User-Defined Constraint Notes for Templates section.

System-Defined Constraint Notes

The following sections discuss how to use system-defined constraint notes in automatic mode and manage them using the menu options.

Setting Up Automatic Generation of Constraint Notes

Using the automatic generation of constraint notes, you can avoid manual management of the constraint notes. When you use this mode, the constraint notes can be automatically applied to the existing constraints.

To enable automatic generation and update of constraint notes, it is important that the schematic view is opened in edit mode. You can check this from the File – Change Edit Mode menu, clicking which displays the Change Edit Mode form as following:

Then perform the following steps:

  1. Select Options – Editor in VSE XL.
    The Editor Options form is displayed.
  2. In the Constraint Notes Controls group box, select the enable radio button to specify whether the Auto Constraint Notes control should be used. This helps in automatic generation of constraint notes.
    Once constraint notes have been enabled on your design, you can toggle on or off their display in the canvas by selecting View – Show/Hide Notes.
  3. When you enable automatic generation of constraint notes, the inactive radio buttons adjacent to Sync on Design Open become available for selection. By default, disable is selected. If you want to synchronize the constraint notes between schematic and constraint views when you open the design or change the mode of the constraint view, select the enable radio button. Alternatively, set the constraintNotesSyncOnDesignOpen environment variable to t.
  4. The Sync on Design Check control is also disabled by default. Select the enable radio button adjacent to this control if you want the constraint notes to be synchronized on Update Connectivity. Alternatively, set the constraintNotesSyncOnDesignCheck environment variable to t.

Enabling Constraint Note Creation Using autoConstraintNotes

Alternatively, you can enable automatic management of constraint notes by using the autoConstraintNotes environment variable as following:

constraint autoConstraintNotes boolean t

Choosing the enable option in the Editor Options form automatically sets this environment variable to t for new constraints, and enables the creation of notes for the existing constraints. However, if the constraint notes environment variable is set through the CIW, notes will be created only for the new constraints, not the existing ones. If you still want to use the CIW to enable constraint notes, it is recommended that you do this through .cdsinit, or before launching the tool, so that all constraints notes are created when the tool is launched.

Managing Constraint Notes Manually

If you have not set up constraint notes to be created automatically, you can choose to manage them either using the right-mouse-button contextual-menu in the design canvas, or using the Create – Note menu options.

Using the Context Menu to Create, Update, and Remove Constraint Notes

The contextual-menu options displayed will depend upon objects under constraint being currently selected in the design canvas, constraints being selected in the Constraint Manager, or whether no such objects are currently selected. For information about the context menus available in Constraint Manager, refer to Constraint Browser Context-Menus.

For comparable information on the enabled and disabled states of the Add All Constraint Notes For Selected and Remove All Constraint Notes For Selected options, see here.

Using the Create Menu to Create, Remove, or Update Constraint Notes

You can also use the following Note sub-menu options in the Create menu for manually controlling constraint notes.

For information on the enabled and disabled states of the options below, see here. For example, for the Remove... and Update... options to be enabled, a constraint note has to be present for one or more of the selected objects/constraints.

The Note sub-menu options below will be displayed if one or more constrained objects are currently selected in the design canvas.

If one or more constraints are selected in the Constraint Manager, the following Note sub-menu options are displayed:

If there are no current object selections, the Note sub-menu options displayed will be:

If you want to add, remove, or updated all objects in the hierarchy, you need to select one of the following Note sub-menu options:

Examples of Creating Constraint Notes for Different Constraint Types

The following sections detail examples of how to create constraint notes for a range of constraint types. It is assumed that the Auto Constraint Notes option has been enabled in the Editor Options form, although you can also use the manual approach to achieve the same results.

This section details how to create constraint notes for the following constraint types:

Overview Example of Schematic Cellview with Constraint Notes Applied

The following schematic cellview allows you to visualize numerous constraints and their already applied constraint notes.

The schematic cellview contains notes for the following constraints: 1 Cell Boundary, 3 Modgen (each with a Guard Ring applied), 2 Clusters (one of which has a Guard Ring), 1 Matched Parameter, 2 Orientation, and 9 Symmetry.

For all of the above constraint notes, the first character of any reference number will be the first character of the constraint type name. When that first character is in upper-case, it indicates that all members are located in the current cellview. When the first character is in lower-case, this indicates that at least one constraint member is located in a sub-cell. The legends for constraints that have members in multiple instances, are created at the bottom left of the current cellview, while those legends for constraints that only have members in the current cellview will be created in the bottom right corner.
You can select View – Hide Instance Labels, in VSE XL, to aid visualization of constraint notes.

The following figure shows a schematic cellview with many constraint notes applied:

Details on how to apply all of the constraints notes shown in the above schematic cellview will now be covered in the remainder of this section.

For information on how to create your own, customized, constraint notes, see User-Defined Constraint Notes for Constraints.

Creating Constraint Notes for a Symmetry Constraint

Example steps for creating a Symmetry constraint note are as follows:

  1. In VSE XL, open a schematic that comprises of primitive components, for example, transistors, diodes, and passive devices.
  2. Ensure that Auto Constraint Notes is set to enable (Options – Editor).
  3. If not already displayed, open the Constraint Manager assistant (Window – Assistants – Constraint Manager).
  4. In the design canvas, select a pair of devices and create a Symmetry constraint (see Creating Constraints in the Constraint Manager).
    As part of this Symmetry constraint creation, a related graphical note will also be created.
    Figure 1-20 Constraint Note Automatically Added to New Symmetry Constraint

The constraint note will also update if the constraint parameters are edited. For example, in a Symmetry constraint, if the Axis direction or Mirror value is changed.

Figure 1-21 Constraint Note for a Self-Symmetric Instance

A reference number (S0) is also shown for self-symmetrical instance constraints as it can provide information as to whether two self-symmetric instances share the same axis.

Figure 1-22 Constraint Note Updated as Parameters Have Been Edited

Understanding Symmetry Constraint Notes

For symmetry constraint notes, the variants of the pictogram are defined as follows:

Creating Constraint Notes for a Matched Parameters Constraint

Example steps for creating Matched Parameters constraint notes are as follows:

  1. In VSE XL, using an appropriate schematic design, select a pair of devices and create a Matched Parameter constraint.
    A new Matched Parameter constraint note will be created simultaneously.
    Figure 1-23 Constraint Note for a Matched Parameter Constraint

Understanding Matched Parameter Constraint Notes

When all members are aligned in the schematic, a rectangle is drawn around all of the Matched Parameter constraint members. Additionally, a legend note will be added at the bottom of the schematic.

Figure 1-24 Matched Parameter Legend Note

The encircled M1 reference number, located close to the member (see Figure 1-23), makes reference to the corresponding legend at the bottom of the schematic. To avoid clashes in the schematic, with too much information located close to the members, the reference number and legend allows for a clear extension of such information.

Creating Constraint Notes for a Distance Constraint

Example steps for creating a Distance constraint note are as follows:

  1. In VSE XL, using an appropriate schematic design, select a pair of instances and create a Distance constraint.
    On creation, each Distance constraint member will be surrounded by an ellipse, with each ellipse linked with an arc and a text note showing the maximum value.
    When a Note parameter is updated, the constraint note text will be replaced by the contents of the string value entered.
    Figure 1-27 Constraint Note Created for a Distance Constraint

Creating Constraint Notes for an Orientation Constraint

Example steps for creating a Orientation constraint note are as follows:

  1. In VSE XL, using an appropriate schematic design, create Orientation constraints for a complete schematic using the Circuit Prospector assistant (select Window – Assistants – Circuit Prospector if it is not already on display).
  2. In the Circuit Prospector assistant, set the Category to Orientations, and the Finder to Same Device Type (Orientation).
  3. Click the Generate Orientation Constraint per Device Type for the Current Cellview option in the Circuit Prospector toolbar.
    This will set a default Orientation constraint, per device type.
    Figure 1-28 Orientation Constraint and Constraint Notes Created Using the Circuit Prospector Assistant

As Orientation constraints are common for all custom layouts, only a reference number is set close to each instance member. A legend will be created below the current cellview, informing of which orientation values are allowed for the corresponding instances.

Figure 1-29 Constraint Note Legend for Orientation Constraint

Creating Constraint Notes for a Modgen Constraint

Example steps for creating a Modgen constraint note are as follows:

  1. In VSE XL, using an appropriate schematic design, select a number of instances in the current cellview, and also some additional instances in sub-cells.
    This will ensure that you obtain a packed array for devices that require good matching.
  2. Create the Modgen constraint in the Constraint Manager.
    A constraint note will automatically be created, showing all members and how they are interdigitated together.
    Figure 1-30 Constraint Note Created for a Modgen Constraint
If the Modgen has a guard ring, the constraint note will comprise of solid lines.

Creating Constraint Notes for a Cluster Constraint

Cluster constraints can be set against device groups, with the intention of placing them in the same well. Example steps for creating a Cluster constraint note are as follows:

  1. In VSE XL, using an appropriate schematic design, create a Cluster constraint using the Circuit Prospector assistant (select Window – Assistants – Circuit Prospector if it is not already on display).
  2. In the Circuit Prospector assistant, set the Category to Active Devices, and the Finder to Active Same Cell and Common Bulk.
  3. Click the Generate Cluster Constraint for the Current Cellview option in the Circuit Prospector toolbar.
    The Cluster constraint will be created along a constraint note which comprises of a reference number.
    All instances in the same cluster will have the same reference number applied.
    Figure 1-31 Cluster Constraint Notes

Creating Constraint Notes for a Guard Ring Constraint

Guard Ring constraints can be set for Modgen or Cluster constraints.

When a Guard Ring constraint is set, the array note for a Modgen will be made of solid lines, and the net name for the Guard Ring will be noted in the rectangle that surrounds the constraint members.

Alternatively, a reference number for a Cluster will be surrounded by a solid square, and the net name noted in the legend.

Figure 1-32 Guard Ring Constraint Note

Creating Constraint Notes for a Cell Boundary Constraint

You can only set one Cell Boundary constraint per cellview, with the related constraint note being placed in the top left corner of that cellview.

Once you have created the cellview Cell Boundary constraint, either directly in the Constraint Manager or using the right-mouse-button contextual menu alternative, a rectangle will be generated to represent the aspect ratio of the max values for the width and height of the cell, and these max values will be printed on each respective side of the rectangle.

This cell boundary constraint note is placed in the bottom left of the schematic.

Figure 1-33 Cell Boundary Constraint Note

User-Defined Constraint Notes for Constraints

The generation of constraint notes can be customized for any constraint type, either to override an existing procedure for note creation, or to add a procedure to create a note for a new constraint type, including custom constraints, if any.

The user-defined constraint notes can be set up for automatic and manual generation as discussed in the following sections above:

Creating a Customized Constraint Note

A new constraint note can be defined using the following user-defined SKILL function:

ciCreateCustomNote_<const_type>( cellviewId constId cache )

The function takes three arguments. It returns the dbGroupId of the note shapes and the generated text.

Make sure that the name of the dbGroupId is given in the format “NOTE_<constName>”. Also, it must have the following properties:

The following is an example of a note generator procedure for an alignment constraint:

procedure(ciCreateCustomNote_alignment(cv cx cache)
    let(( instName inst bBox orig orig1 noteGroup memberList shape)
        (foreach member (ciConListMembers cx)
            instName = (car member)
            inst = (dbFindAnyInstByName cv instName) || (car (dbFindMemInstByName 
cv instName))
            (foreach shapes  inst~>master~>lpps~>shapes
                when( (car(shapes~>lpp) == '("instance" "drawing"))
                    bBox   = (geTransformUserBBox (car shapes~>bBox) inst~>transform)
                    orig = (list ((xCoord (cadr bBox)) + (xCoord (car bBox)))/2 
((yCoord (cadr bBox)) + (yCoord (car bBox)))/2)
                ) ; when
            ) ;foreach
            memberList = (append1 memberList orig)
        )
        
        noteGroup = (dbCreateGroup cv (strcat "NOTE_" (ciConGetName cx)) (list "set" 
"ordered"))
        (when noteGroup
            (dbCreateProp noteGroup "conCreateTime" 'int cx->created->time)
            (dbCreateProp noteGroup "conType" 'string (symbolToString (ciConGetType 
cx)))
        ) ;when
        ;Create a small rectangle at the center of the first member
        orig1 = (car memberList)
        shape = (schCreateNoteShape cv "rectangle" "dashed" (list (list (xCoord 
orig1)-0.03 (yCoord orig1)-0.03) (list (xCoord orig1)+ 0.03
(yCoord orig1) + 0.03)))
        (dbAddObjectToGroup noteGroup shape)
        ;Create small rectangles at the center of other members and join them to 
the center of the first member
        (foreach orig (cdr memberList)
            shape = (schCreateNoteShape cv "rectangle" "dashed" (list (list (xCoord 
orig)-0.03 (yCoord orig)-0.03) (list (xCoord orig)+ 0.03
(yCoord orig) + 0.03)))
            (dbAddObjectToGroup noteGroup shape)
            shape = (schCreateNoteShape cv "line" "dashed" (list orig1 orig))
            (dbAddObjectToGroup noteGroup shape)
        ) ;foreach
        noteGroup
    ) ; let
)
When you want constraint notes to be generated automatically, except for a particular type of constraint, a custom note generator could be defined to create an empty note.

The following is an example of an empty note generator procedure for a symmetry constraint:

procedure(ciCreateCustomNote_symmetry(cv cx cache)
   let(( noteGroup )
         noteGroup = dbCreateGroup(cv strcat("NOTE_" ciConGetName(cx)) list("set" "ordered"))
         when(noteGroup
            dbCreateProp(noteGroup "conCreateTime" 'int ciConGetCreatedTime(cx))
            dbCreateProp(noteGroup "conType" 'string symbolToString(ciConGetType(cx)))
         ) ;when
      noteGroup
  ) ; let
)

User-Defined Constraint Notes for Templates

To generate user-defined constraint notes for a template, create a SKILL function, ciTemplateCreateCustomNote_<templateType> that has the following syntax:

ciTemplateCreateCustomNote_<templateType>( cellviewId templateId cacheId )

The function takes three arguments. It returns the dbGroupId that consists of all the geometries, such as, the note shapes and the generated text.

Make sure that the name of the dbGroupId is given in the format TemplateNote_<templateName>. Also, it must have the following properties:

The user-defined constraint notes for templates can be set up for automatic and manual generation as discussed in the following sections above:

By default, constraint notes are created for templates and their member constraints. To change this behavior, you can create a SKILL function, ciTemplateNoteControl_<templateType>, for each template type using the following syntax:

ciTemplateNoteControl_<templateType> (cellView templateId cacheId)

Here, the templateId argument allows you to create constraint notes for different templates of same type in different ways.

The SKILL function should return one of the following four values:

‘templateNotesOnly

Notes are created for the specified template only. Any constraint notes present on member constraints are removed.

‘constraintNotesOnly

Notes are created only for member constraints that are eligible for creation of constraint notes. Constraint note is not created on the specified template. Any constraint note present on the template is removed.

‘templateAndConstraintNotes

Notes are created for the specified template and its member constraints that are eligible for creation of constraint notes. This is the default return value.

‘noTemplateOrConstraintNotes

Notes are not created for the specified template or its member constraints. Any constraint notes present on the template or its member constraints are removed.

If the return value of the SKILL function, ciTemplateNoteControl_<templateType>, is ‘templateNotesOnly or ‘noTemplateOrConstraintNotes, constraint notes cannot be created on the member constraints of the specified template. If this SKILL function returns an invalid symbol, a warning is displayed in the CIW when you try to create a constraint note on a template of that particular type and the default value ‘templateAndConstraintNotes will be used.

Example of Creating User-Defined Constraint Notes for a Template

The following is an example of a note generator procedure for a Matching (strength) template type:

procedure(ciTemplateCreateCustomNote_match(cv cx cache)
let(( instName inst bBox orig orig1 noteGroup memberList shape label myBBox minXL minYL maxXL maxYL maxX minX maxY minY tempL)
(foreach member (ciConListMembers (car ciTemplateListCon(cx)))
 instName = (car member)
 inst = (dbFindAnyInstByName cv instName) || (car (dbFindMemInstByName cv instName))
 (foreach shapes inst~>master~>lpps~>shapes
  when( (car(shapes~>lpp) == '("instance" "drawing"))
   bBox = (geTransformUserBBox (car shapes~>bBox) inst~>transform)
   orig = (list ((xCoord (cadr bBox)) + (xCoord (car bBox)))/2 
                           ((yCoord (cadr bBox)) + (yCoord (car bBox)))/2)
   when( bBox
    minXL = cons( xCoord(xCoord(bBox)) minXL )
    maxXL = cons( xCoord(yCoord(bBox)) maxXL )
    minYL = cons( yCoord(xCoord(bBox)) minYL )
    maxYL = cons( yCoord(yCoord(bBox)) maxYL )
   ) ; when
  ); when
 );foreach
 memberList = (append1 memberList orig)
)
tempL = minXL 
minX = car(sort(tempL 'lessp))
tempL = maxXL
maxX = car(sort(tempL 'greaterp))
tempL = minYL
minY = car(sort(tempL 'lessp))
tempL = maxYL
maxY = car(sort(tempL 'greaterp))
;myBBox = list(list(minX-0.1 minY-0.1) list(maxX+0.1 maxY+0.1))
myBBox = list(list(minX-0.1 minY-0.1) list(minX-0.5 minY+((maxY-minY)/2)) list(minX-0.1 maxY-0.1) 
   list(maxX+0.1 maxY+0.1) list(maxX+0.5 minY+((maxY-minY)/2)) list(maxX+0.1 minY+0.1))
noteGroup = (dbCreateGroup cv (strcat "TemplateNote_" (ciTemplateGetName cx)) (list "set" "ordered"))
(when noteGroup
 (dbCreateProp noteGroup "templateCreateTime" 'int (ciTemplateGetCreatedTime cx))
 (dbCreateProp noteGroup "templateType" 'string (ciTemplateGetType cx))
) ;when
shape = (schCreateNoteShape cv "polygon" "solid" myBBox)
;shape = (schCreateNoteShape cv "rectangle" "dashed" myBBox)
(dbAddObjectToGroup noteGroup shape)
label = (schCreateNoteLabel cv list(maxX - 0.05 maxY+0.15) (ciTemplateGetType cx) "centerCenter" "R0" "stick" _constraintNotesGlobals.__FONT_SIZE__ "normalLabel")
(dbAddObjectToGroup noteGroup label)
noteGroup
) ; let
)
procedure(ciTemplateNoteControl_match(cv tplate cache)
let((ret)
ret = 'templateAndConstraintNotes
when(tplate
 case(tplate->name
  ("MatchTemplate1" ret = 'templateNotesOnly)
  ("MatchTemplate2" ret = 'constraintNotesOnly)
  (t ret = 'templateAndConstraintNotes)
 )
)
ret
)
)

Registering Pre- and Post-Create Triggers for Constraint Notes

By default, any modifications made to the position of a constraint note for a constraint or a template do not reflect after the constraint note is updated. If you want to restore the modified position, write the pre-create trigger to store the position and the post-create trigger to restore it.

The following SKILL functions, when written for each constraint type, enable you to register the pre- and post-create triggers:

For example, to create a pre-create trigger for a symmetry constraint note, write a SKILL function as following:

ciCreatePreProcNote_symmetry ( constId dbGroupId )

Similarly, you can write the following SKILL functions for each template type to register the pre- and post-create triggers:

A pre-create procedure is called only if there is an existing constraint note on the specified constraint or template. While a post-create procedure is called only if the constraint note is successfully created.

In addition to providing the store and restore ability, the pre- and post-create triggers allow you to define any processing requirements to be executed before and after updating a constraint note.

Creating Constraint Notes for a Complete Hierarchy

Constraint notes can be created in all schematic views from the top cellview down using the following SKILL function:

ciAddHierarchicalNotes( t_libName t_cellName t_viewName  [ g_hierarchical ] )

For example:

ciAddHierarchicalNotes( “designLib” “topCell” “schematic” t )

For more information, see ciAddHierarchicalNotes.

Working with Constraint Views in a Design-Managed Environment

A design-managed (DM) environment uses Cadence Generic Design Management (GDM) or a third-party design management tool like Synchronicity DesignSync (DSS) for design data version control and management. When you work with constraint views in a DM environment, operations such as save, discard edit, close data, and make read-only are monitored closely to determine check out, check in, and save requirements for version management. The behavior is consistent for these operations across the layout, schematic, and constraint views in a DM environment.

To view prompts that allow you to control the check in and check out of cellviews and constraint views in a DM environment, access the Options menu in the CIW and set Checkout Preferences and Checkin Preferences to always ask me, as shown below.

When these preferences are set in a DM environment and you check out a managed cellview or constraint view, the confirmation form, Auto Checkout, is displayed, as shown below:

The Show Auto Checkout Preferences button in the Auto Checkout form can be used to reset your checkout preferences.

When you open Schematic XL to view a checked out schematic view, you are prompted to check out the associated constraint view, if any, as shown below:

The table below lists different scenarios related to constraint views and their corresponding expected behavior in DM environment:

Scenario

Expected Behavior

1. Purging constraint view using the FileClose Data menu in the CIW

  • Purge the constraint view without making changes to it.

You are prompted to check in the constraint view.

  • Purge a constraint view after saving the changes that you made to it.

When you close and purge the constraint view, you are prompted to check in the selected constraint view, as shown below:

In the Auto Checkin form, you can choose to check in the constraint view (yes), leave it checked out (no), or cancel the checkout operation (cancel checkout).

Use the Show Auto Checkin Preferences button on the Auto Checkin form to reset your check-in preferences.
  • Purge a constraint view without saving the changes that you made to it.

When you exit Schematic XL, you are prompted to save the updated constraint view, as shown below:

If you click Cancel on the Save form and exit Schematic XL, then on purging the constraint view, you are first prompted to save the selected constraint view as shown below:

After the constraint view is saved successfully, you are prompted to check it in.

You are prompted to save and check in the constraint view if you exit Virtuoso without saving a modified constraint view or when you perform a close data operation on it.

2. Closing the schematic cellview

  • Modify the schematic and constraint view, and close Schematic XL after saving the updates.

You are prompted to check in the modified and saved schematic and constraint views.

  • Modify the schematic and constraint view, and close Schematic XL without saving the updates.

You are prompted to choose whether you want to save or discard the modifications made to the schematic and constraint views. Regardless of the choice you make, you are prompted to confirm whether the schematic and constraint views need to be checked in.

When you open or close a schematic view that does not have an associated constraint view in Schematic XL, you are not prompted to check in the constraint view.

3. Making the constraint view read-only

  • Make the constraint view read-only by choosing File Make Read Only in Schematic XL or in the Constraint Manager assistant.

The Save or Discard form, shown below, prompts you to save or discard the changes made to the constraint view before the constraint view becomes read-only.

Choose save or discard, and click OK. You are next prompted to check in the constraint view.

You can switch the constraint view to edit mode by using FileMake Editable in Schematic XL or in the Constraint Manager assistant. As a result, you are prompted to check out the constraint view.

4. Saving the constraint view

  • Save the constraint view by choosing FileSave (Constraint) in Schematic XL or FileSave Constraints (needed) in the Constraint Manager assistant.

The constraint view is saved and you are not prompted to check in the constraint view.

Notice that the checkout and lock status of the constraint view remain unchanged as shown in the Library Manager below:

5. Discarding edits made in the constraint view

  • Discard the edits made in the constraint view by choosing FileDiscard Edits (Constraint) in Schematic XL or FileDiscard Edits in the Constraint Manager assistant.

A form is displayed only to check whether you want to discard the unsaved modifications in the constraint view. You are not prompted to check in the constraint view. The checkout and lock status of the constraint view remain unchanged.

6. Opening schematic view with no associated pre-existing constraint view

  • Open Schematic XL and close the schematic view without creating any constraints.

You are not prompted to check out a constraint view and a constraint directory is not created in the workspace because a constraint view does not exist. Also, in the Library Manager, no constraint view is displayed in the View section for the selected LibraryCell combination.

The Constraint Manager assistant is available for creation of new constraints even when there is no pre-existing constraint view.

If you close the schematic view without creating any constraints, you are not prompted to check in the constraint view because none was created.

Constraint Manager in Layout XL

You can use the Constraint Manager in Virtuoso® Layout XL to add, modify, check or delete constraints in your design.

Examples of constraints include matching parameters, symmetry, orientation, matched orientation, IR drop, parasitic filtering, parasitic estimation, clustering, alignment, area, distance, boundaries, power structure/guard rings (layout only), custom module generators (modgens), cell plans, and analog groups. For a complete list of the constraints supported by Layout XL, see Constraints in Virtuoso Schematic and Layout Editing Environment in the Virtuoso Unified Custom Constraints User Guide.

The Constraint Manager displays a full set of constraints for a design wherever you are in the design hierarchy and wherever the constraints were created in that hierarchy. It displays the constraints in a logical manner, and shows which constraints are currently met and which have been overridden during the course of the physical implementation.

The Constraint Manager user interface comprises two main component parts; the Constraint Manager table at the top, which lets you browse the constraints in your design; and the Constraint Editor underneath it, which lets you change the values of one or more selected constraints.

For more information on the Constraint Manager toolbar, see Constraint Manager Toolbar.

The Constraint Manager has a dedicated Batch Checker in the toolbar, which automatically enables the placement, specialty routing, and process constraints. In addition, the checker verifies and updates the constraint status and leaves them back as is in the 'Verify Design' form.

To run other checks, you should invoke Verify Design and click OK after enabling the required check.

Related Topics

Constraint Manager Assistant

Updating Constraints From Schematic to Layout

Comparing Constraints between Schematic and Layout

Overriding Process Rules

Creating a Cluster Boundary Using the Constraint Manager

Creating and Editing Net Constraints

Updating Constraints From Schematic to Layout

To update constraints in the layout to match those set in the schematic:

For more information, see Constraint Transfer.

Related Topics

Constraint Manager in Layout XL

Comparing Constraints between Schematic and Layout

Overriding Process Rules

Creating a Cluster Boundary Using the Constraint Manager

Creating and Editing Net Constraints

Comparing Constraints between Schematic and Layout

When you click the Constraint Comparison Report ( ) button in the Constraint Manager assistant toolbar of Layout XL, the Constraint Comparison Report opens in the (default) web browser. The report contains a comparison of constraints in the currently open Schematic XL and Layout XL views.

Starting from IC6.1.6 ISR9 and ICADV12.1 ISR11, the Constraint Comparison Report is displayed in the format shown in the figure below:

If you prefer the constraint comparison report format that used to be displayed until IC6.1.6 ISR8 and ICADV12.1 ISR10, set the useOldComparisonReport environment variable to t.

The associated HTML file, css file, and JavaScript code are saved in the current working directory, as shown below:

/ConstraintReports/<libName>/<cellName>/<viewName>/<DATE_AS_YEAR_MONTH_DAY_TIME>/

The Constraint Comparison Report begins with a summary of the session, as shown below. The first column lists the names of cellviews compared. The next column displays the date on which each cellview was last saved and its current status, that is, Modified or Not Modified. The Revision column displays the revision number if the design view is managed by a revision system supported by Generic Design Management (GDM). If the revision number cannot be retrieved, Not Managed is displayed in the last column.

The summary table is followed by another table in which each constraint in the schematic and layout cellviews is compared. In the header row of this table, each cell is clickable. The arrangement of the displayed comparison information changes based on whether you click the column header once or twice. The impact of the different types of clicks on a clickable column header is described in the tables below.

Column Name Action: Click Action: Double-click

Status

Orders the content in the following sequence:

  • Status column is arranged from lowest to highest severity.
  • Constraint Type column is arranged in descending alphabetical order.
  • Name column in arranged in descending alphabetical order.

Reverses the sort order applied by a single click.

Constraint Type

Orders the content in the following sequence:

  • Constraint Type column is arranged in descending alphabetical order.
  • Status column is arranged from lowest to highest severity.
  • Name column in arranged in descending alphabetical order.

Reverses the sort order applied by a single click.

[...] schematic

Orders the content in the following sequence:

  • Schematic constraint names listed in the [...] schematic column are arranged in descending alphabetical order.
  • Status column is arranged from lowest to highest severity.
  • Constraint Type column is arranged in descending alphabetical order.
  • Name column in arranged in descending alphabetical order.

Reverses the sort order applied by a single click.

A cell with black color fill displayed in this column means that the constraint exists in the layout, but not in the schematic. A cell with gray color fill means that the constraint is disabled or out of context.

[...] layout

Orders the content in the following sequence:

  • Layout constraint names listed in the [...] layout column are arranged in descending alphabetical order.
  • Status column is arranged from lowest to highest severity.
  • Constraint Type column is arranged in descending alphabetical order.
  • Name column in arranged in descending alphabetical order.

Reverses the sort order applied by a single click.

A cell with black color fill displayed in this column means that the constraint exists in the schematic, but not in the layout. A cell with gray color fill means that the constraint is disabled or out of context.

Column Name Action: Click

+

The first click expands all constraints to display information about the associated constraint parameters and members. The next click collapses all expanded constraints simultaneously.

When you click the + column header, the label changes to - (minus). In addition, the + button in each row changes to -. You can click these buttons to display or collapse the information related to the constraint compared in that row. If you click the - button corresponding to a constraint, information related to only that constraint is collapsed.

=

The first click expands all constraints that have the same constraint parameters and members to display the corresponding information. The next click collapses such constraints simultaneously.

When you click the = column header, the label changes to - (minus). In addition, the button in each row containing constraints with same constraint parameters and members changes to -. You can click these buttons to display or collapse the information related to the constraint compared in that row. If you click the - button corresponding to a constraint, information related to only that constraint is collapsed.

#

The first click expands all constraints that have different constraint parameters and members to display the corresponding information. The next click collapses such constraints simultaneously.

When you click the # column header, the label changes to - (minus). In addition, the # button in each row containing constraints that have the different constraint parameters and members changes to -. You can click these buttons to display or collapse the information related to the constraint compared in a specific row. If you click the - button corresponding to a constraint, the information related to only that constraint is collapsed.

For a video demonstration of the process of generating a constraint comparison report, see Comparing Constraints Between Schematic and Layout.

Related Topics

Constraint Manager in Layout XL

Updating Constraints From Schematic to Layout

Overriding Process Rules

Creating a Cluster Boundary Using the Constraint Manager

Creating and Editing Net Constraints

Overriding Process Rules

To launch the Process Rule Editor,

Related Topics

Constraint Manager in Layout XL

Updating Constraints From Schematic to Layout

Comparing Constraints between Schematic and Layout

Creating a Cluster Boundary Using the Constraint Manager

Creating and Editing Net Constraints

Creating a Cluster Boundary Using the Constraint Manager

To create a cluster boundary constraint using the Constraint Manager graphical user interface:

  1. In the Constraint Manager assistant, select an existing cluster around which you want to create a cluster boundary.
    You can create a cluster boundary only for an existing cluster.
  2. Choose Cluster Boundary from the constraint creation pull-down.
    A cluster boundary constraint is created with the selected cluster constraint as a member. The cluster boundary is created with a default size. You are not prompted to draw the cluster boundary on the layout canvas.
  3. Specify the size for the cluster boundary by typing the required coordinates into the appropriate fields in the Constraint Manager assistant.

Related Topics

Constraint Manager in Layout XL

Updating Constraints From Schematic to Layout

Comparing Constraints between Schematic and Layout

Overriding Process Rules

Creating and Editing Net Constraints

Creating and Editing Net Constraints

You can use a combination of the navigator assistant and the Constraint Manager assistant to create and edit Net Priority and Net Class constraints on existing nets in your design.

Creating a Net Priority Constraint

A Net Priority constraint is an ordered net constraint which defines the order of priority when routing a net. A higher priority implies that the net is more critical and therefore needs to be routed more optimally (in terms of wire length and any other user-defined constraint on it), even if that makes routing of the lower priority nets less optimal.

Net Priority constraints are honored by the Virtuoso Floorplanner, Virtuoso Analog Placer, and the Virtuoso Space-based Router.

To create a Net Priority constraint,

  1. From the layout window menu bar, choose Windows – Assistants – Constraint Manager.
    The Constraint Manager assistant is displayed.
  2. In the Navigator assistant, select the first net in your ordered net constraint.
  3. In the Constraint Manager assistant, pull down the constraint list and choose Routing – Net Priority.
    The Create Priority dialog is displayed.
  4. Type in the priority for the selected net (for example, 1).
    Zero is not a valid value for the net priority. Enter a non-zero integer between -128 and 128.
  5. Click OK to create the constraint.
    It is added to the list in the Constraint Manager assistant.
  6. Repeat steps 2 thru 5 for each additional net you want to add to the ordered net constraint.
    The nets need not belong to the same logical bus. If you assign the same priority to two nets, both nets are added to a single Net Priority constraint.

For more information on Constraint Manager functionality, see The Constraint Manager Assistant in the Virtuoso Unified Custom Constraints User Guide.

Creating a Net Class Constraint

A Net Class constraint defines a group of nets that have a specific set of common constraints (typically process rule overrides) on or between its members, or with respect to other nets or groups of nets in the design. Net Class constraints are honored by the Virtuoso Floorplanner.

To create a Net Class constraint:

  1. In the Navigator assistant, select the nets you want to group into a Net Class constraint.
  2. From the layout window menu bar, choose Windows – Assistants – Constraint Manager.
    The Constraint Manager assistant is displayed.
  3. In the Constraint Manager assistant, pull down the constraint list and choose Routing – Net Class.
    The Net Class constraint is created with the members you selected, and the constraint is added to the list in the Constraint Manager assistant.

For more information on Constraint Manager functionality, see The Constraint Manager Assistant in the Virtuoso Unified Custom Constraints User Guide.

Making Net Connections

There are two main ways to create interconnect in Layout XL.


Return to top
 ⠀
X