Product Documentation
Virtuoso Space-based Router Command Reference
Product Version IC23.1, September 2023

fix_length

fix_length
[ -set d_setObj] 
[ -accordion_height f_micron ] 
[ -detour [ true | false ] ] 
[ -do_composite [ true | false ] ] 
[ -match_paths [ true | false ] ] 
[ -min_segment_length f_micron ] 
[ -multi_layer [ true | false ]  [ -triple_layer [ true | false ] ] ] 
[ -report [ true | false ] ] 
[ -reset_max_length f_micron ] 
[ -shift_pattern [ true | false ] ] 
[ -sink_driver [ true | false ] ] 
[ -start_distance f_micron ] 
[ -tune_pattern [ true | false ] ] 

Description

Controls the length of individual nets and/or matches the length of groups of nets, including differential pair nets, or groups of routes within a tolerance.

Nets must be detail routed before using this command.

Two types of length fixing are supported and each has specific requirements:

To match lengths at the composite level for groups of net pairs, use -do_composite true -multi_layer true.

Elongation methods can also be customized:

Arguments

-accordion_height f_micron

Controls the height (in microns) of an accordion pattern, measured centerline to centerline.

-detour [ true | false ]

If set to true, will attempt to use advanced techniques for lengthening. This can result in more detouring of wiring, and should only be used when normal lengthening techniques (-detour false) have failed.

Default: false

-do_composite [ true | false ]

  

If set to true, length matching is performed at the composite level for net pair groups. To be effective, this must be done before running pair_divide.

Default: false

-match_paths [ true | false ]

When true, will attempt to match routes on the same net between terminals.

Default: false

-min_segment_length f_micron

  

Prevents lengthening of segments that are shorter than or equal to this length.

-multi_layer [ true | false ]

  

If set to true with -triple_layer false, then elongation patterns can be generated in up to two metal layers. This is useful when wires, such as the power mesh, have already been routed and can obstruct elongation routing on a single layer. When set to false, elongation patterns can use only a single metal layer.

Default: false

-report

When set to true, reports on all nets that are evaluated.

Default: (false) Only violating nets are reported.

-reset_max_length f_micron

  

By default, the algorithm is iterative and permits length to be added to the longest net in order to converge. This argument limits the added length, past the initial routed length of the longest net, to the given value.

-set d_setObj

Operates on the net groups or nets in the set. If a net in the set is a member of a net group, all nets in the net group are operated on. By default,

  • If this argument is not given and net groups of type net_match exist, all nets in the net match groups are processed.
  • All nets for which routeMinLength is set will be processed.

-shift_pattern [ true | false ]

  

When true, permits patterns to be shifted to avoid minimum spacing violations with oversized vias.

Default: false

-sink_driver [ true | false ]

When true, will attempt to match routes on the same net between sink-driver terminals.

Default: false

-start_distance f_micron

  

Prevents elongation patterns from being inserted within this distance of pins and macros.

-triple_layer [ true | false ]

  

If set to true with -multi_layer true, then elongation patterns can be generated in up to three metal layers. This is useful when existing routing is congested and obstruct elongation routing. When set to false, elongation patterns cannot use three metal layers.

Default: false

-tune_pattern [ true | false ]

  

When true, post-process will attempt to meet length requirements by elongating accordion bumps. When false, post-processing is not performed.

Default: true

Examples

The following examples are for the fix_length command.

Relative Length Matching of Nets in a Set

The following example creates a net group of all nets whose names start with MATCHB, then detail routes the nets, and finally matches the lengths of the nets by elongating the shorter nets, within a tolerance of 1.0.

update_net_connectivity -all
set MATCHBset [find_net -name MATCHB*]
create_group -name MATCHB -set $MATCHBset -type net_match
# create a constraint group for the net_match group and initialize the new # constraint group with the constraints from the LEFDefaultRouteSpec create_constraint_group -name GM -type group2group set_constraint_group -default GM -net_group MATCHB copy_constraint -group LEFDefaultRouteSpec -to_group GM # Set the tolerance. If this constraint is not set, the default tolerance is used. set_constraint -group GM -constraint matchTolerance -Value 1.0 # route the nets detail_route # match/fix lengths fix_length -set $MATCHBset

Controlling the Length of a Single Net Using routeMinLength

The following example sets routeMinLength and routeMaxLength constraints for netA, checks the length of netA, then lengthens it, without allowing elongation on the Metal2 layer.

update_net_connectivity -all
detail_route
create_constraint_group -name GA
set_constraint_group -default GA -net netA
copy_constraint -group LEFDefaultRouteSpec -to_group GA
set_layer_constraint -layer Metal2 -group GA -constraint lengthPatternOff -BoolValue true
set_constraint -group GA -constraint routeMinLength -Value 75.0
set_constraint -group GA -constraint routeMaxLength -Value 77.0
check_length
fix_length

Controlling the Lengths of Nets in a Set Using routeMinLength

