• 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 22216
  • 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
  • Andrew Beckett
    Andrew Beckett over 14 years ago

    Do a recursive descent of all the instances in the design, and look for the IO cells at each level. As you descend, you can keep track of the overall transformation (by looking at inst~>transform) and you can then concatenate all the transformations (using dbConcatTransform). You can then use this concatenated transformation to map any coordinates within the IO cell back to the top level cellView, and thus know where to place the "pad heads".

    There are quite a few examples of using recursion to visit all cellViews in a layout on http://support.cadence.com and similarly examples of using dbConcatTransform.

    Regards,

    Andrew.

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

     

    My idea is this:

    It will go down from top level to bottom level automatically and check if there are IO cells at certain level.

     

    I used Andrew's code and modified it to realize the function:

     

    procedure(tra_v1(cellView levels transform)

    ; the variable levels is an indication of current level

      foreach(inst cellView~>instances

     if(inst>cellName=="VSSIO" then

           println("find it")

           println(levels)

           else println("haven't find it")

           );end if

      println(inst~>cellName)

      println(inst~>transform)

      tra_v1(inst~>master levels-1 dbConcatTransform(transform inst~>transform))

      ) ;end foreach

    )

     

    procedure(hier_v1()

           cvId = deGetEditCellView()

           ident_transform = list(0:0 "R0" 1.0)  

           levels = dbGetMaxHierDepth()

           tra_v1(cvId levels ident_transform)

    );end procedure

     

    But there are some problems with this program:

    • 1. It indeed prints some transform information of cells, but it terminates and reports that:

    Error: dbConcatTransform: invalid transform - nil

    • 2. I find that this program traverses only one cell from top level to bottom level which means that if there are instance I1 containing I2(containing I2_1) and I3(containing I3_1), it only reports transform information like this:

    I1 (0:0 "R0" 0)

    I2 (10:10 "R0" 0)

    I2_1 nil

     

    I would like that the program traverses both instance I2 and I3 from top to bottom level.

    Thanks

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

    Quick answer - the chances are that this is because you have mosaics in the design and are trying to look at the mosaicInst instances. You would need to filter out any instance with objType of "mosaicInst". Handling mosaics will get somewhat more complicated - so I'm hoping you don't have any mosaics of the cells you're trying to locate and so can safely ignore iterating over cvId~>mosaics in this case.

    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