• 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 get the coordinates of all instances in the layout...

Stats

  • Locked Locked
  • Replies 8
  • Subscribers 144
  • Views 17581
  • 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 get the coordinates of all instances in the layout hierarchy ?

marbs
marbs over 11 years ago

 Hi All,

 I would like to ask , how to get the coordinates of all the instances in the layout

 hierarchy by using SKILL ? 

 I use IC616 .

 

 Best regards,

 Marben F. Orallo

 

 

 

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 11 years ago

    Marben,

    procedure(CCFgetInstanceNamesAndCoords(master @optional (transform list(0:0 "R0" 1)) (hierInstPath "/"))
      foreach(inst master~>instances
        printf("%s%s %L\n" hierInstPath inst~>name dbTransformPoint(inst~>xy transform))
        CCFgetInstanceNamesAndCoords(
          inst~>master
          dbConcatTransform(inst~>transform transform)
          strcat(hierInstPath inst~>name "/")
        )
      )
      t
    )

    Or something similar.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • marbs
    marbs over 11 years ago

    Hi Andrew,

    Thank you very much for the prompt reply. 

    The coordinates are correct. 

    But how can I get all the cellname of the instances in the hierarchy to display with their coordinates ? 

    because the output is like these : 

    /|I37/|I0/|I0/|M2 (449.205 213.005)
    /|I37/|I0/|I0/|M1 (449.205 214.145)
    /|I37/|I0/|I0/|M4 (449.205 210.725)

    I want the output is just like these : 

     /|vref003c/|vref003b5/|vref003b5/||M2 (449.205 210.725)

     /|vref003c/|vref003b5/|vref003b5/||M1 (449.205 210.725) 

     /|vref003c/|vref003b5/|vref003b5/||M4 (449.205 210.725)

     

     

    Please help. 

    Best regards,

    Marben

     

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

    Marben:

    Change:

          strcat(hierInstPath inst~>name "/")

    to:

          strcat(hierInstPath inst~>cellName "/")

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • marbs
    marbs over 11 years ago

    Hi Andrew,

    The code is now working exactly as I wanted. 

     I got now the cellnames in all the hierarchy displaying with their coordinates.

    Thank you very much !!!

     

    Best regards,

    Marben

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Charley Chen
    Charley Chen over 11 years ago

    Hi Andrew , 

    I used the code and test my layout , for serval insts is OK , for large layout , it has  the message

    *Error*   dbConcatTransform:   Invalid  transform  -   nil

    How to  fix it ?

     

    Thank you.

    Charley 

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

    Charley,

    This will happen if you have mosaics. I neglected to include a check in the code:

    procedure(CCFgetInstanceNamesAndCoords(master @optional (transform list(0:0 "R0" 1)) (hierInstPath "/"))
      foreach(inst master~>instances
        when(inst~>objType=="inst"
          printf("%s%s %L\n" hierInstPath inst~>name dbTransformPoint(inst~>xy transform))
          CCFgetInstanceNamesAndCoords(
            inst~>master
            dbConcatTransform(inst~>transform transform)
            strcat(hierInstPath inst~>name "/")
          )
        )
      )
      t
    )

    The code above should run, but will ignore mosaics.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Charley Chen
    Charley Chen over 11 years ago

    Hi Andrew , 

    This code is helpful , Could you help to consider mosaic not ignore ?

     

    Thank you,

    Charley 

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

    Charley,

    Rather than writing it (I don't really have the bandwidth to do that today), I'll just give you some pointers:

    • You can iterate over cv~>mosaics to get all the mosaics and you can get the bBox of each.
    • If you have mosaics of cells which have hierarchy underneath, you may want to expand all the sub-instances to give you the effective coordinates of each sub-instance. That gets a bit more complicated, but you could use code similar to that in this recent post to handle all the transformations in a mosaic (the code there handles IC5141 and IC61 because mosaics are represented differently in CDB and OA). You could borrow the mosaic handling part and adapt the recursive call in that.

    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