• 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. Accessing results with corner names

Stats

  • Locked Locked
  • Replies 1
  • Subscribers 143
  • Views 5723
  • 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

Accessing results with corner names

imulsion
imulsion over 2 years ago

Hi,

First, some background. I have a circuit that needs calibrating across process. I have set up a pre-run script that does the job perfectly well, essentially running a DC sweep and finding the right trim code for that process corner. All good so far. However, the pre-run script needs to run every time I run any sims and takes up simulation time unnecessarily, since the trim code will be the same no matter what simulation is being run, the only thing that will affect it is the process corner. Therefore, in terms of simulation time, it would be quicker to just add another variable into my corners setup (let's call it trim_code) that stores the appropriate value for every process corner. You've probably seen the problem already: this would be fine for 4 or 5 corners, but I have hundreds in my setup. So I thought it would be better to write an OCEAN script that runs a DC sweep across corners, finds the appropriate code for each corner, then updates trim_code for each corner. 

Here's where I got stuck: I don't know how to use a corner handle to access the values of variables for that corner. For example:

sess=axlGetWindowSession()
sdb=axlGetMainSetupDB(sess)
corners=axlGetCorners(sdb)
foreach(crnr corners(


analysis('dc ?saveOpPoint t ?param "temperature" ...

;what do I do here? I have each corner in the list of corners, but I don't know how to run an analysis using a particular corner

;let's assume I've run it successfully

trim_code = round(cross(getData(VS("/vout")) 1.2 1 "either" nil nil nil))

;how do I now use the current corner handle to update the trim_code variable in the corners setup?

)

)

I did think alternatively I could run a single sweep across corners, but then I don't know how to access the results using leafValue for a particular corner name. So far the documentation seems to suggest you can only select by parameter values, not corner names.

Of course I can always just use the pre-run calibration, but I'd rather avoid the extra simulation effort if possible, since I know the only thing that affects the trim code is the process corner.

Any suggestions welcome, thanks in advance.

Cheers,

Stafford

  • Cancel
  • imulsion
    imulsion over 2 years ago

    Forgot to mention, I'm on sub-version IC6.1.8-64b.500.31

    And obviously for Monte Carlo runs I'll use the pre-run script, I'm just talking about PVT here

    • 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