• 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. Need help in writing Skill for routing between two different...

Stats

  • Locked Locked
  • Replies 11
  • Subscribers 143
  • Views 16435
  • 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

Need help in writing Skill for routing between two different MOS

RAGHU2634
RAGHU2634 over 7 years ago

Hi,

I am starting with skill learning. Please help me with below mentioned query

*******

Two different mos have been spaced apart having their sources common. I want to join these sources using dbcreatepath(). How to extract co-ordinates of these two sources ? So i can use them to connect them using path.

Thanks,

Raghu

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago

    Raghu,

    Well, if you have the instID and termName of the terminal you're trying to locate, then you'd do something like this:

    term=dbFindTermByName(instID~>master termName)
    foreach(pin term~>pins
      foreach(fig pin~>figs
        center=centerBox(fig~>bBox)
        centerTopCoord=dbTransformPoint(center instID~>transform)
        ; now do something with this coordinate. It's transformed to the top level coordinate space.
      )
    )

    It rather depends on what you're trying to do and how ambitious you are. The above finds all the pin figures, finds the centre of the figure, and then transforms the coordinate up to the coordinate system of the containing layout. Note I didn't test the code, but it should be OK I think.

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RAGHU2634
    RAGHU2634 over 7 years ago in reply to Andrew Beckett

    Hi Andrew,

      dbFindTermByName(instID~>master "S"). This was giving error

    I tried out like this after seeing in virtuoso document which was having syntax like dbFindTermByName (d_cellView t_name)

    //////////////////////////////////////////////////

    cv=geGetEditCellView()

    dbFindTermByName(cv "s")   ******term names inside pcell are ("s" "g" "d")

    //////////////////////////////////////////////

    This is giving result as "NIL".

    I tried out similar function  dbFindNetByName(cv "vss") which is working well but I couldn't get access to bbox of pins through this.

    Can you help me in finding working ways of dbFindTermByName() through which i can access to "PINS" inside pcell & then transform co-ordinates to above hierarchy ?

    Thanks,

    Raghu

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to RAGHU2634

    Raghu,

    Well, if something gives an error, it's rather helpful to know what the error actually was - otherwise I have no idea what  you're doing wrong - that code should work. If the terminal was incorrectly named, it would return nil rather than an error. If you don't have a variable called instID, then that might give an error but that would be pretty clear then.

    The code using geGetEditCellView() will look for a pin called "s" in the current cellView - and I assume the current cellView is the containing layout and so is unlikely to have a terminal called "s" - you're looking for a terminal called "s" or "S" on one of the instances within the design.

    So please give a picture with details of what you tried and what the error was. Otherwise I'm having to guess in the dark. 

    Regards,

    Andrew.

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

    Hi Andrew,

    I will reply to your comments

    If you don't have a variable called instID, then that might give an error but that would be pretty clear then.

    Yeah. I don't have a variable called instID , I was assuming instID as  something like this  instID=geGetSelSet();    Hence it was giving error.

    Now Is there a way to workout your code in other way ?

    The code using geGetEditCellView() will look for a pin called "s" in the current cellView - and I assume the current cellView is the containing layout and so is unlikely to have a terminal called "s"

    You are correct . This will look for terms or pins in current layout window while there is no such pin.  I was supposed to find for a pin inside p-cell which is not working in the way I tried out

    Thanks,

    Raghu

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to RAGHU2634

    You either need to select the instance and then do:

    instID=car(geGetSelSet())

    (the car is needed because geGetSelSet returns a list of selected items, and the code I gave only needs the first). Alternatively use the approach suggested by Matthias (his post seems to have vanished, so I assume he deleted it?) which was to use dbFindAnyInstByName to find the instance id if you know what the name of the instance is:

    instID=dbFindAnyInstByName(geGetEditCellView() "M0") ; whatever the instance name is called is the second argument.

    Regards,

    Andrew.

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

    Hi Andrew,

    Thank you . The code was working if P-cell is having only one finger . I am able to get exactly what i wanted.  what if my instance is multiple fingered but still i will get only one co-ordinate. Can you help me in proceeding further with multiple fingered devices? i.e; identifying co-ordinates of same terminal with multiple fingers

    Thanks,

    Raghu

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

    Hi Raghu,

    The code I gave should actually return the coordinates of multiple pins if the pins are strongly connected or weakly connected. What it won't do is return the coordinates for must-connected terminals (because the terminals have different names). Because I don't know what you're dealing with, can you use this code:

    procedure(abPinInfo(@optional (cellView geGetEditCellView()))
      foreach(term cellView~>terminals
        printf("TERM %L NAME %L MUSTJOIN %L PHYSONLY %L\n" term term~>name term~>mustJoinTerms term~>physOnly)
        foreach(pin term~>pins
          printf(" PIN %L NAME %L\n" pin pin~>name)
          foreach(fig pin~>figs
            printf(" LAYER %L CENTER %L\n" fig~>lpp centerBox(fig~>bBox))
          )
        )
      )
      t
    )

    Then call abPinInfo(instID~>master) and post the results here (for your multi-finger instance)?

    Thanks,

    Andrew.

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

    Hi Andrew,

    Thank you so much for u r help !! I am trying to locate these co-ordinates and drop via's on these & connect common terminals i.e; common nets between devices. I will explain you about the progress

    Thanks,

    Raghu

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RAGHU2634
    RAGHU2634 over 7 years ago in reply to Andrew Beckett

    Hi Andrew,

    I added transforming co-ordinates function to the above code & I am able to get the result,  similarly I want to append corresponding net names of each terminal  to the  below code, Is there a way to do this ?

    note : I want net names of that instance as in schematic. I generated instance to layout from schematic. For now  I am able to read the net names something like this

    inst~>conns~>net~>name  =>  ("vss" "vdd" "g")

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    procedure(abPinNetInfo(@optional (cellView geGetEditCellView()))
    foreach(term cellView~>terminals
    printf("TERM %L NAME %L MUSTJOIN %L PHYSONLY %L\n" term term~>name term~>mustJoinTerms term~>physOnly)
    foreach(pin term~>pins
    printf(" PIN %L NAME %L\n" pin pin~>name)
    foreach(fig pin~>figs
    printf(" LAYER %L CENTER %L\n CentreTopCoordinate %L\n netname %L\n  " fig~>lpp centerBox(fig~>bBox) dbTransformPoint(centerBox(fig~>bBox) instID~>transform) instID~>conns~>net~>name)
    )
    )
    )
    t
    )

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    Thanks,

    Raghu

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to RAGHU2634

    Raghu,

    The purpose of that code was just to help me understand what the structure of the pins on your device was. Trying to add instance-specific information into the code is going to just be confusing (and hard - because you're traversing the master at that point in the code - trying to tie that up to the instance is not going to be straightforward - and not particularly useful).

    Trying to guess what you're doing from partial information is not particularly productive. It would be far better for you to contact customer support so that somebody could have (say) a webex with you to understand what you're doing and what you're trying to do.

    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