• 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 Design
  3. How to change a transistor model parameter with ADE variables...

Stats

  • Locked Locked
  • Replies 10
  • Subscribers 126
  • Views 5434
  • 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 change a transistor model parameter with ADE variables?

DomiHammerfall
DomiHammerfall over 1 year ago

Dear community

I would like to modify a transistor parameter of the BSIM model - the threshold voltage vth in our case - using variables in ADE. Most design kits already include a parameter in their model files that is called dvth (or something similar) to add a offset to the threshold voltage during Monte Carlo or Corner analyses. Initially, I thought that I could simply overwrite this parameter to get the desired result.

According to an older post on this forum, doing so is fairly simple: All one needs to do is to tell the tool that it should create the netlist in a way where model files are loaded first before local parameters are defined. Then, one needs to configure Spectre to allow this kind of overwriting.

We tested this approach on two separate PDKs from different foundries, without success. The problem seems to be the environment variable spectre.envOpts netlistModelFileFirst. This variable no longer seems to exist in recent versions of Virtuoso (we are using IC 6.1.8). Setting this variable never throws an error or anything but it never appears in the Cdsenv Editor and also cannot be read back.

I checked the Spectre and ADE manual, but was unable to find something about it. Was this variable simply renamed in newer versions? Is this approach no longer suppoerted? If yes, what is an easy way to achieve the same result?

Thanks for any suggestion.

  • Cancel
  • Marc Heise
    Marc Heise over 1 year ago

    Hi,

    that variable should still work.  Did you put it into the .cdsinit before the virtuoso launch? It's not working on the fly.

    Kind regards,

    Marc

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DomiHammerfall
    DomiHammerfall over 1 year ago in reply to Marc Heise

    We tried:
    - putting it in the.cdsinit file
    - putting it in the .cdsenv file
    - directly typing it in the Virtuoso log window

    Nothing worked. The tool shows no error or warning during start-up when reading the .cdsinit file. Nevertheless, it does not show up in the Cdsenv Editor. Here a screenshot:

     In the meantime, we also checked if we can implement a workaround where we put those variables in a .scs file that is read in along with the other model files. No matter if we load it first or last, it does not seem to work.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Marc Heise
    Marc Heise over 1 year ago in reply to DomiHammerfall

    Hi,

    that setting will make sure that the all the model include files are above the  parameters section in the Spectre netlist.  If you say it wont work for you,  you have "parameters"  before the "includes"?  

    Kind regards,

    Marc

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DomiHammerfall
    DomiHammerfall over 1 year ago in reply to Marc Heise

    The bahaviour is actually correct: In my netlist, the includes of all the .scs files are above the parameter section, i.e. the netlist looks something like this:

    simulator lang=spectre
    include "path/to/model1.scs"
    include "path/to/model2.scs"
    include "path/to/model3.scs"
    parameter dvth=30m

    Spectre even issues a warning that looks something like this:


    Warning from spectre in `<device_name>', during circuit read-in.
    WARNING (SFE-2946): "/path/to/model.scs": `<device_name>': Parameter `dvth' redefines parameter of same name defined at higher level. Local parameter value will be used.

    All of that looks correct to me: The order in the netlist is right and the warning is issued, as it is supposed to be. The reason I believe that the environment variable is not working correctly is because the log message says that the warning ocured during the read in of the model file, which makes me believe that the parameter (the variable I set in ADE) was read first. 

    Anyway, despite the correct looking netlist, I can see no changes in the transistor's threshold voltage.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 1 year ago in reply to DomiHammerfall

    The reason it doesn't show up in the cdsenv editor is that (for some reason) the netlistModelFileFirst cdsenv variable for spectre is private (and hence undocumented). I have no idea why this is, because it's documented for hspiceD - I suspect it's an oversight.

    It does (as you say) work.

    The problem you've got is possibly indicative of the fact that the parameter dvth is being defined as a subckt parameter (that's typically what that message means - it's not telling you that the global parameter has been redefined). If it's a subckt parameter, then setting it globally won't help. Without knowing which models you're using, it's hard to be sure... 

    Perhaps contacting customer support would be a good idea?

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DomiHammerfall
    DomiHammerfall over 1 year ago in reply to Andrew Beckett

    Thanks for the clarification.

    The MOSFETs are indeed defined as inline subckt. Is there a way to overwrite those parameters with ADE variables (or any other way)?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 1 year ago in reply to DomiHammerfall

    It's not the fact that they are an inline subckt (or any kind of subckt) that's the issue, I believe. It's if there is a parameter statement within the subckt that's the issue - that means that the parameter is defined locally to the subckt (although it could then be override on the instance, provided that the CDF in Virtuoso is set up to allow it to be specified on the instance). 

    Without seeing your models though, I can't confirm this is the situation you're facing...

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DomiHammerfall
    DomiHammerfall over 1 year ago in reply to Andrew Beckett

    Dear Andrew

    Thank you for your help. What information (files) do I need to share for you to be able to tell?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 1 year ago in reply to DomiHammerfall

    That's why I suggested customer support - I doubt you can share the model files here (which is what I would need to see). Knowing which PDK you're using might be enough, but given that I'm going to be on vacation after tomorrow I'm not going to be able to realistically check the details of a specific PDK.

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • DomiHammerfall
    DomiHammerfall over 1 year ago in reply to Andrew Beckett

    That's exactly why I hesitated to directly share model files / log files. Fortunately, we were able to figure it out; so I can answer my own question here.

    The hint that there could be parameter statement within the subckt was the right clue: In our PDK(s), there were two variables to add a offset to vth. One was called dvth, and the other one dvth_t. The former one is defined locally in the context of the inline subckt and cannot be modified in the way I intended. The latter one is actually the correct one. If I change the variables to that name, everything works as intended.

    Thanks to Andrew and Marc for their help.

    • 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