• 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. pin information

Stats

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

pin information

LakshmanQual
LakshmanQual over 7 years ago

hi Team,

I had a list with some pins of layout.

I need to find those pin info of layout(only corresponding hierarchy and no need of lower instances) of the list like pin coordinates and pin layer. I tried using dbFindTermByName but its not taking names of the lists as input.

In those some pins might be repeated. So need co ordinates of all the locations.

Could you please help me in coding this?

pin1     layer    co-ordinates

pin2    layer     co-ordiantes

....

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago

    You'll need to expand a bit more. What precisely does your input look like? "A list with some pins of layout" doesn't really explain it very well...

    If it was terminal names:

    termNameList=list("inm" "inp" "outm" "outp" "VDD" "VSS")
    pinInfoList=nil
    foreach(termName termNameList
      term=dbFindTermByName(cvId termName)
      foreach(pin term~>pins
        foreach(pinFig pin~>figs
          pinInfoList=cons(list(termName pinFig~>layerName centerBox(pinFig~>bBox)) pinInfoList)
        )
      )
    )

    At the end pinInfoList would be (maybe) what you want. However, I may have completely misinterpreted your question, since it wasn't clear.

    Regards,

    Andrew.

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

    Hi Andrew,

    By doing some other operations, i had a list of pins which are in layout.( A kind of sub-set of all layout pins of that level).

    If cv=geGetWindowCellView() and myList = ("inp" "inm" "out" "VSS" "VDD")

    Is cvId = cv~>view or cv~>viewName ? Both are throwing error. Its showing arg#1 should be a database object (type templete="dt") for "dbFindTermByName"

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

    cvId=cv  ; (i.e. cvId=geGetEditCellView() or geGetWindowCellView())

    The error (and documentation for dbFindTermByName) should have made that pretty clear - even the quick help in cdsFinder:

    dbFindTermByName(
    d_cellView
    t_name
    )
    => d_term / nil

    Finds a terminal in a cellview.

    If you have a list of pins, are these the pin objects, or the pin figures? If it was pin figures, then you'd just do:

    foreach(mapcar pinFig listOfPinFIgs list(pinFig~>pin~>term~>name pinFig~>layerName centerBox(pinFig~>bBox)))

    As I said, asking a clear question is pretty important here - otherwise we have to guess what your data  looks like.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Marben
    Marben over 7 years ago

    Hi LakshmanQual,

    Here is my script to find pins in the layout.

    I hope this help.

    Best regards,

    Marben


    /*
    Purpose      : To get pins location in the layout.
    How to run   : 1. load("/home/eda/SKILL_VXL/pins_coordinates.il")
                   2. pins_coordinates()
    Date created : July 10, 2018
    Author       : Marben F. Orallo

    */

    procedure(pins_coordinates()
     csh("touch ./coordinates_pins.txt")
     outPort = outfile("./coordinates_pins.txt")
     ctr = 0
     cv = geGetEditCellView()
     pins = cv~>terminals~>pins
     pins_flatten = CCSflattenList(pins)
     pin_id = setof(x pins_flatten x~>name)
     fprintf(outPort "\n Pins location in the layout. \n")
     foreach( pin_id pin_id
      loc = centerBox(pin_id~>fig~>bBox)
      ;printf("\n Connection found, connection is not yet finish. %L %L" pin_id~>name loc)
      fprintf(outPort "\n %L %L %L" pin_id~>name pin_id~>fig~>lpp loc)
      ctr = ctr + 1
     ) ;for
     fprintf(outPort "\n\n ctr = %d" ctr)


    close( outPort)
    sleep(1)
    system("gedit ./coordinates_pins.txt &")



    );proc



    procedure(CCSflattenList(l)
      if(listp(l) mapcan('CCSflattenList l) list(l))
    )




    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • LakshmanQual
    LakshmanQual over 7 years ago in reply to Marben

    Hi   Marben Orallo and Andrew,

    I already had a list which i got them with some operations in the skill code as pins_conflicts= ("inp" "inm" "out" "vdd" "vss").

    For Eg:

    cv=geGetWindowCellView()

    pins = cv~>terminals~>pins~>name = ("in1" "in2" "inp" "inm" "vdda" "vssa" "out" "vdd" "vss" "gnd" "out2" "out3" "out4" "out5" )

    ......

    .......

    after some operations i got few of the conflict pins from the above as 

    pins_conflicts= ("inp" "inm" "out" "vdd" "vss").

    I want to find the pins which are in "pins_conflicts" list from my layout and find co-ordinates and pin layers. I need to code in the same skill code.

    In the following code

    foreach( pin pins_conflicts

    printf("%L" "%L" "%L\n" pin pin~>fig~>lpp centerBox(pin~>fig~>bBox))

    ...

     i cant apply pin~>bBox or pin~>fig~>bBox as already 'pin' is in text format and not the 'hexcode'

    Could you please consider the above criteria and help in coding as mentioned above.

    Andrew, Sorry for not asking the question clearly. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Marben
    Marben over 7 years ago in reply to LakshmanQual

    Hi LakshmanQual,

    Something like this, is what you want ?

    procedure( pins()
     pins = list("in1" "in2" "inp" "inm" "vdda" "vssa" "out" "vdd" "vss" "gnd" "out2" "out3" "out4" "out5" )
     pins_conflicts= list("inp" "inm" "out" "vdd" "vss")
     foreach(pin pins  
      foreach(pin_conflict pins_conflicts
       if( pin_conflict == pin then    
        printf("\n " pin_conflict_id~>name pin_conflict_id~>lpp centerBox(pin_conflict_id~>fig~>bBox))
       );if
      ) ;for
     ) ;for
    ) ;proc

    Best regards,

    Marben

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • LakshmanQual
    LakshmanQual over 7 years ago in reply to Marben

    Hi Marben,

    A kind of same. But no need to compare with actual pins of layouts.

    But where can i get "pin_conflict_id" in your script?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Marben
    Marben over 7 years ago in reply to LakshmanQual

    Something like this.

    cv = geGetEditCellView()
    pins = cv~>terminals~>pins
    pins_conflict_id = setof(x pins x~>name == "inp" || x~>name == "inm" || x~>name == "out" || x~>name == "vdd" || x~>name == "vss")

    Best regards,

    Marben

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to LakshmanQual
    LakshmanQual said:
    Andrew, Sorry for not asking the question clearly

    Are you really using the pin names, or the terminal names? The pin names aren't normally that important in a layout - it's the terminal names that matter. If you are trying to identify the pins from the pin names you'd use:

    foreach(term cvId~>terminals
      foreach(pin term~>pins
        when(member(pin~>name pins_conflicts)
          foreach(pinFig pin~>figs
            printf("%L %L %L\n" pin~>name pinFig~>lpp centerBox(pinFig~>bBox))
          )
        )
      )
    )

    or something like that.

    Andrew.

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

    Hi Andrew,

    Its working exactly what i want.

    Can we find all the lpp and Bbox of those pins which are repeated in the above 'pins_conflicts' list?

    • 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