• 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 get all the really used layer in the cellview .

Stats

  • Locked Locked
  • Replies 9
  • Subscribers 143
  • Views 17478
  • 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 get all the really used layer in the cellview .

Charley Chen
Charley Chen over 14 years ago

Hi All,

How to get all the really used layer in the cellview .

I use geGetEditCellView()~>lpps , it shows some layers that not really exists when stream out gdsii file from PIPO.LOG.

foreach(lpp geGetEditCellView()~>lpps

         printf("Layer is %L\n"  lpp)

 )

Thank you,

Charley

  • Cancel
Parents
  • dmay
    dmay over 14 years ago

    I have seen this before. What is probably happening is that you have a layer used in your pcells when all parameters are defaults, but that layer is not used when your pcell instance parameters are changed.

    For example, let's say you have a pcell called "nmos". If you place a default "nmos", maybe it has an implant layer. However, in the cellview you are describing you have placements of "nmos", but all of them have the implant layer turned off. The lpps attribute of the top cellview will show you the layers in all of the cells in the hierarchy, but for pcells, it is looking at their default representation in the library. Open each of your pcells directly from the pcell library and you should see the layer you are describing in one of those pcell masters.

    The only way around this is to traverse the hierarchy of your cellview, visiting every master once (including pcell submasters) and look at the lpps with nShapes as Andrew mentioned earlier.

    procedure( myGetLppsUsed(cv)
      let((masterTbl lppTable )
        masterTbl = makeTable("masterTbl" nil)
        lppTable = makeTable("table" nil)
        myGetLppsUsedHierTraversal(cv masterTbl lppTable)
        lppTable->?
      )
    )

    procedure(myGetLppsUsedHierTraversal(@optional (cv geGetTopLevelCellView()) masterTbl lppTable)
        foreach(masterList list(cv~>instanceMasters cv~>viaHeaders)
            foreach(master masterList
                unless(masterTbl[master]
                    unless(master~>isParamCell
                        masterTbl[master]=t
                        mapcar(
                            lambda((x)
                                lppTable[list(x~>layerName x~>purpose)] = t
                            )
                            setof(x master~>lpps x~>nShapes > 0)
                        )
                        myGetLppsUsedHierTraversal(master masterTbl lppTable)
                    )
                )
            )
        )
        t
    ) ;proc

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • dmay
    dmay over 14 years ago

    I have seen this before. What is probably happening is that you have a layer used in your pcells when all parameters are defaults, but that layer is not used when your pcell instance parameters are changed.

    For example, let's say you have a pcell called "nmos". If you place a default "nmos", maybe it has an implant layer. However, in the cellview you are describing you have placements of "nmos", but all of them have the implant layer turned off. The lpps attribute of the top cellview will show you the layers in all of the cells in the hierarchy, but for pcells, it is looking at their default representation in the library. Open each of your pcells directly from the pcell library and you should see the layer you are describing in one of those pcell masters.

    The only way around this is to traverse the hierarchy of your cellview, visiting every master once (including pcell submasters) and look at the lpps with nShapes as Andrew mentioned earlier.

    procedure( myGetLppsUsed(cv)
      let((masterTbl lppTable )
        masterTbl = makeTable("masterTbl" nil)
        lppTable = makeTable("table" nil)
        myGetLppsUsedHierTraversal(cv masterTbl lppTable)
        lppTable->?
      )
    )

    procedure(myGetLppsUsedHierTraversal(@optional (cv geGetTopLevelCellView()) masterTbl lppTable)
        foreach(masterList list(cv~>instanceMasters cv~>viaHeaders)
            foreach(master masterList
                unless(masterTbl[master]
                    unless(master~>isParamCell
                        masterTbl[master]=t
                        mapcar(
                            lambda((x)
                                lppTable[list(x~>layerName x~>purpose)] = t
                            )
                            setof(x master~>lpps x~>nShapes > 0)
                        )
                        myGetLppsUsedHierTraversal(master masterTbl lppTable)
                    )
                )
            )
        )
        t
    ) ;proc

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

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