• 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. Find virtually connected pins

Stats

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

Find virtually connected pins

FormerMember
FormerMember over 4 years ago

Hello,

I have a layout with multiple pins for the same net 'vss', but not all are physically connected. I marked them with a label 'vss:' to virtually connect them. Now I want to find all pins in a Skill script, which are physically connected. Is there a way, to check physical connectivity of two shapes?

Best regards

Paul 

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 4 years ago

    Hi Paul,

    How about using leMarkNet starting from one of the pins, and then using leSaveMarkNet to copy the resulting found shapes into a temporary cellView? Then you can check to see (by using dbGetOverlaps or dbShapeQuery) at each of the pin locations that there is a shape on that layer in the temporary cellView.

    That way you're using a built-in shape chaser which is pretty efficient at finding physically connected shapes (you may need to set up the options for it if not properly configured by default to have the right stop layers to prevent diffusion connections under the gate, or maybe you might want to limit which shapes are followed to only look at metal connections to avoid "weak" connections).

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • FormerMember
    FormerMember over 4 years ago in reply to Andrew Beckett

    Hello Andrew,

    thanks for your answer. I actually thought about the same method to use leMarkNet and compare the marker shape with my pins. However, I think this will not work, when the virtual pins overlap with metals on different layers (but this is probably a rare case). I hoped, it might be possible to use the layout extractor directly, but I could not find any suitable Skill function for it. I guess, if you also suggest this approach, there is probably no better or easier way.  

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to FormerMember

    Hi Paul,

    I'm not sure why you think this wouldn't work. If you use the leMarkNet from a coordinate within one of the pins, using ?startLpp to specify the layer-purpose of that pin, you will end up with the net traced physically from that location. If you then copy those shapes into a temporary cellView you only have shapes physically connected to that pin. Now if you do a dbShapeQuery/dbGetOverlaps of the other pin locations but using the temporary cellView, and restrict those dbShapeQuery/dbGetOverlaps to just the layer for the pin you're checking, then if there are any shapes found it must be physically connected to the first pin. If there is nothing underneath on the same layer as the pin, it's not physically connected.

    Of course, if you need to repeat this for multiple pins you'd need to erase the temporary cellView contents before doing this again (maybe by reopening in write mode - dbReopen(cv "w")).

    There is access to the extractor (lceExtract - there are in fact a few lceExtract functions for slightly different purposes) but I'm not sure that would help because if there was an open circuit on a net which was logically connected in the connectivity source, they would appear on the same net but wouldn't be physically connected (there would be markers to indicate opens, but I'm not sure that's going to help you much). This also requires everything to be XL compliant too, whereas leMarkNet doesn't require a connectivity source.

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to FormerMember

    Hi Paul,

    I'm not sure why you think this wouldn't work. If you use the leMarkNet from a coordinate within one of the pins, using ?startLpp to specify the layer-purpose of that pin, you will end up with the net traced physically from that location. If you then copy those shapes into a temporary cellView you only have shapes physically connected to that pin. Now if you do a dbShapeQuery/dbGetOverlaps of the other pin locations but using the temporary cellView, and restrict those dbShapeQuery/dbGetOverlaps to just the layer for the pin you're checking, then if there are any shapes found it must be physically connected to the first pin. If there is nothing underneath on the same layer as the pin, it's not physically connected.

    Of course, if you need to repeat this for multiple pins you'd need to erase the temporary cellView contents before doing this again (maybe by reopening in write mode - dbReopen(cv "w")).

    There is access to the extractor (lceExtract - there are in fact a few lceExtract functions for slightly different purposes) but I'm not sure that would help because if there was an open circuit on a net which was logically connected in the connectivity source, they would appear on the same net but wouldn't be physically connected (there would be markers to indicate opens, but I'm not sure that's going to help you much). This also requires everything to be XL compliant too, whereas leMarkNet doesn't require a connectivity source.

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • dmay
    dmay over 4 years ago in reply to Andrew Beckett

    I know this works because we used this same approach using our own shape tracer. In our case, we only wanted one pin per net. If pins were virtually connected, we wanted each pin. The code started at one pin, traced the shapes and removed any additional pins found on the traced net, resulting in one pin per connected set of shapes.

    Derek

    • 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