• 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 15339
  • 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
  • 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
  • RK56
    RK56 over 8 years ago
    Thanks Andrew. That might your work but I am not OK with the idea of maintaining layoutTemplate. When does the flattening happens? Is it the first time I do Shift+F and the flattening happens on virtual memory? Any impact on virtuoso performance for a large layout which uses many such PCELLS?

    Are there any other options that I can compare with this? One idea I had was to dump skill code for every cell (various dbCreateRect/Polygon). The down side is, as you mentioned I need have various PCELL code and maintaining a layout textually is extreme difficulty.

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

    Ramakrishnan,

    First of all, it doesn't strike me as being any significant effort to "maintain" these layoutTemplate views. You could leave the views as "layout" views and then create (as pcells) new layoutPCell views - all you have is a master fixed layout view which is then referenced by the pcell - which is a common piece of code. Put another way, the master layout (or layoutTemplate) is just a normal layout view that you edit in the layout editor, and you can edit that as normal. The pcell would never be edited in the layout editor - it's generated using SKILL code and once generated you wouldn't need to touch it again unless you wanted to change the behaviour.

    In contrast. the approach you're suggesting would be a major amount of work to maintain. Dumping the SKILL code which is equivalent to the fixed layout and then editing that to have some parameterised behaviour is a lot of work (per pcell), and then if you ever want to edit the fixed portions of the layout you can't - you'd have to figure out where in the SKILL code that part of the work was done and do lots of edits.

    So I really don't understand your reluctance to do it the way I suggested. 

    You could potentially use the ancient graphical pcell editor (Launch->Plugins->PCell) to make your fixed layout parameterised, but  you'd then have to do such an interactive edit for each and every cell in  your library which also sounds like a huge amount of work compared with the very simple and easy to maintain approach I suggested at the beginning.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RK56
    RK56 over 8 years ago

    I agree with you Andrew. I just want to compare the Pros and Cons and thanks for mentioning them. I'd go with fixed layout view approach.

    What should be done on the schematic and symbol front?

    -Ramakrishnan

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

    I'm guessing that the symbols wouldn't need to be parameterised, and it's unclear to me whether the schematics do too. If so, a similar template-based approach might be the easiest if you need to switch a device depending on a parameter.

    Andrew.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RK56
    RK56 over 8 years ago

    Thanks Andrew. I'm working on the layout part now. I planned  to implement the schematic as you mentioned. On the symbol, I just need to write a label about the Vt being used and I can figure it myself.

    We used to maintain extracted views (av_extracted) for the standard cells in each cell. Now the question is how to achieve that? I'm totally blank here. What would be the best practice? The parasitics will not change with respect to the transistor VT so does back annotating the caps in schematic is a good idea?

    I'm need help here.

    Thanks

    Ramakrishnan

    • 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