• 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 compute the bounding box of a cell in a hierarchical...

Stats

  • Locked Locked
  • Replies 13
  • Subscribers 145
  • Views 22223
  • 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 compute the bounding box of a cell in a hierarchical design

Renee
Renee over 14 years ago

Hi,

 I had some problems with the placing pad head in a chip design. In the orignal design, all IOs have been placed without pad head. As there are so many pads in the design, I tried to realize this function by writing a program.

 Here are the functions it should have:

1. It should be able to identity positions of each IO.

2. It should be able to place pad head to the relative positon.

Here are my general thoughts to realize these function:

1. As there are identify layers covering IO, thus in order to locate them, I could locate bounding box of those ID layers, then I can have the lowerleft and upperight vertexes of IO. (But I have problems with getting bounding box of a cell in a hierarchical design)

2. How to place cell at a specific position in a design automatically?

 Thanks in advance!

Lei  

  • Cancel
  • lrl12skdev
    lrl12skdev over 14 years ago

    Hi Lei,

    Just to make a suggestion.

    for 1 I would rather get the IO  instance origin info (intsance->xy) and the transformation (intance->transform) instead of relying on a specified layer bounding box.

    then as you walk through all the IO instances, just simply instantiate the pad head instance, using the info on number 1 you should be able to calculate and placed them correctly relevant to the IOs.

    best regards -lrlsk

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

    Thank you for your reply!

    But I still had some questions with your suggestion:

    I tried to get the instace attributes with programs shown as below:

    cvId = dbOpenCellViewByType(libname cellname "layout")

    foreach(inst cvId~>instances

    println(inst~>bBox)

    )

    I could only find bBox of instance, but not instance origin and transform(I don't know what the function of transform is).

    Meanwhile, if I instantiate mosaic instances in the cellview, I could not get each bBox of them. Then how could I get the information to calculate each IO's position.

     Thanks

    Lei 

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

    Hi Lei,

    For an instance, you can use inst~>xy (to get origin) and inst~>orient (to get the orientation) or inst~>transform to get both together (along with a magnification - don't use this, since it's obsolete in OA). This is clearly covered in the documentation on database objects, and can be found by looking at inst~>??

    Mosaics are a little complex, but you find mosaics by looking at cvId~>mosaics (which has a bBox). An example of dealing with mosaics can be found in Solution 11328674

    Regards,

    Andrew.

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

    I have limited access to cadence online support right now. Is it possible that you send me the solution through email(reneezl26@hotmail.com)?

    Thank you so much!

    Lei

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

    I have limited access to cadence online support right now. Could you send the solution to me through my email (reneezl26@hotmail.com)?

     Thank you very much!

    Lei

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Austin CAD Guy
    Austin CAD Guy over 14 years ago

     Rather than going through all the instances in your design,sort through the instance headers to find the cells that match yourIO cells. The instHeaders have a pointer to the instances made by those masters. You will be processing much fewer objects. For regular cells there is one instHeader for each master, for pcells there is one instHeader for the superMaster and one for each variant.

     cvId = deGetEditCellView()
    listOfIOCells = list( "IO_cell_1" "IO_cell_2"...)

    ihList = setof( ih cvId~>instHeaders   member( ih~>cellName listOfIOCells ) )

    foreach( ih ihList
      foreach( inst ih~>instances

    ;; Process instances here

    ) )

     

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

     Hi Renee,

     I totally agree to Austin and about your question on what's the importance of getting the IO origin and transform, here is my idea behind that, First I would measure the displacement from the IO->xy to the Pad origin (where you want it to be placed) the IO-orient will give you the idea whether it is rotated, mirroredX or mirroredY etc. So for each instance of IO you will know how to add this relative displacement when placing the Pad head. Of course if you have several flavors of IO instances then you just need to build each case in your code.

    For mosaic, it is the same story, you can olso get the mosaic number of rows or columns and the origin where the master is located.

    BR  lrlsk

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Renee
    Renee over 14 years ago
    Thanks!I took your advice and realize those functions, but I still want to optimize my program and here are my thoughts:As shown in the below schematic, IOs are placed on four sides of the chip. I wrote a case function to detect the orientation of each IO (R0, R90, R180, and R270), then calculate the displacement of each pad head (the red rectangle).

    I don’t know if there are better solutions than case function, since I have to use it twice to get the finally coordinates of pad head. The first time, I need to find the center point of IO and the second time I need to transform the center point of pad head according to the center point of IO.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • lrl12skdev
    lrl12skdev over 14 years ago

    Hi Renee,

     Sorry because I couldnt see your picture, but I think this is how you should do it

    1 you get the relative displacement (x and y) of the instance origin of the IO to the origin of the Pad Head

    then for each IO instance get the tranformation and mirroring and assign the same property for their own Pad head so you would only worry about the rotation.

    for Example at R0 the displacement is X and Y

    then at R90 x becomes y and y becomes -x, at R180 x becomes -x and y becomes -y lastly at R270 x bexomes -y and y becomes x

    you cancelled the effects of mirroring like for example R0MX because you have assigned same mirroring for the Pad Head.

     

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

    Thanks for your advice.

     I still have some problems with this pad head problem:

    If the IO instances are placed at lower level of the design and I could only add pad heads at the top level. How can I go through all the instances from top to bottom view and find these IO cell instance?

     Thanks!

    • 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