• 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. Skill code to find floating vias

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 144
  • Views 14176
  • 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

Skill code to find floating vias

sgs9
sgs9 over 14 years ago
Is there any way to find floating vias in the layout by skill code?
  • Cancel
  • dmay
    dmay over 14 years ago

    You can use dbGetTrueOverlaps to find metal shapes that overlap each of your vias. This could be a very time consuming process if you are dealing with a large cell with lots of vias.

    If you are using 6.1.x, you can get your vias this way:
    vias = setof(x geGetEditCellView()~>vias x~>viaHeader~>viaDefName == "myvia1")

    If you are using 5.1.41, you can get your vias using something like this (the example below would also need to be tweaked to tread the vias as instances instead of vias):
    vias = setof(x geGetEditCellView()~>instances x~>cellName == "myvia1")

    If your vias are between metal1 and metal2, then you'll want to see first if metal1 overlaps the via and then if metal2 overlaps the via. To be most accurate, you'll need to get the dimensions of the metal inside the via before you check for overlaps. To keep this post simple, I'll show you the command if you simply check if the bounding box of the via overlaps the metal.

    procedure(floatingVias(@optional (cv geGetEditCellView()))
      let((vias m1Overlaps m2Overlaps)
        vias = setof(x cv~>vias x~>viaHeader~>viaDefName == "VIA1_STD")

        foreach(via vias
          m1Overlaps = dbGetTrueOverlaps(cv via~>bBox list("metal1" "drawing") 0:20)
          m1Overlaps = setof(x m1Overlaps !listp(x) || (listp(x) && car(x)~>objType!="stdVia"))
          m2Overlaps = dbGetTrueOverlaps(cv via~>bBox list("metal2" "drawing") 0:20)
          m2Overlaps = setof(x m2Overlaps !listp(x) || (listp(x) && car(x)~>objType!="stdVia"))
          cond(
            (!m1Overlaps && !m2Overlaps  printf("Floating via at %L\n" via~>xy))
            (!m1Overlaps  printf("via not covered by metal1 at %L\n" via~>xy))
            (!m2Overlaps  printf("via not covered by metal2 at %L\n" via~>xy))
          )
        )
      ) ;let
    ) ;proc

    Obviously, this is not very flexible as it is written (it assumes version 6.1). It could be improved by checking to see what layers are used in the via and check for overlaps on those layers. Notice that the results of dbGetTrueOverlaps need to be filtered to remove the metal in the vias themselves. Also, if your metal shapes for metal1 and metal2 are very different, you'll not want to use the bBox if the instance, but rather the bounding box of the actual metal in the vias transformed to the top level coordinates. The dbGetTrueOverlaps will return shapes that abut the given bBox, so they do not have to overlap.

    Derek

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • smitha31harsha
    smitha31harsha over 10 years ago
    hi, using dbGetTrueOverlaps(cv via~>bBox list("metal1" "drawing") 0:20) statement i assume it checks for the floating vias down the hierarchy of cells. I tried to use this kind of a statement to check for the floating vias but it is able to output the floating vias present only at the top level and not the ones that are present down the hierarchy.Please let me know what needs to be done in order to identify the ones that are present down the hierarchy --Regards
    • 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