Product Documentation
Virtuoso Studio Design Environment Adoption Guide
Product Version IC23.1, September 2023

5


Changes to Environment Objects and Shapes

Differences Between CDB and Virtuoso Studio Design EVirtuoso Studio design environmentnvironment Objects

Virtuoso Studio design environment Objects

Interconnect Objects

Rows

Sites

Blockages

Boundaries

Clusters

Track Patterns

Markers

Steiner

Layer Headers

CDB and Preview Conventions for Identifying Objects

Controlling Display and Selection of Objects

Required Technology File Layers and Purposes for OpenAccess Objects

Unplaced Instances

Shapes

Paths with Extensions

Objects with Points

Zero-Area Rectangles

Text Display Visibility

Bounding box for Net Expression Text Display Incorrect in OpenAccess

Arcs

Converting Start and Stop Angles for an Arc

Selection of an Arcs

Querying an Arc for Its Bounding Box

Querying an Arc for Its Start and Stop Angles

Bounding Boxes of Labels and Text Displays

Differences Between CDB and Virtuoso Studio Design EVirtuoso Studio design environmentnvironment Objects

In DFII on CDB applications, layer-purpose pairs (LPPs) are used to represent the purpose of a shape. For example, a rectangle with the conventions of the LPP, metal1 boundary is used to define the shape for the specific purpose of a boundary. When a shape using conventions originates from CDB and is translated into a Virtuoso Studio design environment application, these conventions of shapes on specific LPPs do not apply.

When translating data from CDB to the Virtuoso Studio design environment, shapes such as boundaries and blockages are converted to objects. The selection, display, and editing is object based. These objects have attributes and can be created and edited through a GUI or through SKILL. Although these objects do not use LPPs to represent their purpose, they are assigned to an LPP to allow display.

Objects in place and route tools such as SoC Encounter, such as a rows and track patterns are supported in the Virtuoso environment. They are assigned LPPs for display, and depending on the application, creating and editing is allowed.

Below is a list of objects supported in the Virtuoso Studio design environment.

Interconnect Objects

Rows

Sites

Blockages

Boundaries

Clusters

Track Patterns

For a full listing of each class in the OpenAccess API, go to the URL http://openeda.si2.org.

For a description of CDB conventions for these objects, see CDB and Preview Conventions for Identifying Objects.

Virtuoso Studio design environment Objects

Throughout the documentation concerning there are references to objects according to how they are used in an application or flow. Below are the list of terms used through out the Cadence Help documentation and their descriptions.

Term Used Definition

DFII CDB shape based data

Shapes which use conventions, for example a rectangle on metal1 boundary to define its purpose as a boundary.

Standard OpenAccess objects,

Native OpenAccess data

Objects such as a row, boundary, blockage, etc., that do not use conventions to define their purpose.

Place and route objects

Objects that originate from a place and route tool which do not use conventions to define their purpose.

Interconnect Objects

Path

A single layer object. Paths can be created using the Create - Path command or can be optionally selected as an element to be used when creating wires. Paths support anyAngle mode. When used to do non-orthogonal routing, paths can lead to off-grid vertices being created, depending on the width and angle being used.

Wire

A contiguous string of paths, segments (pathSegs), and vias used to connect same net instance terminals and pins of the cellview. Wires are not directly associated with a database object.

For information about creating wires, see Creating Wires in the Virtuoso Interactive and Assisted Routing User Guide.

pathSegs

A specialized shape-based object represented by a specified width, a layer-purpose pair, and a two-point routing segment with a style associated with each of the points. Pathsegs can be orthogonal or diagonal and can be used to create on-grid 45 degree wires. Custom end styles containing octagonal edges are used in diagonal pathSegs to pull all vertices on grid.

For information about accessing pathSeg attributes, see pathSeg Attributes in the Virtuoso Design Environment SKILL Reference.

Segment of Path

Section of an individual path object.

Route

A route is associated with the OpenAccess object oaRoute. Routes are containers that can hold the objects pathSeg, vias, and guides.

Guide

A guide specifies a connection between two objects that are intended to be wired together. Routing nets usually replaces guides with wires, or routes. Currently, guides are only supported at the API level.

Via

In CDB, a contact is implemented as a pre-defined Pcell, which is a special instance. Virtuoso Studio design environment applications will not recognize a via placed as a instance. In the Virtuoso environment, vias are first class objects. Vias and instances (specifically contacts placed as instances) are considered two different types of objects in OpenAccess. Vias correspond to the OpenAccess oaVia class and instances correspond to the oaInst class. The CDB menu item Create – Contact is replaced with Create – Via in the Virtuoso environment.

