• 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 SKILL
  3. Cleaning up a layout view

Stats

  • Locked Locked
  • Replies 7
  • Subscribers 142
  • Views 17621
  • 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

Cleaning up a layout view

RK56
RK56 over 7 years ago

Hi,

I looking for a reliable way to clean up the layout for that following needs

1. Delete orphaned nets => Remove nets that are not attached to any physical shape

2. Delete orphaned terminals =>Remove terminals that are obsolete (not connected to any physical shape, mostly the old name of a renamed terminal)

3. Fix cell extent boundary => Sometimes some ZoomToFit  fits to a boundary which is much zoomed out than the actual layout. Which is mostly because of steiners or some unknown object (in non streamout layer) presence.

The following is the current solution I have but not sure if it is reliable

1. mapcar('dbDeleteObject setoff(x cv~>nets !x~>pin))

3. mapcar('dbDeleteObject cv~>steiners)

-Ramakrishnan

  • Cancel
Parents
  • mbracht
    mbracht over 7 years ago

    I forgot about the terminals...

    (foreach term (setof term cv~>terminals (not (caar term~>pins~>figs))) (dbDeleteObject term))

    not sure about the extent boundary though...sorry

    Max

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RK56
    RK56 over 7 years ago in reply to mbracht

    Max.

    Thank you. Your solution is more reliable than mine. I wonder why Cadence does not clean up these by default.

    -Ramakrishnan

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to RK56

    Hi Ramakrishnan,

    It does clean up by default (certainly VLS XL). One thing to remember however is that deleting nets which don't have any figures means you may be deleting the information that VLS XL uses to know what needs to be connected - there may be logical connections in the database (e.g. connections of the nets to instTerms) but no physical information yet, and if you remove the logical information then VLS XL won't know that a net needs connecting.

    Similarly terminals should get removed if the pins are removed - provided that the terminal is not supposed to be in the database (VLS XL also would keep the terminals there if the pin has not been placed yet).

    So be very careful about doing this kind of "clean up". Yes, steiners do seem to go a bit awry at times (although this seems to be better nowadays than in the past) which causes the "fit" not to work properly, but be cautious about removing connectivity information.

    Oh, and Max's code won't be very efficient for large designs because it's repeatedly building a list of the net names for all shapes as it iterates over each net. You could (I think) achieve the same thing with:

    mapcar('dbDeleteObject setof(net cv~>nets !(net~>pins || net~>figs)))

    If you wanted to ensure that logically connected nets were also preserved, you could do:

    mapcar('dbDeleteObject setof(net cv~>nets !(net~>instTerms || net~>term || net~>figs)))

    However, as I said above, I'd be cautious about doing that (it's quite possible that this also isn't covering every reasonable case where the connectivity should be preserved - I didn't think about it very hard).

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RK56
    RK56 over 7 years ago in reply to Andrew Beckett
    Andrew Beckett said:
    It does clean up by default (certainly VLS XL).

    Hi Andrew,

    Somehow I see the cleaning does not happen by default.  We have some poorly written scripts which fall prey for these stray nets and terminals.

    Andrew Beckett said:

    mapcar('dbDeleteObject setof(net cv~>nets !(net~>instTerms || net~>term || net~>figs)))

    I will consider the above line of script. Wondering why you dropped "nets~>pin" from the condition. Is that "net~>term" is inclusive of "net~>pin"?

    Thanks.

    -Ramakrishnan

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to RK56

    Ramakrishnan,

    If you really have some nets which aren't removed which should be, you should contact customer support.

    I removed the net~>pins because if there are any net~>pins then there would also be net~>term for the terminal associated with that pin. However, it is possible that you could have a terminal without a pin (if the pin has not been gen from sourced yet, or has been deleted temporarily). So checking for nets with a terminal as opposed to just those with pins is a safer check.

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RK56
    RK56 over 7 years ago in reply to Andrew Beckett

    Ok. Thank you.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • RK56
    RK56 over 7 years ago in reply to Andrew Beckett

    Ok. Thank you.

    • 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