• 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. dbProduceOverlap when dealing with "simple" mosaics

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 143
  • Views 1861
  • 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

dbProduceOverlap when dealing with "simple" mosaics

rfontaine
rfontaine over 8 years ago

Below is a snipet of code I've used in IC5 to raise certain layers that fall within a specific bBox to my top level.I'm finding now that in IC6 (OA)  mosaics are apparently handled differently. Can anyone share some help on raising shapes (including mosaics) to the top cell in IC6.

   xFormData = foreach( mapcar shapeSpec removeDups(dbProduceOverlap(cv searchArea depth lpp))
      foreach( mapcar spec flattenList(shapeSpec)
        ;printf("\n spec objType is %L \n" spec~>objType)
    cond(
          ( spec~>objType == "inst"
            ; x y rot rows columns dX dY
            list( xCoord(spec~>xy) yCoord(spec~>xy) cadr(spec~>transform) 1 1 0 0 )
          )

          ( spec~>objType == "stdVia"
            ; x y rot rows columns dX dY
            list( xCoord(spec~>origin) yCoord(spec~>origin) spec~>orient 1 1 0 0 )
          )
    
          ( spec~>objType == "mosaic"
        
            m=spec
            ; x y rot rows columns dX dY
            list( xCoord(m~>xy) yCoord(m~>xy) car(m~>tileArray) m~>rows m~>columns m~>uX m~>uY )

          )
          ( t   ; a shape - last element
            spec
          )
        );end cond
      );end foreach
    );end foreach

  • Cancel
  • dmay
    dmay over 8 years ago

    There are several changes in how mosaics are stored in OA as compared with CDB. There should be some OA compatibility document that describes all of this in detail. First of all, in CDB there were two objects, a mosaic and a mosaicInst. In OA, there is just the mosaic object. Also, in OA, rotations are handled differently. In CDB, when a mosaic is rotated 90, the number of rows and columns, and the uX and uY are transposed so that the values represent what you see on the screen. In OA, these values don't change at all for any rotation.

    When we were working in both CDB and OA for many years, I wrote a utility to return mosaic information in a disembodied property list that looked the same for both OA and CDB. This allowed us to write code compatible with both versions without needing conditionals all over our code. I've included it below for your convenience.

    Derek

    procedure(mydbGetMosaicInfo(m)
      prog((oaFlag columns uX uY orient rows xy mInst name)
        case(m~>objType
            ("inst"
               ;not a mosaic
               return(nil)
            )
            ("mosaicInst" ;OA compliant
                ;cdb mosaicInst
                mInst=m
                m=m~>mosaic
            )
            ("mosaic"
                if(car(m~>instanceList)~>objType=="mosaic" then
                    ;oa mosaic
                    oaFlag=t
                else
                    ;cdb mosaic
                    mInst=car(m~>instanceList)
                    t
                )
            )
            (t
               ;not a mosaic
               return(nil)
            )
        )
        if(oaFlag then
            orient=car(m~>tileArray)
            xy=m~>xy
            if(member(orient list("R0" "R180" "MX" "MY")) then
                rows=m~>rows
                columns=m~>columns
            else
                rows=m~>columns
                columns=m~>rows
            )
            case(orient
                ("R0"       uX=m~>uX    uY=m~>uY)       ;OA compliant
                ("R90"      uX=-(m~>uY) uY=m~>uX)       ;OA compliant
                ("R180"     uX=-(m~>uX) uY=-(m~>uY))    ;OA compliant
                ("R270"     uX=m~>uY    uY=-(m~>uX))    ;OA compliant
               
                ("MX"       uX=m~>uX    uY=-(m~>uY))    ;OA compliant
                ("MXR90"    uX=m~>uY    uY=m~>uX)       ;OA compliant
                ("MY"       uX=-(m~>uX) uY=m~>uY)       ;OA compliant
                ("MYR90"    uX=-(m~>uY) uY=-(m~>uX))    ;OA compliant
            )
            name=m~>name
            return(list(nil 'orient orient 'xy xy 'uX uX 'uY uY 'rows rows 'columns columns 'oa t 'mosaic m 'master m~>master 'mosaicName name
                            'libName m~>libName 'cellName m~>cellName 'viewName m~>viewName 'name name 'mosaicInst m))  ;OA compliant
        else
            orient=car(m~>tileArray)
            xy=m~>xy
            uX=m~>uX    ;OA compliant
            uY=m~>uY    ;OA compliant
            rows=m~>rows
            columns=m~>columns
            name=car(m~>instanceList~>name) ;OA compliant
            return(list(nil 'orient orient 'xy xy 'uX uX 'uY uY 'rows rows 'columns columns 'oa nil 'mosaic m 'master mInst~>master 'mosaicName m~>name
                            'libName mInst~>libName 'cellName mInst~>cellName 'viewName mInst~>viewName 'name name 'mosaicInst mInst))  ;OA compliant
        )
      ) ;let
    ) ;proc

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

    Another example of the difference in handling mosaics in CDB and OA can be found in solution 11328674

    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