• 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 for changing via.

Stats

  • Locked Locked
  • Replies 10
  • Subscribers 144
  • Views 19108
  • 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 for changing via.

Leonardo Vinci
Leonardo Vinci over 7 years ago

I want to write a skill code for changing vias. For eg: 
I will make 2 bindkeys, one for changing via to up metal level and other for changing via to down metal level. 

Below i am planning to change via M1V1M2 to via M2V2M3.

What am i planning to do is to select a via, and querying it to get its via definition name as shown below:

geGetSelSet()~>viaHeader~>viaDefName ........(1)                                                          =>("M1V1M2")

Now i planned to change this list(destructively) to the via definition since i want to change the via one metal level up: 

setcar(geGetSelSet()~>viaHeader~>viaDefName "M2V2M3") ............(2)                         =>("M2V2M3")

But nothing happens. After running code(2), when i again run code(1), it gives me code(1)'s output i.e ("M1V1M2"). 

I am doing wrong. Can you help?! 

Thanks!

Leonardo da Vinci

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

    Two things:

    1. In general, performing a destructive change on a  list returned from the database will not have an effect. That's because the list is a representation of the database values, not a pointer to the database itself.
    2. Specifically, you cannot change the type of via by changing properties of the via; you have to delete the via and create a new one (this is different from instances, where you can change the master attribute on the instance object).

    Regards,

    Andrew

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • Leonardo Vinci
    Leonardo Vinci over 7 years ago in reply to Andrew Beckett

    Regarding to your 1) and 2) point below code works for changing via without deleting the vias, as you told.  

    procedure(viachange2()

    cvId= geGetEditCellView()

    vias = geGetSelSet()

    leReplace(cvId vias list(list("via definition" "==" "M2V2M3")))

    Why is this working and not my code (which i started the thread with) is not working? 

    Also this code has problem, it doesn't take the DRC enclosures as we going high in metals causing DRC. Tha'ts why i am not using this one and trying to write my own in other way. But it works, and violates what you said in point 1) and 2). 

    Thanks! 

    Leonardo da Vinci

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

    Regarding to your 1) and 2) point below code works for changing via without deleting the vias, as you told.  

    procedure(viachange2()

    cvId= geGetEditCellView()

    vias = geGetSelSet()

    leReplace(cvId vias list(list("via definition" "==" "M2V2M3")))

    Why is this working and not my code (which i started the thread with) is not working? 

    Also this code has problem, it doesn't take the DRC enclosures as we going high in metals causing DRC. Tha'ts why i am not using this one and trying to write my own in other way. But it works, and violates what you said in point 1) and 2). 

    Thanks! 

    Leonardo da Vinci

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to Leonardo Vinci

    This does delete the via and add it again. It's just using a higher level layout editor function (rather than a db function) to do it. Unfortunately all it does is preserve all the other attributes on the via - it has no idea that the overlaps need changing (it's the same as doing the Tools->Find/Replace in the layout editor). If you look at the object id returned as car(geGetSelSet()) before and after you do the leReplace, you'll see it's a different object id.

    So this doesn't violate anything I said before. You probably need to use the via functions mentioned in a previous thread to compute the correct values for the new replacement via.

    Regards,

    Andrew.

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • Leonardo Vinci
    Leonardo Vinci over 7 years ago in reply to Andrew Beckett

    Yes, i tried and tested it. Thanks!

    • 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