• 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 19101
  • 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
  • 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
  • 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
  • Deeksha D
    Deeksha D over 6 years ago

    Hi,

        Even iam facing the same issues while changing layout fom M2_M1 to M3_M2 and vice versa.. If you found the solution can you please share it??

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago in reply to Deeksha D

    As I explained above, you have to either use leReplace, or delete and re-add the via (dbDeleteObject() and then dbCreateVia()).

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Deeksha D
    Deeksha D over 6 years ago in reply to Andrew Beckett

    I used leReplace but while doing that it will take lot of time to change the via any solution for that?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago in reply to Deeksha D

    That's not very specific - you've not given any clue as to what exactly the problem is - how much is a lot of time? What precisely are you doing? Which version are you using? This really should be a new thread - see Guidelines for the Custom IC SKILL Forum

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Deeksha D
    Deeksha D over 6 years ago in reply to Andrew Beckett

    I am using a version of 6.1 after the bindkey it starts buffering until I press shift+c on the virtuoso then the via will be changed

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago in reply to Deeksha D

    That doesn't give anywhere enough information. "A version of 6.1" could mean one of IC6.1.0, IC6.1.1, IC6.1.2, IC6.1.3, IC6.1.4, IC6.1.5, IC6.1.6, IC6.1.7, IC6.1.8 - that's nine major releases over 13 years. You didn't give any indication on how you were calling leReplace - what are the arguments? 

    I suggest you contact customer support, so that at least an application engineer could have a web session with you to look at your data.

    Regards,

    Andrew

    • 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