• 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. How to find the coordinates of an instance's PIN?

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 143
  • Views 6802
  • 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

How to find the coordinates of an instance's PIN?

jyzxyz
jyzxyz over 6 years ago

Hello, I am using skill code (dbCreatePath) to route to an instance. Currently I just route to the center of one edge of the bounding box. The instance could have pin information for terminals like gate, source, drain, etc. It would be nice to route directly to that terminal, or at least to a specific location instead of just the center of the edge. But I couldn't find how to find the pin's coordinates. Is this possible?

Thank you very much for the great help.

  • Cancel
  • Marben
    Marben over 6 years ago

    procedure(CCFgetPinCoordinates(inst)
      foreach(mapcar instTerm inst~>instTerms
        list(instTerm~>name
          dbTransformPoint(centerBox(car(instTerm~>term~>pins)~>fig~>bBox) inst~>transform)
        )
      )
    )

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
  • jyzxyz
    jyzxyz over 6 years ago in reply to Marben

    Marben,

    Thanks so much for the quick reply. Could you please elaborate on what would be the output format for this procedure? For example, there are three terminals "g" "s" "d" which have coordinates of list (1 1), list (0 0) and list (2 0) respectively?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Marben
    Marben over 6 years ago in reply to jyzxyz

    Hi jyzxyz,

    The procedure's output is like this:

    inst = css()
    db:0x1af7fee7
    CCFgetPinCoordinates(inst)
    (("S"
    (-10.845 97.37)
    )
    ("G"
    (-13.085 100.48)
    )
    ("B"
    (-13.085 97.37)
    )
    ("D"
    (-15.325 97.37)
    )
    )

    Best regards,

    Marben

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RK56
    RK56 over 6 years ago in reply to Marben

    Hi Marben,

    Just an observation here. Since a terminal can have more than one pin and so figure, would it be correct to wrap with one more foreach rather than "car(insterm~>term~>pins)?

    -Ramakrishnan

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • jyzxyz
    jyzxyz over 6 years ago in reply to Marben

    Thanks, Marben,

    That was actually the output I was expecting. However, I seem to get nil as the output. The instance is a pcell. Maybe the pin was created incorrectly in the pcell.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • drdanmc
    drdanmc over 6 years ago in reply to jyzxyz

    that code above will only work if the instance was created in Layout-XL and has the connectivity info.  Otherwise instead of looking at ~>instTerms you may need to look at ~>master~>terminals.  Also be careful because a terminal may have multiple pins and a pin may have multiple figures.

    • Cancel
    • Vote Up +1 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