• 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. Parameterized PCell Schematic

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 143
  • Views 18345
  • 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

Parameterized PCell Schematic

acook
acook over 10 years ago

I'm running into some problems creating a PCell schematic.

The PCell I'm creating is attempting to wrap an nmos pcell so that I can parameterize it's W,L, and M

Here is a snippet of my code:


pcDefinePCell(
list( ddGetObj("ASTparameterized") "nmoslgi_a" "schematic" "schematic")
(
(width "string" "1")
(length "string" "1")
(mult "string" "1")
)
let( (cv)
cv = pcCellView
fprintf(stdout "RUN\n")
dbD_0x1545979a = dbOpenCellViewByType("au1Comp" "nmoslgi_a" "symbol")
dbD_0x22fe0b1a = dbCreateParamInst(cv dbD_0x1545979a "MN0"
1.437500e+00:1.875000e-01 "R0" 0
list(
list("M" "string" mult)
list("W" "float" cdfParseFloatString(width))
list("L" "float" cdfParseFloatString(length))
)

CCSinvokeCdfCallbacks(pcCellView ?callInitProc t ?useInstCDF t)

)

When I try to pass using [@NM] or pPar("NM") neither seems to work properly. It does at least show the right W/L/M values when I just pass values.

The whole reason I am doing this is because the nmos pcell has a callback that is executed every time the W/L is changed.

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 10 years ago

    If you have a component (probably not a pcell) which doesn't handle parameterization because of poorly written CDF callbacks (see my article The Dangers of CDF Callbacks), then wrapping it in a pcell will not help you. PCells are evaluated once per variant, not once per instance (and certainly not once per occurrence). In order for what you are asking for to work, it would require pcells to be evaluated once per occurrence - each hierarchical path down through the hierarchy would need to be individually evaluated so that the set of parameter values could be found for that particular path through the hierarchy, and then the CDF callbacks called with actual numbers rather than passed parameters (either NLP or pPar). It would also then require the netlisters to duplicate hierarchical blocks to ensure each leaf occurrence was unique.

    Since pcells are only evaluated once per set of unique parameter values (which makes them vastly more efficient), and this hierarchical expansion during netlisting does not occur either, there's no way you can make this work.

    I generally stress to PDK providers that making derived parameters dependent upon CDF callback evaluation is rather limiting in terms of parameterization - so you might want to push back on the PDK provider.

    That said, if using ADE XL, you can use the Variables and Parameters assistant to add sweeps on component values which are governed by CDF callbacks; the CDF callbacks are then evaluated as a pre-cursor to netlisting for each point in the sweep. Note that this only gives you the ability to sweep an instance in a cell rather than a hierarchical occurrence, but that covers the majority of requirements for most people.

    Kind Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • acook
    acook over 10 years ago

    Thank you for your response Andrew. I actually stumbled upon that article a few days ago and found it very informative.

    I should mention that my goal here is to have a single schematic for multiple layouts, not just optimization in simulation. I find that within our libraries, we often create duplication just to change something silly that could be parameterized if the functionality existed. For example I want to have a single OTA core that I can just tell it what I want for the diff pair W/L. The layout engineer would then just make an alternate layout with those parameters. Would this even be feasible with the proper PDK setup?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 10 years ago
    This absolutely would be possible. 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