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

viaSpacing

spacings(
( viaSpacing tx_cutLayer
 ['centerToCenter]
 ['sameNet | 'sameMetal | 'sameMetalOverlap | 'sameVia | 'sameMetalLayer     g_sameMetalLayer]
 ['exceptSamePGNet]
 ['cutClass {f_width | (f_width f_length) | t_name}
  ['sideParaOverlap] ['allCuts]
 ]
 [['exactAligned x_numAlignedCuts ['exactSpacing]]
 | ['noPrl ['horizontalEdge | 'verticalEdge]]
 | ['prl ['prlHorizontal | 'prlVertical] ['sameSide]]
 ]
 ['cutSizeRanges (f_xRange f_yRange)
  | 'cutSizeRanges (f_xRange1 f_yRange1 f_xRange2 f_yRange2)
 ]
 ['exceptOppositeCornerNeighbors]
 ['twoCuts x_twoCuts 
  ['twoCutsSpacing g_twoCutsSpacing] 
  ['sameNeighborCuts]]
 ['sameMask]
 ['minDistance f_lowDistance]
 ['exceptWithin f_exceptWithin]
 ['edgeExtension f_edgeExtension 'layer g_layer 
  {'horizontal | 'vertical}
  ['metalMask1 | 'metalMask2 | 'metalMask3 | 'metalMask4]
  ['width g_width]
  ['exceptLineEndGap g_exceptLineEndGap]
  ['anyCut] ['exceptSameMetalOverlap]
 ]
 'numCuts x_numCuts
 'distance f_distance
 ['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_spacing
)
) ;spacings

Specifies the required minimum spacing between adjacent via cuts. Many processes require a larger spacing between via cuts when a via cut has three or more adjacent via cuts. This ensures that geometries are not merged during fabrication.

A pair of via cuts is considered adjacent if the distance between the via cuts in any direction is less than the specified distance value. This includes the distance measured along a 45-degree angle. Additionally, a via cut must have a certain minimum number of adjacent via cuts for the constraint to apply.

Optional parameters determine whether the spacing is measured center-to-center or edge-to-edge, whether the constraint applies to a certain connectivity type, and whether the constraint applies to via cuts on power and ground nets. In some processes, the constraint applies only if the via cuts have a parallel run length less than zero, and, in other processes, the constraint applies only if the via cuts are exactly aligned. You can also use this constraint to define the spacing for a cut class.

The following figures illustrate the concept of adjacency. The distance between two adjacent via cuts must be less than or equal to distance, denoted by the black arrows in the figures below:

The following figures illustrate the different connectivity types:

Values

tx_cutLayer

The layer on which the constraint is applied.

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

f_spacing

The minimum spacing requirement that must be satisfied.

Parameters

'centerToCenter

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

Type: Boolean

'sameNet | 'sameMetal | 'sameMetalOverlap | 'sameVia | 'sameMetalLayer g_sameMetalLayer

The connectivity type. If connectivity type is not specified, the constraint applies to any connectivity type, including any two 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 contiguous same-metal shapes.
  • 'sameMetalOverlap: The constraint applies only if the via cuts are overlapped by a single 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.
  • 'sameMetalLayer: The constraint applies only if the via cuts are on contiguous same metal shapes on the layer specified by this parameter. This parameter is dependent on sameMetal and sameMetalOverlap.

Type: Boolean

'exceptSamePGNet

The constraint does not apply if the via cuts are on the same power or ground net.

Type: Boolean

'cutClass { f_width | (f_width f_length) | t_name }

The cut class to which the constraint applies, specified by width, by width and length, or by name (as defined in a cutClasses constraint).

  • f_width: Width
  • f_length: Length
  • t_name: Name of the cut class

'sideParaOverlap

The constraint applies only if the long edges of rectangular via cuts have parallel run length less than zero.

Type: Boolean

'allCuts

(Virtuoso Advanced Node for Layout Standard) The neighboring via cuts can belong to any cut class.

Type: Boolean

'exactAligned x_numAlignedCuts

  

The constraint applies if a via cut has at least this many exactly aligned, horizontally and/or vertically, adjacent via cuts, or if the number of adjacent via cuts is greater than or equal to the number of via cuts specified with 'numCuts, of which at least one is not exactly aligned.

The number of via cuts specified with this parameter must be greater than the number of via cuts specified with the 'numCuts parameter.

'exactSpacing

The spacing between the exactly aligned via cuts must be equal to the constraint value.

Type: Boolean

'noPrl

The constraint applies only between via cuts with parallel run length less than zero.

Type: Boolean

'horizontalEdge | 'verticalEdge

(Virtuoso Layout Suite EXL and higher tiers) The direction of the cut with parallel run.

'prl

(Virtuoso Layout Suite EXL and higher tiers) Specifies that the parallel run length (PRL) of two cuts is greater than the specified value.

'prlHorizontal | 'prlVertical

(Virtuoso Layout Suite EXL and higher tiers) Specifies the direction of the cut PRL.

'sameSide

(Virtuoso Layout Suite EXL and higher tiers) Specifies that the neighbor cuts should be on the same side of the checking cut fulfilling extension specified in the edgeExtension parameter that should also be specified.

'cutSizeRanges (f_xRange f_yRange)
| 'cutSizeRanges (
f_xRange1 f_yRange1 f_xRange2 f_yRange2)

(Virtuoso Advanced Node for Layout Standard) When two ranges, (xRange yRange), are specified, the constraint applies only if all the via cuts have xSpan in range xRange and ySpan in yRange.

When four ranges, (xRange1 yRange1 xRange2 yRange2), are specified, the constraint applies only if the first via cut has xSpan in range xRange1 and ySpan in yRange1, and the adjacent via cuts have xSpan in range xRange2 and ySpan in yRange2.

'exceptOppositeCornerNeighbors

(Virtuoso Advanced Node for Layout Standard) The constraint does not apply if the adjacent via cuts are on opposite corners.

Type: Boolean

'twoCuts x_twoCuts

(Virtuoso Advanced Node for Layout Standard) The constraint applies between two via cuts if each of these via cuts has this many adjacent via cuts, or if the number of adjacent via cuts is greater than or equal to the number of via cuts specified with 'numCuts.

The number of via cuts specified with this parameter must be less than the number of via cuts specified with the 'numCuts parameter.

'twoCutsSpacing g_twoCutsSpacing

(Virtuoso Advanced Node for Layout Only) The constraint applies only if the cuts specified with twoCuts have a spacing less than this value.

'sameNeighborCuts

(Virtuoso Advanced Node for Layout Only) The via cuts that meet the 'twoCuts requirement must have the same adjacent via cuts as neighbors.

Type: Boolean

'sameMask

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

Type: Boolean

'minDistance f_lowDistance

(Virtuoso Advanced Node for Layout Only) The distance between two via cuts must be greater than or equal to this value and less than distance for the via cuts to qualify as adjacent via cuts.

'exceptWithin f_exceptWithin

(Virtuoso Advanced Node for Layout Only) The constraint does not apply if all adjacent via cuts are at a distance less than this value.

'edgeExtension f_edgeExtension

(Virtuoso Advanced Node for Layout Only) The constraint applies only if the via cut has an extension less than the given value. The extension must be in the direction specified by 'vertical|'horizontal and on the layer specified by 'layer.

'layer g_layer

(Virtuoso Advanced Node for Layout Only) The constraint applies only for cuts on the specified layer. See also 'edgeExtension.

'horizontal | 'vertical

(Virtuoso Advanced Node for Layout Only) The constraint applies only if the extension is in the specified direction. See also 'edgeExtension.

'metalMask1 | 'metalMask2 | 'metalMask3 | 'metalMask4

(Virtuoso Layout Suite EXL and higher tiers) This parameter specifies on which metal mask, metalMask1, metalMask2, metalMask3, or metalMask4, the metal containing the cut is applied.

'width g_width

(Virtuoso Layout Suite EXL and higher tiers) The constraint applies only if a wire containing a cut that the extension condition is applied on has width less than or equal to g_width.

'exceptLineEndGap g_exceptLineEndGap

(Virtuoso Layout Suite EXL and higher tiers) The f_edgeExtension value does not apply if the lineEndGap constraint condition on the adjacent metal layer is met.

'anyCut

(Virtuoso Layout Suite EXL and higher tiers) Specifies that the extension condition is triggered on any triggering or neighbor cut.

'exceptSameMetalOverlap

(Virtuoso Layout Suite EXL and higher tiers) Specifies that neighbor cuts sharing a common metal are counted as individual cuts.

'numCuts x_numCuts

The constraint applies only if the number of adjacent via cuts is greater than or equal to this value.

If the number of via cuts is less than this value, the minSpacing constraint applies.

'distance f_distance

The constraint applies only if the distance between the via cuts is less than this value. All such via cuts are considered adjacent via cuts.

'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 (layer) overlap a shape on one of these layers (layer1 layer2layerN).
  • 'outsideLayers: The constraint applies only if the shapes on the specified layer (layer) 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)

Old Syntax

spacings( ( viaSpacing tx_cutLayer g_spacingDefinition ) … )

where,

g_spacingDefinition is specified as f_spacing or (x_numCuts f_distance f_spacing)

Example

spacings(
    ( viaSpacing "Via1" 0.5 )
 ( viaSpacing "Cont1" (3  1.5  1.0) )
) ;spacings

Examples

Example 1: viaSpacing with centerToCenter and noPrl

The center-to-center spacing between neighboring via cuts must be at least 0.21 if:

Example 2: viaSpacing with centerToCenter and exactAligned

The center-to-center spacing between neighboring via cuts must be at least 0.21 if:

Example 3: viaSpacing with centerToCenter and twoCuts

The center-to-center spacing between two neighboring via cuts must be at least 0.21 if each via cut has exactly two neighboring via cuts less than 0.2 away. Otherwise, there must be at least three adjacent via cuts.

Example 4: viaSpacing with centerToCenter, twoCuts, and sameNeighborCuts

The center-to-center spacing between two neighboring via cuts must be at least 0.21 if each via cut has at least three common neighboring cuts less than 0.2 away. Otherwise, there must be at least four adjacent via cuts.

Example 5: viaSpacing with cutClass and noPrl

The edge-to-edge spacing between 0.1x0.2 via cuts must be at least 0.14 if:

Example 6: viaSpacing with cutClass, allCuts, and noPrl

The edge-to-edge spacing between a 0.1x0.2 via cut and its neighboring via cuts must be at least 0.14 if:

Example 7: viaSpacing with cutClass and sideParaOverlap

The edge-to-edge spacing between neighboring via cuts must be at least 0.45 if:

Example 8: viaSpacing with cutSizeRanges and noPrl

The edge-to-edge spacing between via cuts must be at least 0.14 if:

Example 9: viaSpacing with cutSizeRanges and exceptOppositeCornerNeighbors

The edge-to-edge spacing between via cuts must be at least 0.14 for 0.15 xSpan x 0.1 ySpan via cuts if:

Example 10: viaSpacing with exceptWithin, numCuts, and distance

The edge-to-edge spacing between adjacent via cuts must be at least 0.06 if a via cut has two or more neighboring via cuts at a distance less than 0.07 away. The constraint does not apply if all adjacent via cuts are at a distance less than 0.05.

Example 11: viaSpacing with edgeExtension

The constraint applies only to cuts that have an extension of less than 0.05 in the horizontal direction on layer Metal2.

Example 12: viaSpacing with twoCutsSpacing

The spacing between two neighboring via cuts must be at least 0.2 if each via cut has at least 2 common neighboring cuts that are less than 0.2 away and have spacing less than 0.18. Otherwise, there must be at least 3 adjacent via cuts.

Example 13: viaSpacing with width

The constraint applies only to cuts that have an extension of less than 0.05 in the horizontal direction and width less than or equal to 0.06 on layer Metal2.


Return to top
 ⠀
X