• 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. Digital Implementation
  3. How to force sroute of Innovus to go to the highest layer...

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 91
  • Views 4304
  • 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 sroute of Innovus to go to the highest layer before routing PG-pins?

FormerMember
FormerMember over 2 years ago

Dear community

I am using Innovus version 21.10 to implement a digital design in a 180nm process with 6 metal layers.
Layer 1,3,5 are horizontal routing layers, and layer 2,4,6 are vertical routing layers consequently. Layer 5 and 6 shall  be used exclusively for the power grid and power routing.
Currently, I am having the issue that the Special Route (sroute) seems to prefer using lower layers for routing e.g. PG-pins of IP blocks before connecting them to the power grid or power ring.s

Consider the following example: Here, an IP block called i0_xfab_mems/i0_XSPRAMVLP_512X22_M2P_ECC is surrounded by a power ring, which is located at layer 5 and 6. The PG-pins are on layer 3. Now I would like the tool to go to the 6th layer before routing to the nearby power ring, i.e. placing vias immediately on top or in front of the pins such that the space in front of the block can be used for routing. Note that the IP block has blockages up to layer 4 (not visible in the picture), but the blockage leaves enough space at the border such that nets and vias could be placed, theoretically.

The power ring was created using

innoivus > selectInst i0_xfab_mems/i0_XSPRAMVLP_512X39_M2P_ECC

innovus > addRing -nets {vddd vssd} -type block_rings -around cluster -layer {top MET5 bottom MET5 left METTP right METTP} -width {top 12 bottom 12 left 12 right 12} -spacing {top 2 bottom 2 left 2 right 2} -offset {top 20 bottom 20 left 2 right 2}

and the stripes on top of the block were created with

innovus > addStripe -nets  {vddd vssd} -layer METTP -direction vertical -width pin_width -over_pins 1 -pin_layer MET3 -over_power_domain 1 -start_from left

The sroute command was executed as follows:

innovus > sroute -connect {blockPin} -blockPinTarget {blockring} -nets {vddd vssd} -blockPin all -deleteExistingRoutes -allowLayerChange 1

which yields the result in the picture above. If I now restrict the routing layers by setting -layerChangeRange {MET5(5) METTP(6)} the tool simply refuses to route any PG-pins. I have tried playing around with the layerChangeRange, blockPinLayerRange, crossoverViaLayerRange, and targetViaLayerRange argument, but none of these seem to make a difference.

How can I set a preferred rounting layer or force sroute to go to the two highest layers before doing any routing?

Thank you for any suggestions.

  • Cancel
  • DimoM
    DimoM over 2 years ago

    Hi,
    I find it hard to figure out the exact situation from the snapshot, but I think you expect a bit too much from sRoute.
    You can try to create the stripes you need on M6 above the block and drop vias towards the memory from there.

    - Dimo

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • FormerMember
    FormerMember over 2 years ago in reply to DimoM

    Hi Dimo

    Thank you for your reply.

    This is a possible workaround, but how can I prevent Innovus from placing said stripes outside of the block ring? In my case, the IP block has many PG-pins close to each other, resulting in a very dense power grid if I connect all of them with stripes. As a result, the nanoroute has a hard time finding a suitable solution due to the many vias between the rows and the power grid.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DimoM
    DimoM over 2 years ago in reply to FormerMember

    You can control the area where stripes are created with the addStripe -area and -area_blockage switches.
    Also if there are too many dropped vias, it should be possible to remove some of them with the trim_pg command.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

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