Product Documentation
Virtuoso Technology Data Constraints Reference
Product Version IC23.1, November 2023

minCutClassSpacing (One layer)

spacingTables(
( minCutClassSpacing tx_cutLayer
 (( "cutClass" (g_index …) nil "cutClass" (g_index …) nil )
  ['sameNet | 'sameMetal | 'sameVia]
  ['sameMask] ['bothNegativePrls]
  ['exactAligned ((f_width | t_name f_spacing) …)]
  ['horizonal | 'vertical]  
  ['paraOverlap f_overlap
  ['horizontalOverlap | 'verticalOverlap]
  ]
  ['nonCutClassEdgeSpacing (f_length1 f_space1 f_length2 f_space2 …)]
  ['cutClassProfile
   (( "cutClass" (g_index …) nil "cutClass" (g_index …) nil )
    (g_cutClassProfileTable)
  )
  ]
  ['insideLayers (tx_layer1 tx_layer2tx_layerN)
       ['insidePurposes (t_purpose1 t_purpose2t_purposeN)]
          |
       'outsideLayers (tx_layer1 tx_layer2tx_layerN)
       ['outsidePurposes (t_purpose1 t_purpose2t_purposeN)]
     ]
     [f_default]
    )
    (g_table) ['manhattan]
)
) ;spacingTables

Specifies the spacing between cut shapes of the same or of different classes on a layer. The spacing requirement depends on the size of the cut shape and on the edge—long or short—from which the spacing is measured.

Optional parameters determine whether spacing is measured center-to-center or edge-to-edge, whether the constraint applies to a certain connectivity type, and whether the constraint applies only if the cut shapes have a parallel run length greater than or equal to the specified value.

The optional 'bothNegativePrls parameter determines how parallel run lengths less than zero are handled.

Values

tx_layer

The cut layer on which the constraint is applied.

Type: String (layer and purpose names) or Integer (layer number)

"cutClass" (g_index ) nil "cutClass" (g_index ) nil

  

This identifies the index for table.

The format of g_index is as follows:

f_width | (f_width f_length) | t_className | ((f_width f_length) 'shortEdge | 'longEdge) | (t_className 'shortEdge |'longEdge)

g_table

The spacing between the long edges (sides) and/or short edges (ends) of cuts, of the same class or of different classes.

The table row has the following format:

((f_edgeLength | t_className 'shortEdge | 'longEdge) (f_edgeLength | t_className 'shortEdge | 'longEdge)) f_spacing | (f_spacing ['centerToCenter | 'centerAndEdge | 'centerAndEdgeNoPRL])

where,

  • f_edgeLength is the width or length of the cut class.
  • t_className is the name of the cut class and must correspond to a cut class defined in a cutClasses constraint.
  • 'shortEdge and 'longEdge indicate the edge of the cut shape from which spacing is measured.
  • f_spacing is the minimum spacing required between cut shapes.
  • 'centerToCenter indicates that spacing is measured from the center of one cut shape to the center of another cut shape.
  • 'centerAndEdge specifies that the maximum of all applicable spacing values must be measured center-to-center and the minimum of all applicable spacing values must be measured edge-to-edge.
  • 'centerAndEdgeNoPRL specifies that the spacing between two cut shapes must be the greater of the following two values:
    • The maximum of all applicable values, which is measured center-to-center.
    • The minimum of all applicable values, which is measured edge-to-edge.

Type: A 2-D table specifying floating-point width or length and spacing values

Parameters

'sameNet | 'sameMetal | 'sameVia

  

The connectivity type. If connectivity type is not specified, the constraint applies to any connectivity type, including any two via cuts on the same cut layer with no common metal or net.

  • 'sameNet: The constraint applies only if the via cuts are on the same net.
  • 'sameMetal: The constraint applies only if the via cuts are on a contiguous same-metal shape.
  • 'sameVia: The constraint applies only if the via cuts are overlapped by a single metal shape from above and by another single metal shape from below.

Type: Boolean

'centerToCenter

The spacing is measured center-to-center. Otherwise, the spacing is measured edge-to-edge.

Type: Boolean

'sameMask

(Virtuoso Advanced Node for Layout Standard) The constraint applies only to via cuts on the same mask.

Type: Boolean

'bothNegativePrls

(Virtuoso Advanced Node for Layout Standard) If the parallel run length between the cut shapes is less than zero, this parameter allows both horizontal and vertical offsets between the cut shapes to be used as parallel run lengths.

When this parameter is specified, two separate checks are performed using the two offset values. If horizontal offset is used as the parallel run length, required spacing is looked up by taking into account the vertical edges facing each other, and when vertical offset is used as the parallel run length, required spacing is looked up by taking into account the horizontal edges facing each other. The maximum of the spacing values thus obtained is the required spacing.

If this parameter is not specified, the smaller of the two offsets is considered as the parallel run length and spacing is looked up using this value. Because the edges that are facing each other cannot be determined, the maximum of the four possible spacing values is compared with the Euclidean spacing.

If this parameter is specified for one minCutClassSpacing constraint defined on a particular layer, it must be specified for all minCutClassSpacing constraints defined on that layer.

Type: Boolean

'exactAligned ((f_width | t_name f_spacing) …)

  

The spacing between square cut shapes with the specified width or between cut shapes that belong to the specified cut class must be greater than or equal to this value if the cut shapes are exactly aligned, vertically or horizontally.

'horizontal | 'vertical

  

The direction in which the constraint applies. If direction is not specified, the constraint applies in any direction.

Type: Boolean

'paraOverlap f_overlap

The constraint applies only if the parallel run length (prl) between the cut shapes is greater than or equal to this value. Positive and negative values are allowed.

If multiple minCutClassSpacing constraints are defined in an AND constraint group, the constraint is applied by evaluating the overlap values, specified in the ascending order, to locate the first overlap value for which the parallel run length is greater than or equal to this value. As a result, only one constraint in an AND constraint group applies. For example, in an AND constraint group with parallel run length values specified as -1.0, -0.05, 0, 0.05, 1, the constraint value that applies is determined as follows:

overlap (prl)   Use constraint value for overlap

<-1.0 The constraint does not apply

>=-1.0 and <-0.05 -1.0

>=-0.05 and <0 -0.05

>=0 and <0.05 0

>=0.05 and <1.0 0.05

>=1.0 1.0

'horizontalOverlap | 'verticalOverlap

(Virtuoso Advanced Node for Layout Only) The direction in which parallel run length is measured. By default, parallel run length is measured in any direction.

Type: Boolean

'cutClassProfile (( "cutClass" (g_index …) nil "cutClass" (g_index …) nil ) (g_cutClassProfileTable))

The cut shapes with the specified dimensions or class are expanded by a value equal to extension before spacing is measured.

The table has the following format:

((f_edgeLength | t_className
'shortEdge | 'longEdge
)
(
f_edgeLength | t_className
'shortEdge | 'longEdge
)
)
f_extension

This value is applied only if the parallel run length between the cut shapes is less than or equal to zero.

Type: A 2-D table specifying floating-point width or length values and the value by which the cut shapes need to be expanded.

'nonCutClassEdgeSpacing (f_length1 f_space1)

(ICADVM20.1 Only–95512) The spacing between a cut shape and a non-cut-class shape, such as a blockage, of length length1 must be greater than or equal to space1.

'insideLayers (tx_layer1 tx_layer2tx_layerN)
| 'outsideLayers (
tx_layer1 tx_layer2tx_layerN)

  

Determines if the constraint applies, based on the presence or absence of one or more layers.

  • 'insideLayers: The constraint applies only if the shapes on the specified layer (cutLayer) overlap a shape on one of these layers (layer1 layer2layerN).
  • 'outsideLayers: The constraint applies only if the shapes on the specified layer (cutLayer) overlap the region outside the shapes on one of these layers (layer1 layer2layerN).

For more information, see Region-based Rule (One Layer).

Type: String (layer name) or Integer (layer number)

'insidePurposes (t_purpose1 t_purpose2t_purposeN)

The 'insideLayers parameter is limited to only the specified purposes.

Type: String (purpose name)

'outsidePurposes (t_purpose1 t_purpose2t_purposeN)

The 'outsideLayers parameter is limited to only the specified purposes.

Type: String (purpose name)

f_default

The spacing value to be used when no table entry applies.

'manhattan

The constraint uses Manhattan distance, which allows a larger spacing at the corners.

By default, the constraint uses Euclidian measurement.

Type: Boolean

Examples

Example 1: minCutClassSpacing with paraOverlap

Three cut classes are defined on Via1: VA, VB, and VC. The spacing required between cut shapes of different cut classes is as follows:

For the rest of the combinations, a default spacing of 0.15 applies.

Example 2: minCutClassSpacing with paraOverlap and cutClassProfile

Three cut classes are defined on Via1: VA, VB, and VC. The minCutClassSpacing constraint is defined as follows for shapes of these cut classes:

spacingTables(
    ( minCutClassSpacing "Via1" 
      (( "cutClass" ("VA" ("VB" 'shortEdge) ("VB" 'longEdge) "VC")  nil
         "cutClass"   nil  nil  )    
       'paraOverlap 0
       'cutClassProfile 
      (( "cutClass" (("VB" 'shortEdge) ("VB" 'longEdge)) nil
"cutClass" ("VA" ("VB" 'shortEdge) ("VB" 'longEdge) "VC") nil )
(
(("VB" 'shortEdge) ("VA" 'shortEdge)) 0.02
(("VB" 'shortEdge) ("VA" 'longEdge )) 0.02
(("VB" 'shortEdge) ("VB" 'shortEdge)) 0.0
(("VB" 'shortEdge) ("VB" 'longEdge )) 0.0
(("VB" 'shortEdge) ("VC" 'shortEdge)) 0.02
(("VB" 'shortEdge) ("VC" 'longEdge )) 0.02
     (("VB" 'longEdge ) ("VA" 'shortEdge)) 0.0
(("VB" 'longEdge ) ("VA" 'longEdge )) 0.0
(("VB" 'longEdge ) ("VB" 'shortEdge)) 0.0
(("VB" 'longEdge ) ("VB" 'longEdge )) -0.02
(("VB" 'longEdge ) ("VC" 'shortEdge)) 0.0
(("VB" 'longEdge ) ("VC" 'longEdge )) 0.0
)
)
0.15 )
(
(("VA" 'shortEdge) ("VA" 'shortEdge)) (0.20 'centerToCenter)
(("VA" 'shortEdge) ("VA" 'longEdge )) (0.20 'centerToCenter)
(("VA" 'shortEdge) ("VB" 'shortEdge)) 0.30
(("VA" 'shortEdge) ("VB" 'longEdge )) 0.15
(("VA" 'shortEdge) ("VC" 'shortEdge)) 0.15
(("VA" 'shortEdge) ("VC" 'longEdge )) 0.15
     (("VA" 'longEdge ) ("VA" 'shortEdge)) (0.20 'centerToCenter)      (("VA" 'longEdge ) ("VA" 'longEdge )) (0.20 'centerToCenter)      (("VA" 'longEdge ) ("VB" 'shortEdge)) 0.30      (("VA" 'longEdge ) ("VB" 'longEdge )) 0.15      (("VA" 'longEdge ) ("VC" 'shortEdge)) 0.15      (("VA" 'longEdge ) ("VC" 'longEdge )) 0.15      (("VB" 'shortEdge) ("VA" 'shortEdge)) 0.30      (("VB" 'shortEdge) ("VA" 'longEdge )) 0.30      (("VB" 'shortEdge) ("VB" 'shortEdge)) 0.40      (("VB" 'shortEdge) ("VB" 'longEdge )) 0.40      (("VB" 'shortEdge) ("VC" 'shortEdge)) 0.30      (("VB" 'shortEdge) ("VC" 'longEdge )) 0.30      (("VB" 'longEdge ) ("VA" 'shortEdge)) 0.15      (("VB" 'longEdge ) ("VA" 'longEdge )) 0.15      (("VB" 'longEdge ) ("VB" 'shortEdge)) 0.40      (("VB" 'longEdge ) ("VB" 'longEdge )) 0.15      (("VB" 'longEdge ) ("VC" 'shortEdge)) 0.15      (("VB" 'longEdge ) ("VC" 'longEdge )) 0.15      (("VC" 'shortEdge) ("VA" 'shortEdge)) 0.15      (("VC" 'shortEdge) ("VA" 'longEdge )) 0.15      (("VC" 'shortEdge) ("VB" 'shortEdge)) 0.30      (("VC" 'shortEdge) ("VB" 'longEdge )) 0.15      (("VC" 'shortEdge) ("VC" 'shortEdge)) (0.50 'centerToCenter)      (("VC" 'shortEdge) ("VC" 'longEdge )) (0.50 'centerToCenter)      (("VC" 'longEdge ) ("VA" 'shortEdge)) 0.15      (("VC" 'longEdge ) ("VA" 'longEdge )) 0.15      (("VC" 'longEdge ) ("VB" 'shortEdge)) 0.30      (("VC" 'longEdge ) ("VB" 'longEdge )) 0.15      (("VC" 'longEdge ) ("VC" 'shortEdge)) (0.50 'centerToCenter)      (("VC" 'longEdge ) ("VC" 'longEdge )) (0.50 'centerToCenter)      )     )
) ;spacingTables

The 'cutClassProfile parameter uses its own 2-D table, as shown below:

VA

VB

VC

SE

LE

SE

LE

SE

LE

0.3

0.3

0.4

0.6

0.7

0.7

VB

SE

0.4

0.02

0.02

0.0

0.0

0.02

0.02

LE

0.6

0.0

0.0

0.0

-0.02

0.0

0.0

For square cut shapes, VA and VC, the LE ('longEdge) and SE ('shortEdge) entries must be equal, and for rectangular cuts, only LE/LE and SE/SE entries are valid. Therefore, the two entries in italics are ignored. Additionally, only the dimensions of rectangular cut shapes are used to index rows.

Example 3: minCutClassSpacing without bothNegativePrls

The spacing defined between two cut shapes of type VA (0.2x0.1) and VB (0.2x0.4) for parallel run length (PRL) -0.1 and -0.2 is as follows:

PRL = -0.1

0.1

0.2

0.2

0.4

0.1

0.2

0.2

0.2

0.22

0.2

0.2

0.2

0.21

0.23

0.2

0.2

0.21

0.3

0.3

0.4

0.21

0.23

0.3

0.3

PRL = -0.2

0.1

0.2

0.2

0.4

0.1

0.2

0.2

0.2

0.22

0.2

0.2

0.2

0.21

0.24

0.2

0.2

0.21

0.3

0.3

0.4

0.21

0.23

0.3

0.3

Example 4: minCutClassSpacing with bothNegativePrls

The spacing defined between two cut shapes of type VA (0.2x0.1) and VB (0.2x0.4) for parallel run length (PRL) -0.1 and -0.2 is as follows:

PRL = -0.1

0.1

0.2

0.2

0.4

0.1

0.2

0.2

0.2

0.22

0.2

0.2

0.2

0.21

0.23

0.2

0.2

0.21

0.3

0.3

0.4

0.21

0.23

0.3

0.3

PRL = -0.2

0.1

0.2

0.2

0.4

0.1

0.2

0.2

0.2

0.22

0.2

0.2

0.2

0.21

0.24

0.2

0.2

0.21

0.3

0.3

0.4

0.21

0.23

0.3

0.3


Return to top
 ⠀
X