Existing user code that refers to, or searches for vias as instances must be changed to search for vias as first class objects.

All CDB contacts defined in technology file are translated into via definitions. Via definitions (viaDefs) define via cellviews in a technology database. There are two types of via definitions; customViaDefs and standardViaDefs.

For information about how vias are mapped, see Mapping of CDB Devices.

If your CDB design contains vias with master cellviews defined in the design library rather than the technology library, you must list the vias in a mapping file and refer to the mapping file when migrating the library from CDB to OpenAccess.

Standard Via

The standard via references a standard via definition which is implemented by the oaStdViaDef object. The standardViaDefs has an unique name and is associated with two layers and a list of via parameters with default values. It is an object that is predefined by the database.

Custom Via

A custom via is an instance of a custom via definition which is implemented by the oaCustomViaDef object. A custom via has an unique name and is associated with a via master. The via master may be parameterized and its parameters are specified through the use of an oaParamArray object.

For information, see Via Attributes in the Virtuoso Design Environment SKILL Reference and Via Object C Functions in the Cadence Integrator’s Toolkit Database Reference.

Rows

A row represents a location for the placement of standard cells, macros, or device and is a repetition of the site element in a given direction (horizontal or vertical). Each row is associated with a siteDef. All sites in one row must be the same size. The display of row objects can be turned on or off and the snapping of instances to row can be controlled. Rows are drawn using the display attributes for LPP row boundary.

Rows define a pattern of a sites and are generated by the ROW statement in a DEF file. Rows are drawn as a rectangle with a diagonal line in the same corner as the origin which shows the row orientation.

Two types of rows exist; horizontal and vertical rows. Horizontal rows are of the orientation R0. Vertical rows are of the orientation R90.

There are four possible site orientations, R0, MX, 180, and MY for horizontal and vertical rows. It is the orientation of the row with the site which defines the type of row.

Table 5-1 Horizontal Rows

Row Orientation Site Orientation

R0

R0

R0

MX

R0

R180

R0

MY

Table 5-2 Vertical Rows

Row Orientation Site Orientation

R90

R180

R90

R0

R90

MY

R90

MX

Creating Rows Using SKILL

Rows can be created using DEF In and though SKILL. The following example creates a horizontal row, with the site orientation of MX, at the origin point of 0:0, with 50 sites using SKILL.

cv = geGetEditCellView()
tf = techGetTechFile(cv)
site1 = techCreateScalarSiteDef(tf "site1" "core" 5 5)
dbCreateRow(cv site1 "row1" list(0 0) 50 "MX" "R0")

For more information, see Row Attributes and Row Functions in the Virtuoso Design Environment SKILL Reference and Row Headers and Rows in the Cadence Integrator’s Toolkit Database Reference.

Sites

Site definitions (siteDefs) are technology objects which are the basic elements from which placement rows are constructed.

Core sites are used for standard cell placement in rows. Cell widths must be a multiple of the site width. If there are multiple standard cell heights, a site must be defined for each standard cell height. A row is basically a one dimensional array of a given site. A scalar site definition defines the width, height, and allowable symmetry of each placement location in a row.

The array site definitions, are a two dimensional array of siteDefs. T

The siteRef also holds an additional transform parameter that provides the capability of introducing empty 2 dimensional space between sites - which will need to be considered as a sitePattern defines the pre-determined set of sites. This empty space transform is available in both oaScalarSiteDef and in oaArraySiteDef.

The array site definition defines a pattern of scalar sites. It has a pre-determined set of sites that are used to place a set of cells as part of a row. This type of site is primarily used in gate-array designs. The array site definition references the sitePattern definition to determine to the set of sites. Each sitePattern is a named site reference (siteRef) to an oaScalarSiteDef.

The pattern that is specified will determine whether a cell can be placed or not. In the following example the pattern is AABC. You can place cells with one of the following patterns.

"A" "B" "C" "AA" "AB" "BC" "AAB" "ABC" "AABC"

When a CDB cellview contains the property prCellType with the value of site, the cellview will be mapped to a siteDef on the OpenAccess database. The technology file siteDefs section will be updated accordingly.

For more information, see SiteDef Attributes in the Virtuoso Design Environment SKILL Reference and Site Definition C Functions in the Cadence Integrator’s Toolkit Database Reference.

