• 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 invert a transform?

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 144
  • Views 15980
  • 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 invert a transform?

DaveZhang
DaveZhang over 5 years ago

Hi all, 

I have a bbox in top level and a transform for a bottom cell, how to invert the bbox to the bottom cell? 

Any suggestion will be thankful! 

Dave. 

  • Cancel
Parents
  • NickA
    NickA over 5 years ago

    Does this help?

    https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/14265/transform-shapes

    Possibly this alsol...

    https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/45246/dbconcattransform-calculation-error

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • NickA
    NickA over 5 years ago

    Does this help?

    https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/14265/transform-shapes

    Possibly this alsol...

    https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/45246/dbconcattransform-calculation-error

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • DaveZhang
    DaveZhang over 5 years ago in reply to NickA

    Hi Nick, 

    I have searched those content,and it's unable to meet my requirements. 

    both of them are discussed how to transform a bBox from bottom to top level,  but my goal is transform bBox from top to bottom level. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • NickA
    NickA over 5 years ago in reply to DaveZhang

    Can you not do what I did incorrectly when I used it first, and use the dbConCatTransform function with the arguments swapped?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 5 years ago in reply to NickA

    Alternatively, you could use this implementation (you might want to contact customer support to request a duplicate of CCR 688096 for a built-in inverse; I discovered yesterday that there had been several independent requests for this, so I grouped them together to make it clearer that there was a bit of demand for it). The code below is based on something written by a former member of my team who came up with a workaround.

    /* abInvertTransform.il
    
    Author     A.D.Beckett
    Group      Custom IC (UK), Cadence Design Systems Ltd.
    Language   SKILL
    Date       Jun 11, 2020 
    Modified   
    By         
    
    Implementation of a function to invert a transform, given that
    there is no dbInvertTransform available in SKILL (exists at the C
    level, but not in SKILL) (CCR 688096 and duplicates are requesting
    this)
    
    ***************************************************
    
    SCCS Info: @(#) abInvertTransform.il 06/11/20.05:34:10 1.1
    
    */
    
    /**********************************************************************
    *                                                                     *
    *                  (abInvertTransform transform "l")                  *
    *                                                                     *
    * The dbInvertTransform function is not exposed to SKILL, so this is  *
    * a SKILL implementation which does the same. The idea is that if you *
    *    do dbConcatTransform(tr abInvertTransform(tr)) it will return    *
    *                         ((0.0 0.0) "R0" 1)                          *
    *                                                                     *
    **********************************************************************/
    
    (defun abInvertTransform (transform "l")
      (let ((orient (cadr transform))
            (mag (cond
                   ((zerop (caddr transform))
                    (error "cannot invert transform with mag=0: %L" transform))
                   ((null (caddr transform))
                    1)
                   ((caddr transform)))))
        (dbConcatTransform
          (list
            (list (minus (xCoord (car transform)))
                  (minus (yCoord (car transform))))
            "R0"
            1.0)
          (list
            '(0.0 0.0)
            (case orient
              ("R90" "R270")
              ("R270" "R90")
              (t orient))
            (quotient 1.0 mag)))))
    

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DaveZhang
    DaveZhang over 5 years ago in reply to Andrew Beckett

    Thanks Andrew, 

    The code is working well. 

    • 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