The following example sets routeMinLength and routeMaxLength constraints for the nets in the selected set, checks the lengths of the nets, then lengthens them, as needed.

update_net_connectivity -all
detail_route
create_constraint_group -name GA
set_constraint_group -default GA -set [get_selection_set]
copy_constraint -group LEFDefaultRouteSpec -to_group GA
set_constraint -group GA -constraint routeMinLength -Value 75.0
set_constraint -group GA -constraint routeMaxLength -Value 77.0
check_length -set [get_selection_set]
fix_length -set [get_selection_set]

Relative Length Matching of Net Pair Groups

The following example performs relative length matching at the composite level for two net pairs.

# define the net pairs
set c1nets [or_sets -set1 [find_net -name clk1n] -set2 [find_net -name clk1p]]
set c2nets [or_sets -set1 [find_net -name clk2n] -set2 [find_net -name clk2p]]
create_group -name c1_pair -set $c1nets -type net_pair
create_group -name c2_pair -set $c2nets -type net_pair
# create a net group for matching the net pairs create_group -name clkGroup -set [find_group -name c*_pair -type net_pair] -type net_match # create the constraint group create_constraint_group -name GC # assign the constraint group to the pairs set_constraint_group -default GC -net_group c2_pair set_constraint_group -default GC -net_group c1_pair set_constraint_group -default GC -net_group clkGroup # set constraint values by copying from existing, then setting indiv constraints copy_constraint -group LEFDefaultRouteSpec -to_group GC set_constraint -group GC -constraint lengthPatternRWAccordion -BoolValue false set_constraint -group GC -constraint lengthPatternAccordion -BoolValue false
# set the allowed Tolerance: all nets must be no more than 10% shorter than the
# longest net length
set_constraint -group GC -constraint msTolerance -FltValue 10
# set same net spacing to power pitch set_layer_constraint -layer M8 -group GC -constraint msMinLengthPatternPitch -hardness hard -Value 9.0 set_layer_constraint -layer M7 -group GC -constraint msMinLengthPatternPitch -hardness hard -Value 9.0 # disable elongation on all but M7 and M8 foreach layer {M1 M2 M3 M4 M5 M6 M9 MD} {   set_layer_constraint -layer $layer -constraint lengthPatternOff -BoolValue true -group GC}
set_constraint -group GC -constraint validRoutingLayers -hardness hard -LayerArrayValue {M7 M8}
set_constraint -group GC -constraint limitRoutingLayers -hardness hard -LayerArrayValue {M7 M8}
# Create the net pair topology pair_create_topology # route the composite nets global_route croute detail_route # match lengths on nets relative to the length of the longest net fix_length -do_composite -multi_layer true # divide composite nets, preserving the topology of the composite net pair_divide -preserve_topology true

Matching Lengths of Net Pairs Using Minimum and Maximum Route Lengths

The following example performs length matching at the composite level for two net pairs whose lengths must be greater than or equal to routeMinLength and less than or equal to routeMaxLength.

# define the net pairs
create_group -name c1_pair -set [or_sets -set1 [find_net -name clk1n -set2 [find_net -name clk1p] -type net_pair
create_group -name c2_pair -set [or_sets -set1 [find_net -name clk2n -set2 [find_net -name clk2p] -type net_pair
# create the constraint group create_constraint_group -name GC # assign the constraint group to the pairs set_constraint_group -default GC -net_group c2_pair set_constraint_group -default GC -net_group c1_pair # set constraint values by copying from existing, then setting indiv constraints copy_constraint -group LEFDefaultRouteSpec -to_group GC # set absolute min and max lengths set_constraint -group GC -constraint routeMinLength -Value 1472 set_constraint -group GC -constraint routeMaxLength -Value 1490 set_constraint -group GC constraint lengthPatternRWAccordion -BoolValue false set_constraint -group GC constraint lengthPatternAccordion -BoolValue false # set same net spacing to the power pitch set_layer_constraint -layer M8 -group GC -constraint msMinLengthPatternPitch -hardness hard -Value 9.0 set_layer_constraint -layer M7 -group GC -constraint msMinLengthPatternPitch -hardness hard -Value 9.0 # disable elongation on all but M7 and M8 foreach layer {M1 M2 M3 M4 M5 M6 M9 MD} {   set_layer_constraint -layer $layer -constraint lengthPatternOff -BoolValue true -group GC}
set_constraint -group GC -constraint validRoutingLayers -hardness hard -LayerArrayValue {M7 M8}
set_constraint -group GC -constraint limitRoutingLayers -hardness hard -LayerArrayValue {M7 M8}
# Create the net pair topology pair_create_topology # route the composite nets global_route croute detail_route # match lengths on nets using absolute routeMinLength and routeMaxLength fix_length -do_composite -multi_layer true # divide composite nets, preserving the topology of the composite net pair_divide -preserve_topology true

Related Topics

Specialty Route Commands

check_length


Return to top
 ⠀
X