• 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. Converting a existing library to PCELL library

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 142
  • Views 15342
  • 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

Converting a existing library to PCELL library

RK56
RK56 over 8 years ago

Hi,

I have a library of 500+ cells with schematic, symbol and layout views. Now we have decided to create another variant which differs only by single layer (VT variants). So instead of creating another set of 500+ cells I'm looking for an option to convert the existing views to PCELL views and provide an option to chose the Vt.

I have good experience in writing SKILL scripts but I have not tried anything related to PCELLs. So kindly provide me some directions.

Thank you

Ramakrishnan

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 8 years ago

    That's not going to be entirely straightforward, because a PCell is a cellView defined using SKILL. What you could do however is rename all the layout views to (say) layoutTemplate and then have the same PCell code for every layout view - which you could create procedurally too. That PCell would essentially be something like (this is pseudo code as I don't have time to fully write and test this):

    procedure(CCFcreateLayPCell(libName cellName)
      pcDefinePCell(list(ddGetObj(libName) cellName "layout")
        ; define your pcell parameters - in this case it's the layer you want to change
       (
         (maskLayer "STDVTLAYER")
       )
       let((inst master)
         master=dbOpenCellViewByType(pcCellView~>libName pcCellView~>cellName "layoutTemplate")
         inst=dbCreateInst(pcCellView master "" 0:0 "R0")
         dbFlattenInst(inst 1 t t t)
         dbClose(master)
         when(maskLayer=="OTHERVTLAYER"
           lpp=car(exists(LP pcCellView~>lpps LP~>layerName=="STDVTLAYER" && LP~>purpose=="drawing"))
           lpp~>shapes~>layerName="OTHERVTLAYER"
         )
       )
      )
    )

    Something like that. You could then use the same pcell code for every layout - it just creates an instance from the template view, flattens it, and then hunts down the original layer and replaces it with the new layer if that parameter has been chosen. You'd obviously want to add a CDF parameter matching the PCell parameter too for ease of use (important if you already have CDF for the cells as otherwise it wouldn't show up).

    Andrew.

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

    That's not going to be entirely straightforward, because a PCell is a cellView defined using SKILL. What you could do however is rename all the layout views to (say) layoutTemplate and then have the same PCell code for every layout view - which you could create procedurally too. That PCell would essentially be something like (this is pseudo code as I don't have time to fully write and test this):

    procedure(CCFcreateLayPCell(libName cellName)
      pcDefinePCell(list(ddGetObj(libName) cellName "layout")
        ; define your pcell parameters - in this case it's the layer you want to change
       (
         (maskLayer "STDVTLAYER")
       )
       let((inst master)
         master=dbOpenCellViewByType(pcCellView~>libName pcCellView~>cellName "layoutTemplate")
         inst=dbCreateInst(pcCellView master "" 0:0 "R0")
         dbFlattenInst(inst 1 t t t)
         dbClose(master)
         when(maskLayer=="OTHERVTLAYER"
           lpp=car(exists(LP pcCellView~>lpps LP~>layerName=="STDVTLAYER" && LP~>purpose=="drawing"))
           lpp~>shapes~>layerName="OTHERVTLAYER"
         )
       )
      )
    )

    Something like that. You could then use the same pcell code for every layout - it just creates an instance from the template view, flattens it, and then hunts down the original layer and replaces it with the new layer if that parameter has been chosen. You'd obviously want to add a CDF parameter matching the PCell parameter too for ease of use (important if you already have CDF for the cells as otherwise it wouldn't show up).

    Andrew.

    • 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