Product Documentation
Virtuoso Space-based Router Constraint Reference
Product Version IC23.1, June 2023

minSpacing

Determines the minimum orthogonal spacing, edge-to-edge, required between two geometries on the same layer. Spacing can be specified as the minimum spacing in user units between any two adjacent geometries, as dependent on the widths of the two geometries and, optionally, the parallel run length between the two geometries. Spacing can apply to a specific direction (horizontal or vertical), to power and ground nets only, and can use Euclidean or Manhattan measurements.

Optional parameters determine whether the constraint applies dependent on the type of connectivity or whether the shapes belong to power or ground nets.

In some 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. Spacing between an end-of-line and another end-of-line or side-of-line would be determined by an end-of-line spacing rule rather than this rule.

minSpacing Quick Reference

Constraint Type

Layer

Value Types

Value, OneDTblValue, TwoDTblValue

Database Types

Design, Technology

Scope

net, route, Term, instTerm, blockage, net group, group2group, reflexive, transreflexive, interChild, design, foundry

Category

Spacing

Group Operators

AND, OR

Value Types

minSpacing constraints have the following value types:

Parameters

Examples

Example 1—minSpacing Fixed Value

In this example, the spacing between shapes must be greater than or equal to 0.10 user units on Metal2 as shown in the following figure.

Format Example

Tcl

set_layer_constraint -layer Metal2 -constraint minSpacing \
-hardness hard -Value .10

LEF

LAYER Metal2
TYPE ROUTING ;
SPACING 0.1 ;

Virtuoso

spacings(
(minSpacing "Metal2" 0.1)
)
Illustration for minSpacing Fixed Value

Example 2—minSpacing with 1D Table: Index width

This example establishes a lookup table that is used to set the minimum spacing for a shape on Metal2, based on the width of the shape as shown in the following figure.

Format Example

Tcl

set_layer_constraint -layer Metal2 -constraint minSpacing \
-hardness hard -row_name width \
-OneDTblValue {0.000 0.100 \
0.160 0.145 \
0.180 0.160 } \
-row_interpolation snap_down \
-row_extrapolation {snap_up snap_down} \
-col_interpolation snap_down \
-col_extrapolation {snap_up snap_down}

LEF

SPACING 0.1 ;
SPACING 0.145 RANGE 0.16 0.179 ;
SPACING 0.16  RANGE 0.18 10000 ;

Virtuoso

( minSpacing "Metal2"   
(( "width" nil nil ) )
(
0.0 0.1
0.16 0.145
0.18 0.16
)
)
Illustration for minSpacing OneDTblValue

Example 3—minSpacing with 2D Table: Indices width and width

This example sets the minimum spacing on Metal2 according to the widths of two shapes on Metal2.

The Virtuoso technology file ASCII data is interpreted the same as the Space-based Router and Chip Optimizer set_layer_constraint command with -row_interpolation and -col_interpolation set to snap_down. LEF width numbers are slightly different because the LEF data is interpreted the same as Space-based Router and Chip Optimizer set_layer_constraint command with -row_interpolation and -col_interpolation set to snap_down_inclusive. For more information, see Interpolation and Extrapolation Techniques.

Example 4—minSpacing with 2D Table: Indices width and length

This example sets the minimum spacing on Metal2 according to the maximum width of two shapes and the parallel run length between them.

Minimum spacing

0.15 μm

Either width > 0.25 μm and parallel length > 0.5 μm

0.20 μm spacing

Either width > 1.50 μm and parallel length > 0.5 μm

0.50 μm spacing

Either width > 3.00 μm and parallel length > 3.00 μm

1.00 μm spacing

Either width > 5.00 μm and parallel length > 5.00 μm

2.00 μm spacing

Format Example

Tcl

set_constraint_parameter -name widthLengthTableType -IntValue 0
set_layer_constraint -layer Metal2 -constraint minSpacing \
-hardness hard -row_name width -col_name length \
-TblCols {0.00 0.50 3.00 5.00} \
-TwoDTblValue {0.00 0.15 0.15 0.15 0.15 \
0.25 0.15 0.20 0.20 0.20 \
1.50 0.15 0.50 0.50 0.50 \
3.00 0.15 0.50 1.00 1.00 \
5.00 0.15 0.50 1.00 2.00 } \
-row_interpolation snap_down_inclusive \
-row_extrapolation {snap_up snap_down} \
-col_interpolation snap_down_inclusive \
-col_extrapolation {snap_up snap_down}

LEF

SPACINGTABLE 
PARALLELRUNLENGTH 0.00 0.50 3.00 5.00
WIDTH 0.00 0.15 0.15 0.15 0.15 #max width>0.00
WIDTH 0.25 0.15 0.20 0.20 0.20 #max width>0.25
WIDTH 1.50 0.15 0.50 0.50 0.50 #max width>1.50
WIDTH 3.00 0.15 0.50 1.00 1.00 #max width>3.00
WIDTH 5.00 0.15 0.50 1.00 2.00 ; #max width>5.00

Virtuoso

( minSpacing  "Metal2"
(( "width" nil nil "length" nil nil ) )
(
(0.0 0.0 ) 0.15
(0.251 0.501 ) 0.20
(1.501 0.501 ) 0.50
(3.001 3.001 ) 1.00
(5.001 5.001 ) 2.00
)
)
Illustration for minSpacing with 2D Table: Indices width and length

The Virtuoso Space-based Router set_layer_constraint command with -row_interpolation and -col_interpolation set to snap_down_inclusive uses the same width and length numbers as LEF, whereas the Virtuoso syntax is interpreted the same as the Virtuoso Space-based Router set_layer_constraint command with -row_interpolation and -col_interpolation set to snap_down. For more information, see Interpolation and Extrapolation Techniques.

