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

minSpacing (One layer)

spacings(
( minSpacing tx_layer 
 ['inLayerDir tx_layer2]
 [{'horizontal | 'vertical | 'diagonalOnly} ['eolWidth f_eolWidth]]
 ['sameNet ['PGNet] | 'sameMetal]
 ['sameMask]
 ['ignoreShapesInRanges ((("width"))(g_ignoreTable))] 
 ['insideLayers (tx_layer3 tx_layer4 … tx_layerN)
  ['insidePurposes (t_purpose1 t_purpose2 … t_purposeN)]
  | 
  'outsideLayers (tx_layer3 tx_layer4 … tx_layerN)
  ['outsidePurposes (t_purpose1 t_purpose2 … t_purposeN)]
 ]
 ['cornerAllowed]
 ['length f_length]
 ['intersectLayers (tx_layer2 tx_layer3 ... tx_layerN)]
 f_spacing ['manhattan] 
)
     ( minSpacing tx_layer 
 ['area f_maxArea]
 f_spacing ['manhattan] 
)
) ;spacings
spacingTables(
( minSpacing tx_layer
 (( "width" nil nil ["width" | "length" nil nil] )
  ['inLayerDir tx_layer2]
  [{'horizontal | 'vertical | 'diagonalOnly} ['eolWidth f_eolWidth]]
  ['sameNet ['PGNet] | 'sameMetal] 
  ['sameMask
  |
   [{'mask1 | 'mask2 | 'mask3} ['ignoreIntermediateShapes]]
  ]
  ['exceptEolWidth f_eolWidth]
  ['ignoreShapesInRanges ((("width"))(g_ignoreTable))]
  ['insideLayers (tx_layer3 tx_layer4 … tx_layerN)
   ['insidePurposes (t_purpose1 t_purpose2 … t_purposeN)]
  |
   'outsideLayers (tx_layer3 tx_layer4 … tx_layerN)
   ['outsidePurposes (t_purpose1 t_purpose2 … t_purposeN)]
  ]
  [f_default]
 )
 (g_table) ['manhattan]
)
     ( minSpacing tx_layer
 (( "twoWidths" nil nil "length" nil nil )
  ['inLayerDir tx_layer2]
  [{'horizontal | 'vertical | 'diagonalOnly} ['eolWidth f_eolWidth]]
  ['sameNet ['PGNet] | 'sameMetal] 
  ['sameMask]
  ['fillConcaveCorner f_fill]
  ['ignoreShapesInRanges ((("width"))(g_ignoreTable))]
  ['insideLayers (tx_layer3 tx_layer4 … tx_layerN)
   ['insidePurposes (t_purpose1 t_purpose2 … t_purposeN)]
  |
   'outsideLayers (tx_layer3 tx_layer4 … tx_layerN)
   ['outsidePurposes (t_purpose1 t_purpose2 … t_purposeN)]
  ]
  [f_default]
 )
 (g_table) ['manhattan]
)
) ;spacingTables

Specifies the minimum orthogonal spacing required between two adjacent shapes on the specified layer. The required spacing can be dependent on the direction in which the spacing is measured, on the width of the wider of the two shapes, on the width of both the shapes, or on the width of the shapes and the parallel run length between them.

The width of a shape is defined as the smaller of the shape's two dimensions.

If the 'eolWidth parameter is specified, the constraint applies to edges with width greater than or equal to eolWidth.

Other optional parameters determine whether the constraint applies to a particular connectivity type or to shapes on power or ground nets. The constraint can also be applied to shapes on the same mask.

If two shapes on the specified layer are overlapped by a single shape on another layer, you can optionally specify this second layer to indicate the direction in which the constraint applies. This is useful if the structures in the design can be used at various rotations. For example, in the figure below, spacing direction for Metal2 is specified as vertical; therefore, spacing between Metal1 shapes is measured in the vertical direction. If this structure is now rotated by 90 degrees, the spacing between Metal1 shapes, after rotation, would be measured horizontally.

In some advanced processes, the spacing between the sides of shapes when those shapes are drawn in the non-preferred direction must be greater than the regular spacing. For example, the preferred routing direction for Metal3 is vertical. Therefore, the spacing measured horizontally (between vertical Metal3 shapes) must meet the regular spacing requirement, and the spacing measured vertically (between horizontal Metal3 shapes) must be greater than the regular spacing.

The spacing measured between two end-of-line edges or between an end-of-line edge and a side edge is determined by an end-of-line constraint (for example, minEndOfLineSpacing), instead of minSpacing. The width of an end-of-line edge is less than eolWidth and the width of a side edge is greater than or equal to eolWidth.

Values

tx_layer

The layer on which the constraint is applied.

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

f_spacing

The minimum spacing required between two shapes.

"width" nil nil ["width" | "length" nil nil]

This identifies the index for table.

"twoWidths" nil nil "length" nil nil

This identifies the index for table.

g_table

The format of a 1-D table is as follows:

(f_index f_value

)

where, f_index is the width of the wider of the two shapes and f_value is the minimum spacing that applies when the width is greater than or equal to the corresponding index.

The format of a 2-D table is as follows:

( (f_index1 f_index2) f_value

)

where,

  • f_index1 and f_index2 both represent widths (of the two shapes), or f_index1 is the width of the wider of the two shapes and f_index2 is the parallel run length between the two shapes.
  • f_value is the minimum spacing that applies when the width and parallel run length are both greater than or equal to the corresponding indexes.
If twoWidths is specified, the lookup table establishes the minimum spacing between a pair of shapes based on the widths of both shapes and the parallel run length between them. Additionally, the widths and the parallel run length must be greater than the corresponding indexes (and not greater than or equal to).
In a spacing table, all values should be explicitly specified. When a value is not specified, the default value f_default is used.

Type: A 1-D table specifying floating-point width and spacing values, or a 2-D table specifying floating-point width, parallel run length, and spacing values

Parameters

'inLayerDir tx_layer2

  

The constraint applies in the direction of this layer.

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

'horizontal | 'vertical | 'any | 'diagonalOnly

The direction in which the constraint applies.

  • 'horizontal: The constraint applies only in the horizontal direction.
  • 'vertical: The constraint applies only in the vertical direction.
  • 'any: The constraint applies in both horizontal and vertical directions. This is the default value.
  • 'diagonalOnly: (Virtuoso Layout Suite EXL and higher tiers) The constraint applies between a diagonal wire to any wire.

Type: Boolean

'eolWidth f_eolWidth

The constraint applies only if the width of an edge is greater than or equal to this value.

This parameter must be used in conjunction with the direction parameter.

'sameNet ['PGNet] | 'sameMetal

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

  • 'sameNet: The constraint applies only to the shapes on the same net.
  • 'PGNet: The constraint applies only to the shapes on the same power or ground net.
  • 'sameMetal: The constraint applies only to the shapes that form a contiguous same-metal shape.

Type: Boolean

'sameMask

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

'mask1 | 'mask2 | 'mask3

  

(Virtuoso Advanced Node for Layout Only) The constraint applies only to the shapes on this mask.

Type: Boolean

'ignoreIntermediateShapes

(Virtuoso Advanced Node for Layout Only) The constraint applies between two shapes if they are on the specified mask, irrespective of whether a shape, gray or on any other mask, is present between them.

Type: Boolean

'area f_maxArea

The constraint applies between a shape with area less than this value and all other shapes on the specified layer.

No other parameters are permitted in combination with this parameter.

'ignoreShapesInRanges ((("width")) (g_ignoreTable))

(Virtuoso Advanced Node for Layout Standard) Spacing between two shapes on a layer is ignored if the width of the wider shape is greater than or equal to the specified width and the spacing between the two shapes is within the ignore range for that width.

The range of spacing values to be ignored must be less than the minimum spacing for the specified width.

Each row of ignoreTable has the following format:

f_width (g_range)

where,

  • f_width specifies the width.
  • g_range specifies the range of spacing values that are ignored.

Type: A 1-D table specifying floating-point width and spacing values

'exceptEolWidth f_eolWidth

(Virtuoso Advanced Node for Layout Standard) The constraint does not apply to edges with width less than this value.

'fillConcaveCorner f_fill

(Virtuoso Advanced Node for Layout Only) Before spacing is checked between a concave corner and a shape, the concave corner is filled with a triangular shape whose sides measured along the concave edges are equal to this value. Moreover, the spacing between this concave fill and a shape must be greater than or equal to the smallest spacing value specified in the table, provided this minimum spacing applies to all related shapes.

'insideLayers (tx_layer3 tx_layer4tx_layerN)
| 'outsideLayers (
tx_layer3 tx_layer4tx_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 (layer) overlap a shape on one of these layers (layer3 layer4layerN).
  • 'outsideLayers: The constraint applies only if the shapes on the specified layer (layer) overlap the region outside the shapes on one of these layers (layer3 layer4layerN).

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 or is specified (using g_table). Ensure that the default spacing value is sufficiently large to represent all missing spacing values in the table. Ideally, it should be greater than or equal to the largest specified spacing in the table.

'cornerAllowed

(Virtuoso Advanced Node for Layout Only) The constraint does not apply if the corners of the two shapes touch.

'length f_length

(Virtuoso Layout Suite EXL and higher tiers) The constraint applies only to shapes with length less than this value.

'intersectLayers (tx_layer2 tx_layer3 ... tx_layerN)

(Virtuoso Layout Suite EXL and higher tiers) The constraint applies only if the spacing gap is covered by shapes on one of the specified layers.

'manhattan

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

By default, the constraint uses Euclidean measurement.

Type: Boolean

Examples

Example 1: minSpacing (fixed value)

The minimum spacing on layer Poly1 is 0.5 and the minimum spacing on layer Metal2 is equal to the value of the technology parameter minspacing1.

spacings(
    ( minSpacing "Poly1" 0.5 )
    ( minSpacing "Metal2" techParam("minspacing1") )
) ;spacings

Example 2: minSpacing with width (1-D table)

The lookup table establishes the minimum spacing for a shape on Metal1 based on the width of the shape. For example, if the width of a shape is greater than or equal to 0.0005, but less than 0.5605, the minimum spacing is 0.12; if the width of a shape is greater than or equal to 0.5605, but less than 1.5005, the minimum spacing is 0.18; and so on.

spacingTables(
    ( minSpacing "Metal1"
     (( "width" nil nil ))
(
0.0005 0.12
0.5605 0.18
1.5005 0.50
3.0005 0.90
7.5005 2.50

)
)
) ;spacingTables

Example 3: minSpacing with width and width (2-D table)

The lookup table establishes the minimum spacing for a shape on Metal2 based on the widths of the two shapes. If the width of one shape is greater than or equal to 0.0005 and the width of another shape is greater than or equal to 0.0001, the minimum spacing is 0.10; if the width of one shape is greater than or equal to 0.0005 and the width of another shape is greater than or equal to 0.0010, the minimum spacing is 0.12; and so on.

spacingTables(
    ( minSpacing "Metal2"
     (( "width" nil nil "width" nil nil ))
(
(0.0005 0.0001) 0.10
(0.0005 0.0010) 0.12
(0.0005 0.0020) 0.14
(0.0005 0.0030) 0.16

)
)
) ;spacingTables

Example 4: minSpacing with width and length (2-D table)

The lookup table establishes the minimum spacing for Metal3 based on the width of the wider shape and the parallel run length (prl) between the two shapes. If the width and prl are both greater than or equal to 0.005, the minimum spacing is 0.12; if the width is greater than or equal to 0.0005 and the prl is greater than or equal to 0.5605, the minimum spacing is 0.18; and so on.

However, if you index into the table with a width less than the first width index, the first width index is used. Similarly, if you index into the table with a prl less than the smallest prl index (length), the constraint value for the smallest prl index is returned.

spacingTables(
    ( minSpacing "Metal3"
     (( "width" nil nil "length" nil nil ))
(
(0.0005 0.0005) 0.12
(0.0005 0.5605) 0.18
(0.0005 1.5005) 0.50
(0.0005 3.0005) 0.90
(0.0005 7.5005) 2.50
(0.1805 0.0005) 0.18
(0.1805 0.5605) 0.18
(0.1805 1.5005) 0.50
(0.1805 3.0005) 0.90
(0.1805 7.5005) 2.50
(1.5005 0.0005) 0.50
(1.5005 0.5605) 0.50
(1.5005 1.5005) 0.50
(1.5005 3.0005) 0.90
(1.5005 7.5005) 2.50
(3.0005 0.0005) 0.90
(3.0005 0.5605) 0.90
(3.0005 1.5005) 0.90
(3.0005 3.0005) 0.90
(3.0005 7.5005) 2.50
(4.5005 0.0005) 1.50
(4.5005 0.5605) 1.50
(4.5005 1.5005) 1.50
(4.5005 3.0005) 1.50
(4.5005 7.5005) 2.50
(7.5005 0.0005) 2.50
(7.5005 0.5605) 2.50
(7.5005 1.5005) 2.50
(7.5005 3.0005) 2.50
(7.5005 7.5005) 2.50
)
)
) ;spacingTables

The following table is a representation of the example above.

Spacing

length >=

0.0005

0.5605

1.5005

3.0005

7.5005

width >=

0.0005

0.12

0.18

0.50

0.90

2.50

0.1805

0.18

0.18

0.50

0.90

2.50

1.5005

0.50

0.50

0.50

0.90

2.50

3.0005

0.90

0.90

0.90

0.90

2.50

4.5005

1.50

1.50

1.50

1.50

2.50

7.5005

2.50

2.50

2.50

2.50

2.50

In the figure below, the width of the wider of the two shapes (W1) is 1.5005 and the parallel run length (L) between the two shapes is 2.5.

A comparison of W1 and L with the two sets of indexes provides a minimum spacing value of 0.5 — the minimum spacing value found at the intersection of row 3 (index = 1.5005) and column 3 (index = 1.5005).

Example 5: minSpacing with width and length and default spacing (2-D Table)

The lookup table establishes the minimum spacing for Metal1 based on the width of the wider shape and the parallel run length between the two shapes. The default value of 0.9 is used when a table entry is not specified, say, for (1.0 1.0), as shown below. The effective table entry for (1.0 1.0) in such a case would be 0.9.

spacingTables(
    ( minSpacing "Metal1"
     (( "width" nil nil "length" nil nil ) 0.9)
(
(0.1 0.5) 0.3
(0.1 1.0) 0.3
(0.1 2.0) 0.3
(1.0 0.5) 0.3
(1.0 2.0) 0.6
(2.0 0.5) 0.3
(2.0 1.0) 0.6
(2.0 2.0) 1.6
)
)
) ;spacingTables

The following table is a representation of the example above.

Spacing

length >=

0.5

1.0

2.0

width >=

0.1

0.3

0.3

0.3

1.0

0.3

?

0.6

2.0

0.3

0.6

1.6

The default value of 0.9 is used in place of the missing value indicated by the ? symbol in the table above.

Example 6: minSpacing with twoWidths and length (2-D table)

The lookup table establishes the minimum spacing for Metal1 based on the widths of both shapes and the parallel run length between them. A default minimum spacing value of 0.15 applies when no table entry applies.

spacingTables(
    ( minSpacing "Metal1"
     (( "twoWidths" nil nil "length" nil nil ) 0.15 )
(
(0.0 none) 0.15
(0.0 0.0 ) 0.20
(0.0 1.5 ) 0.50
(0.0 3.0 ) 1.00
     (0.25 none) 0.20
(0.25 0.0 ) 0.25
(0.25 1.5 ) 0.50
(0.25 3.0 ) 1.00
     (1.50 none) 0.50
(1.50 0.0 ) 0.50
(1.50 1.5 ) 0.60
(1.50 3.0 ) 1.00
     (3.00 none) 1.00
(3.00 0.0 ) 1.00
(3.00 1.5 ) 1.00
(3.00 3.0 ) 1.20
)
) 'ref "Metal4.Space.1, Metal4.S.2, Metal4.S.3, Metal4.S.4"
) ;spacingTables
The spacing table for twoWidths is symmetric, that is, if there are four rows corresponding to one width value, there must be four rows corresponding to each width value. Additionally, duplicate width-length pairs corresponding to different spacing values are allowed.

The following table is a representation of the example above.

Spacing

length >

none

0.00

1.50

3.00

width >

0.00

0.15

0.20

0.50

1.00

0.25

0.20

0.25

0.50

1.00

1.50

0.50

0.50

0.60

1.00

3.00

1.00

1.00

1.00

1.20

Scenario 1

In the figure below, the width of the first shape (W1) is 0.25 and the width of the second shape (W2) is 0.27. The parallel run length (L) between the two shapes is 0.1.

The table is looked up twice to locate the applicable spacing value. During the first pass, W1 and L are looked up horizontally, and, during the second pass, W2 and L are looked up vertically. During each pass, the last width and length index pair that satisfies both "W>width" and "L>length" is located in the table. For example,

The required spacing lies at the intersection of the row and column corresponding to the two widths and the parallel run length, as shown below:

width >

0.00

0.25

1.50

3.00

length >

none

0.00

1.50

3.00

width >

length >

0.00

none

0.15

0.20

0.50

1.00

W1/L

0.25

0.00

0.20

0.25

0.50

1.00

1.50

1.50

0.50

0.50

0.60

1.00

3.00

3.00

1.00

1.00

1.00

1.20

W2/L

Because the table is symmetrical, the same spacing value (0.20) is obtained if W1 is looked up vertically and W2 is looked up horizontally, as shown below:

width >

0.00

0.25

1.50

3.00

length >

none

0.00

1.50

3.00

width >

length >

0.00

none

0.15

0.20

0.50

1.00

0.25

0.00

0.20

0.25

0.50

1.00

W2/L

1.50

1.50

0.50

0.50

0.60

1.00

3.00

3.00

1.00

1.00

1.00

1.20

W1/L

Scenario 2

Next, assume that the width of the first shape (W1) is 0.30 and the width of the second shape (W2) is 1.60. The parallel run length (L) between the two shapes is 1.40.

Again, the table is looked up twice to locate the applicable spacing value. During the first pass, W1 and L are looked up horizontally, and, during the second pass, W2 and L are looked up vertically. During each pass, the last width and length index pair that satisfies both "W>width" and "L>length" is located in the table. For example,

The required spacing lies at the intersection of the row and column corresponding to the two widths and the parallel run length, as shown below:

width >

0.00

0.25

1.50

3.00

length >

none

0.00

1.50

3.00

width >

length >

0.00

none

0.15

0.20

0.50

1.00

0.25

0.00

0.20

0.25

0.50

1.00

W1/L

1.50

1.50

0.50

0.50

0.60

1.00

3.00

3.00

1.00

1.00

1.00

1.20

W2/L

Because the table is symmetrical, the same spacing value (0.25) is obtained if W1 is looked up vertically and W2 is looked up horizontally, as shown below:

width >

0.00

0.25

1.50

3.00

length >

none

0.00

1.50

3.00

width >

length >

0.00

none

0.15

0.20

0.50

1.00

0.25

0.00

0.20

0.25

0.50

1.00

W2/L

1.50

1.50

0.50

0.50

0.60

1.00

3.00

3.00

1.00

1.00

1.00

1.20

W1/L

Example 7: minSpacing with ignoreShapesInRanges

The spacing requirement can vary based on the width of adjacent shapes and the parallel run length between them. For example, the spacing between shapes must be at least 0.14 if the width of the wider of the two shapes is greater than or equal to 0.1 and the parallel run length between the shapes is greater than or equal to 0.08. The constraint does not apply between two shapes if the width of the wider shape is greater than or equal to 0.1 and the spacing between the two shapes is greater than or equal to 0.07 and less than 0.1.

Example 8: minSpacing with sameMask

The minimum spacing between two adjacent shapes must be 0.15 if the two shapes are on the same mask, and 0.1 otherwise.

Example 9: minSpacing with fillConcaveCorner

All concave corners must be filled by a triangle whose sides along the concave edges are equal to 0.04 before minimum spacing is checked. The minimum spacing requirement between shapes is 0.06, which also applies to the concave-corner fill. The spacing requirement can vary based on the width of adjacent shapes and is determined by looking up the spacing table. However, this non-minimum spacing requirement does not apply to the concave fill.

Example 10: minSpacing with area

The minimum spacing between two adjacent shapes must be 0.15 if at least one of the shapes has area less than 0.03.

Example 11: minSpacing with mask1 and ignoreIntermediateShapes

The spacing between two Metal1 shapes on mask1 must be greater than or equal to 0.3 if both shapes have width greater than or equal to 0.1. If a shape, gray or on any other mask, is present between them, it is ignored.

Example 12: minSpacing with intersectLayers

The constraint applies only if the spacing between the shapes on Implant1 is filled by shapes on either Implant2 or Implant3.

spacings(
    (minSpacing "Implant1"  
     'intersectLayers ("Implant2" "Implant3")
0.05
)
) ;spacings

Return to top
 ⠀
X