• 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. Net Tracing - Skill

Stats

  • Locked Locked
  • Replies 23
  • Subscribers 145
  • Views 12617
  • 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

Net Tracing - Skill

archive
archive over 18 years ago

Hello All ,

I have a script which I use to calculate a particular net's  Net Length, total net resistance, Capacitance (w.r.t ground).
But the drawback is that I have to select the entire Net before invoking the "NetLength" Function.

So I want a script which can trace the entire net and give a list of metals, vias, instances that
belong to this net. i.e I will select any one metal/instance/via  of a net and the code should trace the entire net and give me the desired o/p.

NOTE: Instances here refer to instances/mosaics of vias.

Thanks,
Sathya


Originally posted in cdnusers.org by rimser9
  • Cancel
Parents
  • archive
    archive over 18 years ago

    m27315,
    I put a lot of work into improving the performance and tracing supplies is definitely slow. However, my routine actually traces supplies faster than markNet. The main thing I did was limit dbGetTrueOverlaps to only check one layerName across all levels of hierarchy. It was only ever checking for overlaps on one metal layer at a time. I had a table of via names used in the design and the names of the layers that were connected by each via. Every via in our design contains the cut layer and the connecting metals.

    example:
    Via name    Connecting metals
    "VIA1"         list("metal1" "metal2")
    "VIA2"         list("metal2" "metal3")
    "CON"         list("poly" "metal1")

    Every overlapping metal shape was checked to see if it was inside one of the vias. If it was, then that shape was used to look for overlaps on both connecting metals. I never looked for overaps on the cut layers, otherwise things would be very slow. If someone accidentally flattens a via or contact, my routine will not trace connectivity through it. The trade off basically came down to speed or ability to handle flat data. I have considered adding an option to trace the flat data, but no one has ever needed it. They usually fix the flat vias instead.

    Basically, I start with a metal shape, break it into rectangles and run dbGetTrueOverlaps on each rectangle, only looking for shapes on the same layer. I have a filtering routine that ensures I throw out items I have already visited. When the overlaps routine returns a shape in a via cell, I then run a second dbGetTrueOverlaps on the connecting layer.

    My benchmarks on a supply signal in a medium sized block showed the following:
    Mark Net: 446 seconds
    My trace: 335 seconds (55 seconds in dbGetTrueOverlaps)

    My routine still has room for improvement.

    -Derek


    Originally posted in cdnusers.org by dmay
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • archive
    archive over 18 years ago

    m27315,
    I put a lot of work into improving the performance and tracing supplies is definitely slow. However, my routine actually traces supplies faster than markNet. The main thing I did was limit dbGetTrueOverlaps to only check one layerName across all levels of hierarchy. It was only ever checking for overlaps on one metal layer at a time. I had a table of via names used in the design and the names of the layers that were connected by each via. Every via in our design contains the cut layer and the connecting metals.

    example:
    Via name    Connecting metals
    "VIA1"         list("metal1" "metal2")
    "VIA2"         list("metal2" "metal3")
    "CON"         list("poly" "metal1")

    Every overlapping metal shape was checked to see if it was inside one of the vias. If it was, then that shape was used to look for overlaps on both connecting metals. I never looked for overaps on the cut layers, otherwise things would be very slow. If someone accidentally flattens a via or contact, my routine will not trace connectivity through it. The trade off basically came down to speed or ability to handle flat data. I have considered adding an option to trace the flat data, but no one has ever needed it. They usually fix the flat vias instead.

    Basically, I start with a metal shape, break it into rectangles and run dbGetTrueOverlaps on each rectangle, only looking for shapes on the same layer. I have a filtering routine that ensures I throw out items I have already visited. When the overlaps routine returns a shape in a via cell, I then run a second dbGetTrueOverlaps on the connecting layer.

    My benchmarks on a supply signal in a medium sized block showed the following:
    Mark Net: 446 seconds
    My trace: 335 seconds (55 seconds in dbGetTrueOverlaps)

    My routine still has room for improvement.

    -Derek


    Originally posted in cdnusers.org by dmay
    • 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