• 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. Single Via Contact to Double Via Contact

Stats

  • Locked Locked
  • Replies 10
  • Subscribers 146
  • Views 17765
  • 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

Single Via Contact to Double Via Contact

zeroskills
zeroskills over 15 years ago

Hello,

Our default Via Contact is only single when instanciated, is it possible to have a skill code that can be attached to a bindkey that when a Via Contact is instanciated, it will be doubled?

Instead of using Window or Bindkey - "Create Contact" to double or multiple contact by changing Row or Column, is it possible to have a code when used with a bindkey automatically call a M1M2 Via Contact 1x2?

  • Cancel
  • babji
    babji over 15 years ago

    For IC5.1.41,

     

    If you have access to sourcelink then Solution ID:11115668 would be good start.

     

    or  

    Please make the following changes in the ".cdsenv" file to achieve the desired.
     
    1)  layout contactDefFromTechfile boolean nil
    2) layout contactColumns int 2
     
    Similarly you can use the below variables to do various default settings on the form :
    layout contactColumns int 2
    layout contactDefFromTechfile boolean nil
    layout contactDelX float 0.0  
    layout contactDelY float 0.0  
    layout contactResetDelXY boolean t  
    layout contactResetXYBias boolean t  
    layout contactResetRowCol boolean t  
    layout contactRows int 3  
     
    For details on the envsetval function please refer the below doc :
    http://sourcelink.cadence.com/docs/files/Release_Info/Docs/skuiref/skuiref5.0/skuiref.pdf

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • zeroskills
    zeroskills over 15 years ago

    Thanks. I did found the same solution afterwards, at first my .cdsenv wasn't loading properly so i thought something wrong until i load it directly from my .cdsinit.

    Thanks for the help. 

    On the same question,

    is it possible to  instanciate directly  a via contact without  opening or using  the "create contact"tool? for instance, by pressing "ctrl + 1" bindkey, i can instanciate a m1m2 via directly.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • babji
    babji over 15 years ago

    There are many ways we can automate this. most simple ways would be

     dbCreateSimpleMosaicByMasterName( deGetCellView()

                                                techGetTechLibName( ddGetObj( deGetCellView()->libName ))

                                                "via2"

                                                "symbolic"

                                                nil

                                                enterPoint()

                                                "R0"

                                                1

                                                 2

                                                 1.26

                                                 1.26

                )

     

    or

     

    procedure( ViaCreate( viaName )

    let( ( via2 llx lly urx ury ) 

     via2=dbOpenCellViewByType(

                                                techGetTechLibName( ddGetObj( deGetCellView()->libName ))

                                                viaName

                                                "symbolic"

                                        )

     urx = xCoord( upperRight( via2->bBox ))

     ury = yCoord( upperRight( via2->bBox ))

     llx = xCoord( lowerLeft( via2->bBox ))

     lly = yCoord( lowerLeft( via2->bBox ))

     dbCreateSimpleMosaic(

                        deGetCellView()

                        via2

                        nil

                        enterPoint()

                        "R0"

                         2

                         2

                        urx-llx

                        ury-lly

                )

    dbClose( via2) 

    );let

    );proc 

    Bind this to ctrl+ bindkeys. 

     

    or

     

    Auto-Contact feature is sufficient most of the times. In IC6 it works for paths & polygons. 

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • zeroskills
    zeroskills over 15 years ago

    Thanks Babji,

     

    I tried your 1st code. i guess there's missing something, it's not working.

    I relpaced "libName" - "our libName" (where the via is) and "via2" - "MT_AM" (which is the via i wanted to use)

    I also added this bindkey to the code: 

    hiSetBindKey("Layout" "Shift<Key>i" "dbCreateSimpleMosaicByMasterName()"

     

    Your 2nd code,

    same thing, i changed "libName" - "our libName" (where the via is), viaName - "MT_AM" (which is the via i wanted to use).

     

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • babji
    babji over 15 years ago

     

     Hi,

     

    Do this..

     

      procedure( ViaCreate( viaName )
     dbCreateSimpleMosaicByMasterName( deGetCellView()

                                       techGetTechLibName( ddGetObj( deGetCellView()->libName ))

                                       viaName

                                       "symbolic"

                                       nil

                                       enterPoint()

                                       "R0"

                                                1
                                                2
                                                3.24
                                                1.26
                                                  )
     );procedure

     hiSetBindKey("Layout" "Shift<Key>i" "ViaCreate( \"MT_AM\" )" )

     Yes you will get 2 vias when flattened. Obvious since you are placing an array of vias. I don't know how to place vias similar to  "Create Contact...".

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • PSRK
    PSRK over 14 years ago

     

    Hi,

     I'm using the below constraint in the vcar rules file  before exporting. The VCAR is placing single via while routing

        list( '("tsmc18rf" "M2_M1" "symbolic") t)

    But I dont know the rule to keep double contact/via in the router .Please help me.

     

    Thanks,

    Siva

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • harris3
    harris3 over 14 years ago

    Siva,

     I don't know about adding a constraint before starting the router.  I load a ".do" file in the router to make the routing of all of the nets use a 2x1 via array.  The do file contains the following command:

    select all nets
    define (class allnets (selected))
    unselect all nets
    circuit class allnets (use_via (use_array M2_M1 2 1))

    -Phil

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Arnaud31
    Arnaud31 over 12 years ago

      Hello,

     Searching how to have automatically double via with "create contact" tool, I found this forum and your solution. I've added the two lines as you explained and now I have automatically double via. Very good solution and easy change.

     But now, if I instanciate a M2M1 contact and then a M1Poly contact which contact spacing is different, the deltaX and Y are not updated as before. For information, the width and the length are automatically updated.

    Is it possible to have both automatically double via and the delta X/Y updated automatically?

       Thank you for your help.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    It's not clear which version you're using or which "two lines" you are referring to (to me anyway).

    I don't really understand your problem. Probably best to start a new thread rather than appending to an old one (as the Forum Guidelines clearly advise you not to do).

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Arnaud31
    Arnaud31 over 12 years ago

       Hello Andrew,

     I understand that a new discussion would be better but my problem is the same as explained one in this old topic and my message was a reply of  Babji one posted the 5th of february 2010.

     I will try to be clear.

    First, I use IC5.1.41.

    My question : Default via contacts are single when instanciated with Create Contact tool. Is there an easy solution to have automatically double via contact when instanciated?

    Solution : in this discussion, Babji suggested to make the following changes in the ".cdsenv" file.
    1) layout contactDefFromTechfile boolean nil
    2) layout contactColumns int 2

    So I did it from my .cdsinit and I have automatically double via but now if I change the contact type which contact spacing is different, the Delta X and Delta Y parameters are not updated to follow the technology rules.

    New question : is it possible to have automatically double via contact when instanciated with Create Contact tool without changing the other parameters that follow technology rules?

     

      Thank you for your help.

    • 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