• 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 do I access the real value of a resistor used in a transient...

Stats

  • Locked Locked
  • Replies 12
  • Subscribers 143
  • Views 20168
  • 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 do I access the real value of a resistor used in a transient simulation at a given PVT?

CADcasualty
CADcasualty over 6 years ago

I have a schematic that contains a "smart note" that evaluates a SKILL expression and displays the result on the schematic. The basis of this comes from Andrew Beckett's code that uses dynamic scoping to temporarily set ilInstPath which allows me to access information about instances via their cdsParams.

My schematic depicts a simple resistively loaded, differential amplifier whose gain is just gm*R and I want the smart note to display that gain after a transient sim completes. At the completion of the sim the skill code in the note interrogates the transistor and extracts it's gm (via transient operating point annotations) but I can't similarly extract the value of the resistor because TSMC annoyingly didn't provide transient operating point capability for resistors (or capacitors, but they did for transistors). The actual resistor value is a function of temperature and what process corner I'm in, but I don't know how to get the actual value so that I can calculate gm*R. I know R=V/I but the resistors don't appear to be enabled to provide transient current annotations either. Is there an alternative way access the value of a resistor used in a transient simulation?

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 6 years ago in reply to CADcasualty

    With a bit of a recursive function and some pattern matching, it's not too bad - with this code:

    procedure(abCopyAndReplaceOpParamExprList(l1 @key pat (from "OP\\(") (to "OPT("))
      unless(pat
        pat=pcreCompile(from)
      )
      foreach(mapcar elem l1
        case(type(elem)
          (list abCopyAndReplaceOpParamExprList(elem ?pat pat ?to to))
          (string pcreReplace(pat elem to 0))
          (t elem)
        )
      )
    )

    You can then do:

    userCdf->simInfo->spectre->optParamExprList=abCopyAndReplaceOpParamExprList(userCdf->simInfo->spectre->opParamExprList)

    I don't know whether there is indeed some case where OPT is needed over OP, but at least the above code should do the mapping for you.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • CADcasualty
    CADcasualty over 6 years ago in reply to Andrew Beckett

    That code is just way beyond my pay grade...

    Speaking on behalf of this forum, you do know you're not allowed to ever retire, right? ;-)

    • 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