• 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 do I transform cell orientation while edit in placed...

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 143
  • Views 14444
  • 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 do I transform cell orientation while edit in placed?

Vaughn
Vaughn over 15 years ago

Hi guys,

 

I have been using these forums for a few years now to get skill help. This is a great forum!

Now I find I need to post my question here. 

I have skill code that will modify a via pcell/cdf to add and sub rows and columns by key strokes. This all works great on flat data. Once I edit in place and the instance I am in is rotated throught the hierarchy somewhere, now the keys that were supposed to grow the via pcell north now go west or east.

 

How can I pass the proper hierarchical orientation to my skill?

 

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    I think this is the right way around, but forgive me if it ends up with the transform back to front - I'm sure  you can fix it if it is. The trick is to use geGetInstHierPath() to find out the hierarchical path down to where you are, and then to concatenate the transformations at each stage. Because I'm not worried about the translation part (i.e. the offset), I don't worry about handling mosaics properly - this is just to collect the orientation.

    Anyway, something like this should do it:

    procedure(CCSgetCurrentOrient(@optional (win hiGetCurrentWindow()))
      let((hierPath transform)
        hierPath=geGetInstHierPath(win)
        transform=list(0:0 "R0" 1)
        foreach(instInfo hierPath
          transform=dbConcatTransform(transform car(instInfo)~>transform)
        )
        cadr(transform)
      )
    )

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Vaughn
    Vaughn over 15 years ago

    Thanks Andrew,

     

    This is exactly what I needed.

    Vaugh 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • dmay
    dmay over 15 years ago

    This information is also readily available off the window id:

    hiGetCurrentWindow()~>e2dTransOrient

    You can also get the current edit-in-place cell x and y offset relative to the top level. Getting it from the window id will require that you divide by the geGetEditCellView()~>DBUPerUU (database units, usually 1000.0):
    hiGetCurrentWindow()~>e2dTransX
    hiGetCurrentWindow()~>e2dTransY

    OR
    geEditToWindowPoint(hiGetCurrentWindow() 0:0)

    Thus, the transform of the current edit-in-place cell is:
    layWin=hiGetCurrentWindow()
    curTransform=list(geEditToWindowPoint(layWin 0:0) layWin~>e2dTransOrient 1.0)

    Derek

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 15 years ago
    Good point Derek. I'd forgotten about 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