Example 5—minSpacing with 2D Table: Indices twoWidths and length

This example sets a minimum spacing constraint between two shapes which depends on the width of both shapes and the parallel run length between the shapes with the following rules:

Minimum spacing

0.15 μm

Either width >0.25 μm and parallel length > 0.0 μm

0.20 μm spacing

Both width > 0.25 μm and parallel length > 0.0 μm

0.25 μm spacing

Either width > 1.00 μm and parallel length > 1.50 μm

0.50 μm spacing

Both width > 1.00 μm and parallel length > 1.50 μm

0.60 μm spacing

Either width > 2.00 μm and parallel length > 3.00 μm

1.00 μm spacing

Both width > 2.00 μm and parallel length > 3.00 μm

1.20 μm spacing

Format Example

Tcl

set_constraint_parameter -name widthLengthTableType -IntValue 2
set_layer_constraint -layer Metal2 -constraint minSpacing \
-hardness hard -row_name twoWidths -col_name length \
# width= 0.00 0.25 1.00 2.00 \
-TblCols { -0.001 0.00 1.50 3.00} \
-TwoDTblValue { 0 0.15 0.20 0.50 1.00 \
0.25 0.20 0.25 0.50 1.00 \
1.00 0.50 0.50 0.60 1.00 \
2.00 1.00 1.00 1.00 1.20 } \
-row_interpolation snap_down_inclusive \
-row_extrapolation {snap_up snap_down} \
-col_interpolation snap_down_inclusive \
-col_extrapolation {snap_up snap_down}

LEF

SPACINGTABLE TWOWIDTHS
# width= 0.00 0.25 1.00 2.00
# prl= none 0.00 1.50 3.00
WIDTH 0 0.15 0.20 0.50 1.00
WIDTH 0.25 PRL 0.0 0.20 0.25 0.50 1.00
WIDTH 1.00 PRL 1.50 0.50 0.50 0.60 1.00
WIDTH 2.00 PRL 3.00 1.00  1.00  1.00 1.20 ;

Virtuoso

spacingTables(
( minSpacing "Metal2"
( ( "twoWidths" nil nil "length" nil nil ) )
(
(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.00 none ) 0.50
(1.00 0.0 ) 0.50
(1.00 1.5 ) 0.60
(1.00 3.0 ) 1.00
(2.00 none ) 1.00
(2.00 0.0 ) 1.00
(2.00 1.5 ) 1.00
(2.00 3.0 ) 1.20
)
)
)

Example 6—minSpacing with oaArea

The following example sets minimum spacing for shapes with area less than 0.03 user units2 to 0.15 user units, otherwise a minimum spacing of 0.10 user units is required.

Format Example

Tcl

create_constraint_group -name spGrp -opType and
set_layer_constraint -layer Metal2 -constraint minSpacing \
-group spGrp -hardness hard -Value 0.10 -create true
set_constraint_parameter -name oaArea -AreaValue 0.03
set_layer_constraint -layer Metal2 -constraint minSpacing \
-group spGrp -hardness hard -Value 0.15 -create true

LEF

SPACING 0.10 ;
PROPERTY LEF58_SPACING
"SPACING 0.15 AREA 0.03 ;" ;

Virtuoso

spacings(
(minSpacing "Metal2"
'area 0.03
0.1 )
) ;spacings
Illustration for minSpacing with oaArea

Example 7—minSpacing with endOfLineWidth

The following wrong direction spacing rule indicates that the long/side edges between two horizontal wires must have a spacing of 0.12 µm if they are not EOL edges with length less than 0.15 µm and they have common parallel run length greater than 0. Otherwise, 0.10 µm is the minimum spacing.

Format Example

Tcl

create_constraint_group -name spGrp -opType and
set_layer_constraint -layer Metal2 -constraint minSpacing \
-group spGrp -hardness hard -Value 0.10 -create true
set_constraint_parameter -name oaSpacingDirection \
-StringAsIntValue horizontalDirection
set_constraint_parameter -name endOfLineWidth -Value 0.15
set_layer_constraint -layer Metal2 -constraint minSpacing \
-group spGrp -hardness hard -Value 0.12 -create true

LEF

DIRECTION VERTICAL ;
SPACING 0.10 ;
PROPERTY LEF58_SPACING
"SPACING 0.12 WRONGDIRECTION NONEOL 0.15 ;" ;

Virtuoso

spacings(
(minSpacing "Metal2"
'vertical
'eolWidth 0.15
0.12 )
) ;spacings
Illustration for minSpacing with endOfLineWidth

Example 8 —minSpacing with ignoreShapesInRanges

In this example, the shapes which are present in the range of greater than or equal to 0.07µm and less than 0.1µm for width >= 0.1µm are not considered for minimum spacing.

Minimum spacing

0.05μm

For PRL > -0.04 μm

0.06μm spacing

For either width > 0.1μm and PRL > 0.08μm

0.14μm spacing

Illustration for minSpacing with ignoreShapesInRanges
Format Example

Tcl

set_constraint_parameter -name ignoreShapesInRanges
-RangeArray1DTblValue {0.1 1 "[0.7 0.10)"}
set_layer_constraint -layer Metal2 -constraint minSpacing -hardness hard
-row_name twoWidths -col_name length
-TblCols { -0.041 -0.04 0.08}
-TwoDTblValue {0.0 0.05 0.06 0.06
0.1 0.05 0.06 0.14}
-row_interpolation snap_down_inclusive
-row_extrapolation {snap_up snap_down}
-col_interpolation snap_down_inclusive
-col_extrapolation {snap_up snap_down}

Related Topics

Spacing Constraints

minSpacing (one-layer)

check_space


Return to top
 ⠀
X