• 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. Grow/Shrink a Via to Path segment

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 143
  • Views 2407
  • 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

Grow/Shrink a Via to Path segment

snezana111
snezana111 over 9 years ago

Hello,


I'm still a novice in SKILL, and I'm trying to make a script/procedure that will change via's bBox to match the width of the path's that via is on. I have a problem when it comes to changing the list of bBox values and I have a more general problem when it comes to determing which via is on the corresponding path segment.

My starter point is that the user would select the vias and paths whose size needs to be changed.

So by far I have a piece of the code that renders paths and vias from selected objects:

selected = geGetSelSet()

vias = nil

paths = nil

foreach(object selected

case( object~>objType

(("stdVia") vias = cons(object vias))

(("pathSeg") paths = cons(object paths))

);case

);foreach

so far I get a correct list of vias and paths from the selected objects.

my next problem is what argument to use to determine which via "belongs" to which path? I looked over the paths~>?? and saw that there's a layer attribute I could use to match...but I don't see anything like that in vias properties.

I tried using dbGetOverlaps but I think I made things too complicated:

overlaps = nil

foreach(via vias

overlaps = cons(dbGetOverlaps(via~>cellView via~>bBox) overlaps)

);foreach

so I created  a list of lists that contain a via and the path with that via...

now, I need to run through overlaps and for each list in overlaps again determine which argument is a via and which is a path and check the path segments whether they are vertical or not by seeing their beginPt and endPt (they are vertical if beginPt (x) = endPt(x) symbolically (where x = caar(path~>beginPt)), analogous for horizontal path... )

haven't written this part specifically yet...

anyway, I have tried as a test to change the bBox value of a via using: (exemplary values!! )

via~>bBox = list((lowerLeftPt) (upperRightPt))

I get an error:

dbSetq - cannot set attribute - bBox

Then I tried the dbTransformBBox but I get the same error - I made a check with isBBox to see if I'm using bBoxes in the first place, and it all returned true.

Does it have to do with the fact that maybe I am not working with ROD vias? (I don't know anything yet about relative object designs and parametrized cells)

Of course, my goal is to make this universal, and I haven't even touched the issue of addressing angled paths and rotating the vias to correspond them for example...but, I imagine I'd be using the "orient" property from via~>orient, and somehow calculate the angle from the paths coordinates...

I'd appreciate if anyone can share a bit of an advice if there's any easier or quicker way to do this and what is it that I'm doing wrong with the bBox-es ?

  • Cancel
  • skillUser
    skillUser over 9 years ago

    Hi Jelena,

    A stdVia bBox is not directly adjustable, at least not by the bBox attribute.  It sounds as though you might want to increase the rows and/or columns that a specific via object has for the associated paths?  You would need to change the via parameters for the row and/or column attribute, but even then I don't think that you can do so directly, I believe that you would need to create a (sub)master for the viaDef that has the ovverideParams that you need and then make the via objects' viaHeader point to that master (I think).  You may be able to use the function lxComputeViaParams() to help determine the best DRC legal parameters, then create the via.  The way that I have done this kind of thing in the past is to determine the overrideParams and then pass this as an additional argument to dbCreateVia() when placing the via object.  In your case you could use the original via object to obtain the viaDef (through something like viaObject~>viaHeader~>viaDef, where viaObject might be obtained like this: select a via object in a layout and then type this in the CIW: viaObject = car(geGetSelectedSet()) ), and also use the coordinates of the via object (viaObject~>xy). You could create a new via object in the latter example, to replace the current existing one, rather than setting the via's viaHeader to point to a new sub-master.

    Hopefully this will help you?

    Best regards,

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • snezana111
    snezana111 over 9 years ago

    Thanks for the reply!

    If a via was from M1-M2 layer, I was actually thinking of adjusting it's layer's shapes to fit that of the M1 layer path or M2 layer path. So, I would be leaving the contact rows and columns intact.

    I am not familiar with master/submaster/parent in more detail and I don't have any experience with Pcells or ROD objects yet, but judging from your answer and the problem I think it's time I learn it...

    I just need some clarification to make sure I get things right - you've presented me with two options:

    One is to create a (sub)master with correct parameters and then make it point to the master via I am trying to change? When you say create you mean I would create a new stdVia using what function?

    And the other is to create a new via object (is that like creating a pcell?) with correct parameters and place it where the original was and delete the original?

    • 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