• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. How to force VSR using Via Variants

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 125
  • Views 14810
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to force VSR using Via Variants

Kristof38
Kristof38 over 12 years ago

Hello community,

 I am trying to route a layout with VSR and I want it to use my customized vias instead of the standard ones which cause too many DRC jog errors.

Despite my overloaded constraints (see snapshot attached), VSR keeps placing its standard vias instead of mine.

 Is there anyone kind enough to have a look at my below routing tcl script?

 Thanks.

 Christophe.

Virtuoso version: virtuoso-6.1.5.500.14 -64

 TCL Routing Script:

 # **********************************
# * RDE Sequencer Generated Script *
# **********************************

# ************************************
# *      Initialize Step            *
# ************************************
source /usr/pack/cds-ic-6.1.5.500.14-da/tools/catena/rde/sequencer/scripting.step
::rdeScript::ReleaseSets
setvar db.user_namespace cdba
setvar db.allow_pin_to_pin_space_checking true
setvar db.save_empty_nets true
setvar db.load_lef_props false
setvar db.check_constraints_basics true
setvar db.connect_IO_pin_shapes true
setvar db.paths_as_routes false
setvar db.clearance_based_zoning false
setvar db.make_prboundary_blockage true
setvar db.save_topological_guides_only true
setvar db.zone_unplaced_instances false
setvar db.default_rule_spec_name Christophe_WA_Net
set libName  "cmg_try"
set cellName "comp_bist_eng_DAC_2v_4v"
set viewName layout
virtuoso_setup_default_rulespec -lib $libName -cell $cellName -view $viewName
set result [ read_db -lib $libName -cell $cellName -view $viewName -mode "a" -design_type devicelevel ]
if { $result == "oa:0" } {
    return false
}
set singleNets [ ::rdeScript::GetSingleNets ]
if { $::rdeScript::excludeSet != "" } {
    set singleNets [ not_sets -set1 $singleNets -set2 $::rdeScript::excludeSet ]
}
::rdeScript::SetWorkingSet $singleNets
set workingSet [ ::rdeScript::GetWorkingSet ]
set ::rdeScript::lockSet [ create_set ]
set ::rdeScript::lockSet [or_sets -set1 $::rdeScript::lockSet -set2 [find_net  -net_type { power ground }]]
set ::rdeScript::lockSet [or_sets -set1 $::rdeScript::lockSet -set2 [find_net  -net_type { clock }]]
set ::rdeScript::gotLockSet trueTaper
set_route_fix_status -set $::rdeScript::lockSet -status fixed -keep_existing_locked_or_fixed_status true
set_default_constraint_group -group Christophe_WA_Net
set_routespec_taper -taper_route_spec Christophe_WA_Taper

set_route_on_grid -on_grid false
set bottomRoutingLayer M1
set topRoutingLayer M3
set routingLayers [get_layers -material { metal poly } -routing true]
if { [lsearch -exact $routingLayers $bottomRoutingLayer] > [lsearch -exact $routingLayers $topRoutingLayer] } {
  set tempRoutingLayer M1
  set bottomRoutingLayer M3
  set topRoutingLayer $tempRoutingLayer
}
set limitRoutingLayers [lrange $routingLayers [lsearch -exact $routingLayers $bottomRoutingLayer]\
[lsearch -exact $routingLayers $topRoutingLayer]]
::rdeScript::SetLimitRoutingLayers $limitRoutingLayers
# Special blockage treatment is disabled
set cutClassNames [get_cut_class_names -lib $libName -cell $cellName -view $viewName]
#create_derived_vias -cut_layers existing -replace stdVias -std_via_def true -silent
#foreach cutClass $cutClassNames {
#    create_derived_vias -cut_layers existing -cut_class_names $cutClass -std_via_def true -cut_rows 1 -cut_columns 1 -silent
#}

puts "Running extraction"
extract_net_connectivity -start_level 1 -stop_level 32 -flatten_to_depth 2 -apply_pin_style_to_top_cell -flatten_all_lpps -extract_poly true

update_net_connectivity -set $workingSet

# ************************************
# *      Detail Route Step           *
# ************************************
set workingSet [ ::rdeScript::GetWorkingSet ]
setvar droute.snap_to_pin_center false
setvar droute.device_pattern 0
setvar droute.complete_all_guides false
setvar droute.punch_effective_shapes true
set drouteCommand "detail_route -dynamic_check_level 3 -check_level 3 -exclude_type { clock power ground }"
set spaceChar " "
set drouteCommand [ concat $drouteCommand $spaceChar [format "-set %s" $workingSet] ]
puts "Running detail route as $drouteCommand"
eval $drouteCommand

# **********************************
# *      Refinement Step           *
# **********************************
set workingSet [::rdeScript::GetWorkingSet ]
set searchAndRepairCmd "search_and_repair -close_opens -exclude_type { clock power ground }"
set spaceChar " "
set searchAndRepairCmd [ concat $searchAndRepairCmd $spaceChar [format "-set %s" $workingSet] ]
puts "Doing search and repair"
eval $searchAndRepairCmd
set routeOptimizeCmd "route_optimize -truncate_at_pins true"
set spaceChar " "
set routeOptimizeCmd [ concat $routeOptimizeCmd $spaceChar [format "-set %s" $workingSet] ]
puts "Doing route optimize"
eval $routeOptimizeCmd
set adjustViasCmd "adjust_vias -offset_via true -minarea -edgelength -numcuts"
set spaceChar " "
set adjustViasCmd [ concat $adjustViasCmd $spaceChar [format "-set %s" $workingSet] ]
puts "Adjusting vias"
eval $adjustViasCmd
set spaceChar " "
set fixErrorsCmd [concat fix_errors -error_types \{ minarea minedge minenclosed minwidth numcut \}   [format "-set %s" $workingSet] ]
puts "Fixing errors"
eval $fixErrorsCmd
set routeOptimizeCmd "route_optimize -maximize_cuts useMaxRule -max_iterations 0 -V false"
set spaceChar " "
set routeOptimizeCmd [ concat $routeOptimizeCmd $spaceChar [format "-set %s" $workingSet] ]
puts "Doing final route optimize"
eval $routeOptimizeCmd
puts "checkpointing the design after refinement"
checkpoint
set ::rdeScript::didSaveOrCheckpoint true

# *************************
# *      Finalize         *
# *************************
::rdeScript::UnsetLimitRoutingLayers
puts "checkpointing the design after finalize"
checkpoint
set ::rdeScript::didSaveOrCheckpoint true
::rdeScript::CheckpointAtEndOfRunIfNeeded
close_db -no_prompt
rdeScript::ReleaseSets

constraints snapshot:

  • constraints.JPG
  • View
  • Hide
  • Cancel
Parents
  • Kristof38
    Kristof38 over 12 years ago

    Colin,


    Thanks for your reply. I will try out what you advised. 


    Christophe. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Kristof38
    Kristof38 over 12 years ago

    Colin,


    Thanks for your reply. I will try out what you advised. 


    Christophe. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information