Blockages

A blockage indicates an area in a design in which a certain type of object is not allowed to be placed. There are three types of blockages, area blockage, layer blockage, and area halo.

Owners

Different types of blockages can have different owners.

Type of Blockage Type of Owner

areaHalo

instance, prBoundary

not optional

areaBlockage

instance, cluster

optional

layerBlockage

instance, cluster

optional

Blockage Types

Area halo blockages can only be of type placement. Area and layer blockages support all of the following blockage sub-types except placement.

routing 
placement 
wiring
fill
slot
pin
feedthru
Screen

For information about accessing blockage attributes, see Blockage Attributes and Blockage SKILL Functions in the Virtuoso Design Environment SKILL Reference and Blockage C Functions in the Cadence Integrator’s Toolkit Database Reference.

Boundaries

The CDB to OpenAccess migration converts CDB boundary shapes on layers to an OpenAccess prBoundary object. All boundary objects are assigned to layer purpose pairs (LPP) to allow display. The LPPs are used for object display and selection and should be set to not valid in the LSW. Meaning the LPPs should not be available for shape drawing from the Layers panel of the LSW. Control selection and display of objects through the Object panel of the LSW. For a list of required technology file layers for OpenAccess objects, see Required Technology File Layers and Purposes for OpenAccess Objects.

There are four types of boundary objects, area boundary, snap boundary, prBoundary, and cluster boundary.

For information about accessing boundary attributes, see Boundary Attributes and Boundary SKILL Functions in the Virtuoso Design Environment SKILL Reference and Boundary C Functions in the Cadence Integrator’s Toolkit Database Reference.

Mapping Shape Based Boundaries

Shapes such as boundaries on layers are mapped to an OpenAccess prBoundary object. The following describes how to map CDB boundary shapes on specific layers to boundary objects.

In CDB, prBoundaries are shapes which use the convention of LPPs to identify them as boundaries. In CDB you can define spacing rules to specify data to boundary relationships. For example,

( minEnclosure( "prBoundary" "boundary" ) ( "nwell" "drawing" ) 0.4 )
( "minEnclosure" "prBoundary" "metal1" 0.3 )
( "minExtension" "prBoundary" "metal3" 0.5)

In the Virtuoso Studio design environment, prBoundaries are objects that do not use conventions to define their purpose. When translating data to OpenAccess, prBoundaries defined as shapes on layers, are mapped to prBoundary objects. The constraints Minimum Boundary Extension Constraint and Minimum Boundary Interior Halo Constraint are used to specify the data to prBoundary object relationships. The minEnclosure and minExtension rules are mapped to minPRBoundaryInteriorHalo and minPRBoundaryExtension. For example, the rules specified above would map to the Virtuoso Studio design environment as follows.

( "minPRBoundaryInteriorHalo" "nwell"  0.4 )
( "minPRBoundaryInteriorHalo" "metal1"  0.3 )
( "minPRBoundaryExtension" "metal3" 0.5 )

In CDB there are various LPP conventions used with the rules minExtension and minEnclosure that define shapes as prBoundaries. Because of this, a mapping file can be used to map the LPPs used in the minExtension and minEnclosure rules, to the OpenAccess constraints minPRBoundaryExtension and minPRBoundaryInteriorHalo.

The mapping file is named .techfilemapping and should be located in the same directory as the library definition file (cds.lib). The file consist of a priority ordered listing of LPPs, which are used to identify the correct shapes to be used when generating the prBoundary object.

Creating a Mapping File

The mapping file should consist of a list of LPPs (purpose is optional) in the order of priority to indicate which layers and possible purpose to use to map shapes on layers to prBoundary objects for each cellview. The first layer specified indicates the highest priority. The last layer specified indicates the lowest priority.

The syntax for boundary priority mapping file is:

; A list to search prBoundary for Virtuoso on OA2.2
techBoundaryLayerPurposePriorities(
( t_layerName  [t_purposeName] )
...
)

For example:

;***********************************************
; A list to search prBoundary for Virtuoso on OA2.2
;***********************************************
techBoundaryLayerPurposePriorities(
; ( layerName layerPurpose )
( prBoundary boundary )
( prBoundary drawing )
( prBoundary )
( metal1 drawing )
)

The two rules minEnclosure and minExtension which use the LPPs specified in the mapping file are converted to the constraints, minPRBoundaryExtension and minPRBoundaryInteriorHalo based on the priority of the listed LPPs in the file.

