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

minCutClassSpacing (Two layers)

spacingTables(
( minCutClassSpacing tx_cutLayer1 tx_cutLayer2
 (( "cutClass" (g_index …) nil "cutClass" (g_index …) nil)
  [['sameNet | 'sameMetal] | ['exceptSameNet]] 
  ['spacingPrl (f_prl f_spacing)] 
  ['centerToCenter]
  ['paraOverlap f_overlap]
  ['nonCutClassEdgeSpacing (f_length1 f_space1 f_length2 f_space2 …)]
  ['cutClassProfile 
  (( "cutClass" (g_index …) nil "cutClass" (g_index …) nil )
   (g_cutClassProfileTable)
  )
  ] 
  ['nonZeroEnclosure tx_layer
  ['minEnclosure f_minEnclosure]
  ] 
  ['cutClassSizeBy ({f_size1 f_size2} …)]
  [f_default]
 ) 
 (g_table) ['manhattan]
)
) ;spacingTables

Specifies the spacing between cut shapes of the same or of different classes on two different layers. 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.

'cutClassProfile is mutually exclusive with 'cutClassSizeBy.

Values

tx_cutLayer1

The first cut layer on which the constraint is applied.

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

tx_cutLayer2

The second 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

  

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.

Type: Boolean

'spacingPrl (f_prl f_spacing)

Specifies that two cuts, regardless of the cut class, with parallel run less than or equal to f_prl in both directions should have a spacing greater than or equal to f_spacing.

'exceptSameNet

The constraint does not apply to via cuts on the same net.

Type: Boolean

'centerToCenter

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

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 actual 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:

Actual overlap (prl)   Use constraint value for overlap

<-1 The constraint does not apply

>=-1 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

'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.

'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.

'nonZeroEnclosure tx_layer

  

(ICADVM20.1 Only–95512) The constraint applies only if cutLayer1 has tx_layer as the top layer and the shape on cutLayer1 has a non-zero layer enclosure on all four sides.

This parameter applies only to the spacing checks between via cuts with parallel run length greater than zero.

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

'minEnclosure f_minEnclosure

(ICADVM20.1 Only–95511) The constraint applies only if the via cut to which 'nonZeroEnclosure applies has an enclosure greater than this value on all four sides.

'cutClassSizeBy ({f_size1 f_size2} …)

  

(ICADVM20.1 Only–95512) The constraint is applied after expanding all edges of the cut shape by this value. If there are n rows and m columns in constraint value table, this parameter should specify exactly (n + m) extension values, such that the first n values specify extensions for the cutLayer1 cut edges in the row indexes of the constraint value table, while the remaining m values specify extensions for the cutLayer2 cut edges in the column indexes of the constraint value table.

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

spacingTables(
( minCutClassSpacing "Via1" "Via2"
(( "cutClass" ("VA" ("VB" 'shortEdge) ("VB" 'longEdge) "VC") nil
"cutClass" ("VD" ("VE" 'shortEdge) ("VE" 'longEdge) "VF") nil )
'paraOverlap 0.001
0.15
)
(
(("VA" 'shortEdge) ("VD" 'shortEdge)) (0.20 'centerToCenter)
(("VA" 'shortEdge) ("VD" 'longEdge )) (0.20 'centerToCenter)
(("VA" 'shortEdge) ("VE" 'shortEdge)) 0.30
(("VA" 'shortEdge) ("VE" 'longEdge )) 0.15
(("VA" 'shortEdge) ("VF" 'shortEdge)) 0.15
(("VA" 'shortEdge) ("VF" 'longEdge )) 0.15
(("VA" 'longEdge ) ("VD" 'shortEdge)) (0.20 'centerToCenter)
(("VA" 'longEdge ) ("VD" 'longEdge )) (0.20 'centerToCenter)
(("VA" 'longEdge ) ("VE" 'shortEdge)) 0.30
(("VA" 'longEdge ) ("VE" 'longEdge )) 0.15
(("VA" 'longEdge ) ("VF" 'shortEdge)) 0.15
(("VA" 'longEdge ) ("VF" 'longEdge )) 0.15
(("VB" 'shortEdge) ("VD" 'shortEdge)) 0.30
(("VB" 'shortEdge) ("VD" 'longEdge )) 0.30
(("VB" 'shortEdge) ("VE" 'shortEdge)) 0.40
(("VB" 'shortEdge) ("VE" 'longEdge )) 0.40
(("VB" 'shortEdge) ("VF" 'shortEdge)) 0.30
(("VB" 'shortEdge) ("VF" 'longEdge )) 0.30
(("VB" 'longEdge ) ("VD" 'shortEdge)) 0.15
(("VB" 'longEdge ) ("VD" 'longEdge )) 0.15
(("VB" 'longEdge ) ("VE" 'shortEdge)) 0.40
(("VB" 'longEdge ) ("VE" 'longEdge )) 0.15
(("VB" 'longEdge ) ("VF" 'shortEdge)) 0.15
(("VB" 'longEdge ) ("VF" 'longEdge )) 0.15
(("VC" 'shortEdge) ("VD" 'shortEdge)) 0.15
(("VC" 'shortEdge) ("VD" 'longEdge )) 0.15
(("VC" 'shortEdge) ("VE" 'shortEdge)) 0.30
(("VC" 'shortEdge) ("VE" 'longEdge )) 0.15
(("VC" 'shortEdge) ("VF" 'shortEdge)) (0.50 'centerToCenter)
(("VC" 'shortEdge) ("VF" 'longEdge )) (0.50 'centerToCenter)
(("VC" 'longEdge ) ("VD" 'shortEdge)) 0.15
(("VC" 'longEdge ) ("VD" 'longEdge )) 0.15
(("VC" 'longEdge ) ("VE" 'shortEdge)) 0.30
(("VC" 'longEdge ) ("VE" 'longEdge )) 0.15
(("VC" 'longEdge ) ("VF" 'shortEdge)) (0.50 'centerToCenter)
(("VC" 'longEdge ) ("VF" 'longEdge )) (0.50 'centerToCenter)
)
)
) ;spacingTables

To find the spacing between a VA via cut (0.3x0.3) and the short edge of a VE via cut (0.4x0.6):

Example 2: minCutClassSpacing with cutClass, cutClassProfile, sameNet, and paraOverlap

spacingTables(
    ( minCutClassSpacing     "Via1" "Via2" 
     (( "cutClass" ("VD" ("VE" 'longEdge) ("VE" 'shortEdge) "VF") nil
"cutClass" ("V2D" ("V2E" 'shortEdge) ("V2E" 'longEdge) "V2F") nil )
'sameNet
'paraOverlap 0.001
'cutClassProfile
(( "cutClass" (("VE" 'shortEdge) ("VE" 'longEdge)) nil
"cutClass" ("V2D" ("V2E" 'shortEdge) ("V2E" 'longEdge) "V2F") nil
)
(
(("VE" 'shortEdge) ("V2D" 'shortEdge)) 0.02
(("VE" 'shortEdge) ("V2D" 'longEdge )) 0.02
(("VE" 'shortEdge) ("V2E" 'shortEdge)) 0.00
(("VE" 'shortEdge) ("V2E" 'longEdge )) 0.00
(("VE" 'shortEdge) ("V2F" 'shortEdge)) 0.02
(("VE" 'shortEdge) ("V2F" 'longEdge )) 0.02
(("VE" 'longEdge ) ("V2D" 'shortEdge)) 0.00
(("VE" 'longEdge ) ("V2D" 'longEdge )) 0.00
(("VE" 'longEdge ) ("V2E" 'shortEdge)) 0.00
(("VE" 'longEdge ) ("V2E" 'longEdge )) 0.02
(("VE" 'longEdge ) ("V2F" 'shortEdge)) 0.00
(("VE" 'longEdge ) ("V2F" 'longEdge )) 0.00
)
)
0.15
)
  (
(("VD" 'shortEdge) ("V2D" 'shortEdge)) 0.2
(("VD" 'shortEdge) ("V2D" 'longEdge )) 0.2
(("VD" 'shortEdge) ("V2E" 'shortEdge)) 0.3
(("VD" 'longEdge ) ("V2D" 'shortEdge)) 0.2
(("VD" 'longEdge ) ("V2D" 'longEdge )) 0.2
(("VD" 'longEdge ) ("V2E" 'shortEdge)) 0.3
(("VE" 'longEdge ) ("V2E" 'shortEdge)) 0.4
(("VE" 'shortEdge) ("V2D" 'shortEdge)) 0.3
(("VE" 'shortEdge) ("V2D" 'longEdge )) 0.3
(("VE" 'shortEdge) ("V2E" 'shortEdge)) 0.4
(("VE" 'shortEdge) ("V2E" 'longEdge )) 0.4
(("VE" 'shortEdge) ("V2F" 'shortEdge)) 0.3
(("VE" 'shortEdge) ("V2F" 'longEdge )) 0.3
(("VF" 'shortEdge) ("V2E" 'shortEdge)) 0.3
(("VF" 'shortEdge) ("V2F" 'shortEdge)) 0.5
(("VF" 'shortEdge) ("V2F" 'longEdge )) 0.5
(("VF" 'longEdge ) ("V2E" 'shortEdge)) 0.3
(("VF" 'longEdge ) ("V2F" 'shortEdge)) 0.5
(("VF" 'longEdge ) ("V2F" 'longEdge )) 0.5
)
)
) ;spacingTables

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

V2D

V2E

V2F

SE

LE

SE

LE

SE

LE

50

50

50

100

100

100

V2E

SE

50

0.02

0.02

0.0

0.0

0.02

0.02

LE

100

0.0

0.0

0.0

0.02

0.0

0.0

For square cuts, V2D and V2F, 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 with cutClass and cutClassSizeBy

The spacing between cut shapes on layers Via1 and Via2 is defined as follows:

(Via2)

W3

L3

W4

L4

(Via1)

0.1

0.1

0.2

0.2

W1

0.1

0.15

0.15

0.20

0.20

L1

0.1

0.15

0.15

0.20

0.20

W2

0.1

0.15

0.15

0.20

0.20

L2

0.2

0.20

0.20

0.25

0.25

The 'cutClassSizeBy value applied to various cut edges is as follows:

Via1

Via2

W/L

0.1   0.1

0.1   0.2

0.1   0.1

0.2   0.2

Size by

0.01

0.01

0.01

0.01

0.0

0.0

0.01

0.01

Example 4: minCutClassSpacing with cutClass and nonZeroEnclosure

The constraint applies only if the Via1 via cut has non-zero Metal2 enclosure.


Return to top
 ⠀
X