If the of the constraints (minPRBoundaryInteriorHalo and minPRBoundaryExtension) do not exist in the foundry constraint group, a constraint will be created. If a constraint has already been defined but the value is the same, the constraint is used without error or warning. If a constraint has already been defined but with a different value, a warning will be generated. It is assumed that any one cellview will follow only one convention of LPP.

If a mapping file can not be found by the translator, the first LPP used as a default is, prBoundary boundary. If the LPP prBoundary boundary can not be found, prBoundary is used as the default.

Rules Definitions

In DFII on CDB 5.1.41, the rules minEnclosure and minExtension must be defined as ordered spacing rules and requires the layer name be either a layer name pair or a layer-purpose pair.

For example, the following rules are defined correctly for mapping purposes.

( minEnclosure ( "prBoundary" "boundary" ) ( "metal1" "drawing" ) 0.3 )
( "minEnclosure" "prBoundary" "metal2" 0.3 )
( "minEnclosure" "prBoundary" ( "metal3" "all" ) 0.4 )

The rules specified above would map to the Virtuoso environment as follows:

( "minPRBoundaryInteriorHalo" "metal1"  0.3 )
( "minPRBoundaryInteriorHalo" "metal2"  0.3 )
( "minPRBoundaryInteriorHalo" "metal3"  0.4 )

The following rule is not defined correctly for mapping purposes:

( minEnclosure  ("prBoundary" "boundary") "metal1" 0.3 )

Assuming (prBoundary boundary) is specified in the mapping file, since metal1 must be defined as the LPP; (metal1 drawing), this rule will stay in the group/properties as user defined rules. It is not mapped to a constraint. The correct syntax is:

( minEnclosure ( "prBoundary" "boundary" ) ( "metal1" "drawing" ) 0.3 )

When correctly defined, the rule would map to the Virtuoso environment as:

( "minPRBoundaryInteriorHalo" "metal1"   0.3 )

Only the rules minEnclosure and minExtension are mapped. Rules other than minEnclosure and minExtension which use prBoundary will remain in CDBA (API) rule storage in the group/property as user defined rules and are not mapped to OpenAccess constraints. For example,

( minSpacing    metal1    prBoundary    0.6 )

Clusters

A cluster object is used to associate a group of instances and boundaries within a block. Each instance can only belong to one cluster. Clusters can be hierarchical.

For information about accessing cluster attributes, see Cluster Attributes and Cluster SKILL Functions in the Virtuoso Design Environment SKILL Reference.

Track Patterns

Track patterns are objects which provide guide lines for routing and define the position and number of routing tracks. Routing tracks are used by gridded routers to determine preferred locations and directions for routes. The line segments of track patterns are arranged in uniformly-spaced orthogonal patterns extending across a base array. Corresponds to OpenAccess oaTrackPattern class.

Technology File Requirements for Track Patterns

The following must be defined in your technology file in order to create track patterns.

layerDefinitions( 
techPurposes(
(track 229 trk)
...
)
techDisplays(
(layerName track packetName t t t t nil)
...
)
techLayerPurposePriorites(
(layerName track)
...
)
 layerRules(
functions(
(layerName "metal" layerNumber)
...
)

To efficiently utilize the routing area, tracks should be created to consider the following design aspects:

Guidelines for Track Patterns

Tracks are drawn using the display attributes for LPP routingLayerName track.

Tracks patterns are uniformly-spaced orthogonal patterns extending across the base array. The tracks that make up the track pattern, provide guidelines for laying interconnect routes. Gridded routers place the center-line of each route collinear with an unused segment of a routing track. The VLS-L and VLS-XL allows you to interactively create routes that you can snap to routing tracks. Routing along tracks ensures routes are created without violating minimum spacing rules and are designed to maximize the utilization of available routing area.

Minimum Routing Pitch

Track spacing is determined from the routing pitch. The type of vias used will determine the pitch. The most common routing pitch is line-to-line, because it allows the minimum pitch between routes with a cross type via. A hammer head type via will require a via-to-line routing pitch. A larger pitch does not efficiently utilize the routing area, where as smaller pitch may result in low utilization of the routing area because the router will not be able to place vias next to a route. For more information, see “Determining the Track Spacing”.

Via Stacking

Routing layers using the same preferred direction can be placed on coincident tracks to allow for via stacking. If tracks can not be coincident, place the tracks at a ratio, for example, 1:2 or 2:3.

Preferred and Non-Preferred Routing Directions

Tracks are created in both the preferred and non-preferred routing direction to allow for X Y locations where routes can be jogged and vias and pins can be placed and connected. Points where a horizontal track on one layer crosses over a vertical track on another layer are via locations where a vias can be placed. Most routing is done on the tracks aligned in the preferred direction. Small-distance jogs use tracks in the non-preferred direction.

Determining the Track Spacing

Determine the line-to-via track spacing (routing pitch) for each routing layer by adding:

half the metal width + metal to metal spacing + half the width of the metal

or

half the via width + metal to via spacing + half the width of the metal

For information about different types of routing pitches, see “Minimum Routing Pitch”.

Determining the Number of Tracks

You must determine the number of tracks needed for the width and the height of the cellview. Calculate the number of horizontal tracks by dividing the height of the design area by the routing pitch of the metal. Determined the number of tracks needed in vertical direction using the same method. Create horizontal and vertical track patterns for each routing layer. When Snap to Track is on in the Layout Editor Options form, you are only allowed to route in areas where there are intersecting horizontal and vertical tracks.

For information about accessing track pattern attributes, see Track Pattern Attributes and Track Pattern SKILL Functions in the Virtuoso Design Environment SKILL Reference and Track Pattern C Functions in the Cadence Integrator's Toolkit Database Reference.

Markers

Markers are used to highlight design violations and the objects that are causing the violation which corresponds to OpenAccess oaMarker class.

Several types of markers are supported in the Virtuoso Studio design environment.

For information about accessing marker attributes, see Marker Attributes and Marker SKILL Functions in the Virtuoso Design Environment SKILL Reference and Marker C Functions in the Cadence Integrator's Toolkit Database Reference.

Steiner

A steiner is used to represent a logical object that facilitates, or is used to minimize net length of branching wires.

A steiner is a logical point representing the branching start or end point or points of a route or routes. Steiners can be associated with a particular layer and net, and also have geometrical attributes.

For information about accessing Steiner attributes, see Steiner Attributes and Steiner SKILL Functions in the Virtuoso Design Environment SKILL Reference and Steiner C Functions in the Cadence Integrator's Toolkit Database Reference.

Layer Headers

In the Virtuoso environment, access to objects and shapes as they are grouped by layers is available at the API level through the objects, layerHeader and lppHeader.

A layerHeader objects holds information about a particular layer-purpose pair and the set of objects that use the layer purpose pair in a design database. The set of valid objects are; steiners, guides, blockages, and lppHeaders. The layerHeader provides direct access to these objects as they are grouped by layer.

A layerHeader is read only and can be bound or unbound. A bound layerHeader holds a valid technology database layer object. An unbound layerHeader only holds a layer number. layerHeader binding happens when layerHeader data is read in or a new layerHeader is created.

A layerHeader caches 3 union-ed bounding boxes for steiner, blockage and guide on the layer, one for each type of object. It also holds three lists of objects, one for each type for quick access.

The relationship of a layerHeader to objects is analogous to the relationship of an lppHeader to shapes. A layerHeader holds a collection of lppHeaders which contain the layer of the layerHeader. Therefore, a layerHeader provides indirect access to the shapes grouped by the lppHeaders.

For information about accessing cluster attributes, see Layer Header Attributes in the Virtuoso Design Environment SKILL Reference and Layer Header C Functions in the Cadence Integrator's Toolkit Database Reference.

CDB and Preview Conventions for Identifying Objects

Open Access Object Name Conventions in CDB and Virtuoso Preview

route

In CDB and Virtuoso Preview, a route is equivalent to a collection of paths and via instances on connected LPPs.

row

In the CDB, a row is a rectangle on the LPP row drawing.

In Virtuoso Preview, a row is represented by a rectangle on LPP (dbcRowLayer, dbcDrawingPurpose) and the following properties:

rowName:
rowType: hRow, vRow, ioT
placementClass
: site name
legalOrient: site orientation
step: value based on the width of the site and the orientation of the row.
alignment: value of the distance between rows
rowOrient: R0, MXR90

siteDef

In Virtuoso Preview, a rectangle on LPP (dbcPRBoundary, dbcDrawing) and the following properties:

prCellType: site
prCellClass: pad, core
maskLayoutSubType: abstract
symmetry: X, Y, R90

blockage

In CDB, a blockage is a rectangle or polygon on the boundary purpose, for example, metal1 boundary. If an LPP is not available, the system uses the following reserved LPP: Cannotoccupy drawing

In Virtuoso Preview, a blockage is a rectangle on a layer with purpose boundary, stored in a dbGoup named defBlockages, with a string property of one of the following:

defComponentBlockages
defSlotsBlockages
defFillsBlockages
defPushdownBlockages
defPlacementComponentBlockages
defPlacementPushdownBlockages

prBoundary

In CDB, a boundary is a rectangle or polygon on the LPP prBoundary drawing (or boundary)

In Virtuoso Preview, a rectangle or polygon on LPP (dbcPrBoundaryLayer, dbcBoundaryPurpose).

snapBoundary

In Virtuoso Preview, a snapBoundary is represented by a prBoundary bbox.

clusterBoundary

In Virtuoso Preview, a clusterBoundary is represented by region. It is parent-child relationship consisting of a rectangle and label.

The rectangle is created on LPP (dbcPrBoundary, dbcDrawing) and has the following properties:

regionType: normal
regionName: region name
placementClass: name
objProperty: name-value pairs

cluster

In Virtuoso Preview, a cluster is a group of instances stored in a dbGroup with a string property named plcGroupType.

trackPattern

In Virtuoso Preview, track patterns are properties stored on the cellview that sets the global routing or GCell grid: the icXGGrid property specifies the location on the X axis and the icYGGrid property specified the location on the Y axis.

marker

In CDB and Virtuoso Preview, a warning marker is a rectangle on the LPP marker warning;
an error is a rectangle on the LPP marker error

pinGroup

In CDB and Virtuoso Preview, subnets are used to model the Strong, Weak, and Must Join connectivity pin groups.

Controlling Display and Selection of Objects

Required Technology File Layers and Purposes for OpenAccess Objects

Unplaced Instances

The Objects panel in the LSW lets you control visibility and selection of objects by turning on and off the relevant layer purpose pairs (LPPs). OpenAccess objects (marker, row, track pattern, boundaries, and blockages) are assigned to an LPP to control selectability and visibility. Your technology file must contain the LPP's which support OpenAccess objects, and your display.drf file must contain packets for these LPP's.

The Grid panel lets you control the visibility of track patterns.

All blockage types, with the exception of placement, have forms which allow you to control the visibility and selectability on a layer by layer basis the blockages you create.

For more information, see Chapter 6, The Layer Selection Window (LSW) in the Virtuoso Layout Suite L User Guide.

Required Technology File Layers and Purposes for OpenAccess Objects

OpenAccess objects are assigned to layer purpose pairs (LPPs) to allow display and selection. The following table lists the layers and reserved purposes that allow you to control display and selection of OpenAccess objects. These layers and reserved purposes must be defined in the technology file. Corresponding packets are defined in the default.drf file located in the directory your_install_dir/share/cdssetup/dfII.

The LPPs listed in the table are used for object display and selection and should be set to not valid in the LSW. This means the LPPs will not be available for shape drawing from the Layer panel of the LSW. Control selection and display of objects through the Object panel of the LSW.

The default.drf file contains predefined attributes such as colors, line styles, and stipples for LPPs and is further organized into a set of predefined packets. When starting the software, the default.drf is loaded and any the customized display.drf file are merged with the default.drf. Because the files are merged in sequence, files loaded later in the sequence can redefine display packets, colors, line styles, and stipples specified in files loaded earlier. Layer attributes you have defined in a customized display.drf loaded after the default.drf will be respected. For example, the display packet for snap boundary is defined in a customized display.drf with a fill style of “solid”. This will overwrite the fill style of “outline” defined in the default.drf. In this case, all snap boundaries will be displayed with a solid fill obstructing the details of the cellview.

Object Layer System-Reserved Purpose

Standard Via

viaLayer

drawing

Row

Row

boundary

Boundary - prBoundary

prBoundary

boundary

Boundary - Cluster

group

boundary

Boundary - Area

border

boundary

Boundary - Snap

snap

boundary

Blockage - Placement

Cannotoccupy

boundary (see note below)

Blockage - Routing

blockageLayer

blockage (see note below)

Blockage - Wiring

blockageLayer

blockage (see note below)

Blockage - Fill

blockageLayer

blockage (see note below)

Blockage - Slot

blockageLayer

blockage (see note below)

Blockage - Pin

blockageLayer

blockage (see note below)

Blockage - Feedthru

blockageLayer

blockage (see note below)

Blockage - Screen

blockageLayer

blockage (see note below)

Placement Grid

snapLayer

grid

Manufacturing Grid

routingLayer

grid

Track pattern

routingLayer

track

Tack pattern - no layer

Unrouted

track

Marker - annotation

marker

annotation

Marker - info

marker

info

Marker - acknowledged warning

marker

ackWarning

Marker - warning

marker

warning

Marker - signed off error

marker

soError

Marker - error

marker

error

Marker - signed off critical error

marker

soCritical

Marker - critical error

marker

critical

Marker - fatal

marker

fatal

To draw blockages depending on their type, you can add packet definitions to the display.drf file. You can define packets for routing, fill, slot, pin, feedthru, and screen type of blockages. The blockages you draw will be based on the attributes defined in these packets, if they exist. For naming the packet, prefix the blockage type with the packet name used by the blockage layer and an underscore, as in M1Blockage_fill. The following is an example of a definition of a new packet in the display.drf file:
( display M1Blockage_fill dots solid red red outlineStipple )

Unplaced Instances

Instances with the status of "unplaced" are not visible in the layout even though they are present in the design. The Instance Statistics section of the Design - Summary form displays the total number of unplaced instances.

See Placement Status for more information.

Shapes

Paths with Extensions

On CDB you can specify extension values for a path of any style before setting the style as variable (varExtendExtend). In the Virtuoso environment, you need to set the style to variable before you specify values for extensions.

For OpenAccess, there is a potential loss of data if you change the type from variable to anything else. When changed from variable, the original settings, including extension information, are lost. If you then set the path style back to variable, you need to reset the extensions as well. This is not necessary in CDB.

The C function, dbSetPathExt, behaves differently for CDB and the Virtuoso environment:

The C function, dbGetPathExt, behaves differently for CDB and the Virtuoso environment:

Setting and querying the value of an extension differs for CDB and the Virtuoso Studio design environment:

For example, for a path with the style truncate, setting and querying the beginning and ending extensions works as follows:

Set, then query Results for CDB Results for Virtuoso Studio design environment

path~>begExt = 2.5

2.5

nil

path~>begExt

2.5

0.0

Objects with Points

When a polygon or path is created, the Virtuoso environment removes any coincident and collinear points from the given point array to compress the amount of data used. CDB does not perform such checking. Therefore, data converted from CDB might have fewer points in OpenAccess. Although the bounding box will be the same, you need to review:

Retraced Segments in Polygons

Neither OpenAccess nor CDB allows self-intersecting polygons. However, for cases where a segment is created with points that are coincident with the points of an existing segment (when subsequent points retrace an existing segment), OpenAccess and CDB handle them as follows:

For example, the following statement attempts to create a five-point polygon, with the fourth segment overlapping (retracing) the third segment:

dbCreatePolygon( cv "metal1" list( 1:2 4:2 4:7 5:8 4:7 ))

OpenAccess truncates the last two points (5:8 4:7), and creates a polygon from the remaining three points. CDB creates a polygon that looks like a line, with the fourth segment retracing the third segment.

The following statement attempts to create a four-point polygon, with the third segment overlapping the second segment:

dbCreatePolygon( cv "metal1" list( 1:2 4:2 4:7 4:2 ))

OpenAccess truncates points 4:7 and 4:2, and the CDBA procedural interface issues a warning saying there are not enough points to form a polygon. CDB creates a polygon that looks like a line, with the third segment overlapping the second segment.

Zero-Area Rectangles

OpenAccess does not allow the creation of a rectangle with zero size. CDB allows the creation of zero-area rectangles. Both databases issue warnings:

For CDB, the GUI applications flag and correct zero-area rectangles before they get to the database. The only way to create zero-area rectangles in CDB is with db SKILL, itk or C functions. In OpenAccess, you cannot create zero-area rectangles.

Text Display Visibility

CDB and OpenAccess support different numbers of text display visibility attributes:

As a result, CDB has eight possible visibility states, while OpenAccess has only six. Unfortunately, the existing API for setting individual text display visibility attributes can lead to transitions with particular sequences of flag settings that result in one of the following two states that are not supported in OpenAccess:

(t n n) and (n n n)

using state notation (visible, nameVisible, valueVisible).

In general, these are dubious states and are entered only as temporary states during a sequence of flag settings that are attempting to change the text display from one to another of the six OpenAccess-supported final states.

A new function

dbSetTextDisplayNameValueVisible( tdId nameVisble valueVisble ) 

has been added in C and SKILL to set both the nameVisible and valueVisible flags as a single operation, to prevent setting the text display visibility flags to the disallowed states. For a description of this function, see the dbSetTextDisplayNameValueVisible.

Warning messages are issued when an application tries to set the text display visibility flags to disallowed states under OpenAccess. Application developers need to know that illegal visibility states must be avoided, and the new warning messages help to identify these situations.

Bounding box for Net Expression Text Display Incorrect in OpenAccess

The size of the bounding box of a net expression text display for a terminal name attribute can be incorrect in OpenAccess. This is because OpenAccess does not evaluate net expressions from terminal name attributes.

CDB stores the terminal name and evaluates the net expression. OpenAccess stores the terminal name, but is unaware of the net expression. The size of net expression text display bounding boxes does not affect your design.

Unbound Text Displays

A cross-cellview text display object becomes unbound if it cannot be bound to its cross-cellview associate. In CDB, the unbound text display is deleted if the cellview containing the unbound text display is editable. In OpenAccess, the unbound text display is not deleted; instead, OpenAccess sets the text display text to

* Unbound *.

Arcs

Converting Start and Stop Angles for an Arc

In OpenAccess, the start and stop angles of an arc can be between 0 and 2PI. In CDB, start and stop angles can be between -PI and PI.

In the Virtuoso Studio design environment, querying an arc angle with dbGetArcAngle or dbGetArcRec returns angles between -PI and PI. Also when creating an arc with dbCreateArc, negative angles are accepted and the necessary adjustments are made.

However, if an application accesses the OpenAccess arc data directly, the application will need to make any necessary adjustments for start and stop angles that are between -PI and PI.

Selection of an Arcs

In the Virtuoso Studio design environment, the region query functionality has been changed to always support true overlaps of query regions for object geometries. See, Region Query Functions. Only objects whose geometry overlaps the specified region will be produced.

When selecting an arc, the arc must overlap the specified region in order to be selected.

Querying an Arc for Its Bounding Box

When you query an arc for its bounding box, the values returned in CDB and OpenAccess will usually differ.

When you create an arc with the dbCreateArc function, one of the arguments you must specify is the bounding box of the arc. An arc is defined by the intersection of two bounding boxes: the bounding box of the ellipse of which the arc is a part, and the bounding box specified to delimit the arc. The specified delimiting bounding box need not be the minimum bounding box; it just needs to intersect with the ellipse bounding box to define the beginning and end of the arc. Therefore, the specified delimiting bounding box might be larger than the minimum bounding box needed to define the arc.

CDB saves both the ellipse and specified delimiting bounding boxes, and computes the start and stop angles from them. OpenAccess saves the ellipse bounding box and the start and stop angles, and computes the minimal bounding box that defines the arc.

In CDB, querying an arc for its bounding box, for example,

arc~>bBox

returns the value of the bounding box specified as an argument, which will probably be larger than the minimum bounding box required to define the arc.

In OpenAccess, querying an arc for its bounding box returns the exact bounding box of the arc, because OpenAccess calculates it from the ellipse bounding box and the start and stop angles.

Therefore, when you query an arc for its bounding box, the value returned by CDB and OpenAccess will probably be different.

Querying an Arc for Its Start and Stop Angles

The results of querying the start and stop angles of an arc might be slightly different for CDB and OpenAccess. This is because

Due to the difference between double and single precision, and the extra calculation for the stop angle performed by CDB, the following two query statements might return slightly different results for CDB and OpenAccess:

arc~>startAngle
arc~>stopAngle

Bounding Boxes of Labels and Text Displays

The bounding boxes of labels and text displays might be slightly different in OpenAccess and CDB. This is caused by a difference in how OpenAccess and CDB calculate their bounding boxes. OpenAccess rounds the values to the nearest database unit, where as CDB truncates them. The difference in the width and height of a label or text display could be off by 1 database unit (OpenAccess unit). Rounding to the nearest database unit is more accurate than truncating; CDB truncates.

If a label or test display is on the edge of a cellview, the difference described above might cause the cellview’s bounding box to be different. The result would be that the bounding boxes of the instances of this cellview would also be different.

Also, when you query an arc for its bounding box, the values returned in OpenAccess and CDB differ slightly.


Return to top
 ⠀
X