• 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 use corner output expression in other corners for...

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 126
  • Views 9874
  • 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 use corner output expression in other corners for a multiple corner sim?

vpeddireddy
vpeddireddy over 2 years ago

I have two tests in ADE Assembler. The first test runs different corners tt,ss,ff etc. in parallel and outputs a calibration co-efficient expression for each corner. The second test uses the output of the first test (calibration co-efficient) as an input by using a global variable and calcVal function. For example, the global variable defined is cal_trim = calcVal("Cal_code" "Cal_MC" ?historyName "Interactive.102" ?defaultVal 0), where Cal_code is the output from the first test- Cal_MC. Now when I try to run different corners with sweeps (tt,ff,ss with different vdd values and temperatures) in the second test, how do I make this cal_trim variable get the calibration co-efficient of the corresponding corner across it's sweeps. 

For example, the first test outputs a Cal_code of 21, 30, 9 for tt, ff and ss corners respectively. The second test has more corners because I am running tt,ff,ss at 3 temperatures and 3 vdds. Now I want to use cal_trim of 21 for all tt corners, cal_trim of 30 for all ff corners and 9 for all ss corners. I know this can be done using the ?cornerName argument and running each corner separately, but I want to run everything in parallel so I can plot the results together. Any suggestions on how I can implement this?

Thank you,

Vinay

  • Cancel
  • ShawnLogan
    ShawnLogan over 2 years ago

    Dear vpeddireddy,

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • ShawnLogan
    ShawnLogan over 2 years ago

    Dear vpeddireddy,

    vpeddireddy said:
    I know this can be done using the ?cornerName argument and running each corner separately, but I want to run everything in parallel so I can plot the results together. Any suggestions on how I can implement this?

    I do not have access to Cadence tools at this time and hence cannot verify this potential thought, but if you have the time and patience, you might consider the following methodology. Basically, the thought is to create a set of design variables that are conditional expressions dependent on the silicon processes you mention (tt, ss, and ff). Each of these three variables is then used in an expression for a design variable that sets the calibration code for your simulation.

    Specifically, suppose your three calibration simulations for the tt, ss, and ff process cases are in Interactive.102, Interactive.103, and Interactive.104 respectively.

    1. Define the following three global variables using the calcVal() functions:

    cal_trim_tt = calcVal("Cal_code" "Cal_MC" ?historyName "Interactive.102" ?defaultVal 0)
    cal_trim_ss = calcVal("Cal_code" "Cal_MC" ?historyName "Interactive.103" ?defaultVal 0)
    cal_trim_ff = calcVal("Cal_code" "Cal_MC" ?historyName "Interactive.103" ?defaultVal 0)

    2. Define a corner design variable:

    An example of the procedure to create a corner dependent variable and the results shown in the resulting input.scs file may be found at URL:

    www.dropbox.com/.../corner_dependent_variable_sml_092822v1p0.pdf

    3. Assuming the corner variable is named "corner", define the following design variables as conditional expressions.

    cal_variable_tt: if(VAL("corner") == "tt") then cal_val_tt else 0)
    cal_variable_ss: if(VAL("corner") == "ss") then cal_val_ss else 0)
    cal_variable_ff: if(VAL("corner") == "ff") then cal_val_ff else 0)

    4 Finally, add one more variable whose value is the sum of cal_variable_tt:, cal_variable_ss, and cal_variable_ff. 

    cal_val: cal_variable_tt + cal_variable_ss + cal_variable_ff

    Variable cal_val is the calibration code you will use in your single set of corner simulations. Since its value will vary with the corner of each individual simulation in the corner, your simulation set can vary silicon process, temperature, voltage and any other parameters you choose and the calibration value "cal_val" will follow the specific silicon process of each simulation in the set.

    As I mentioned, I cannot verify this at the present time, but wanted to pass the idea by you in case it provides some insight into your desired simulation methodology. Others may have more efficient means to accomplish this, but as I mentioned, I wanted to at least add my thoughts vpeddireddy.

    Shawn

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • ShawnLogan
    ShawnLogan over 2 years ago

    Dear vpeddireddy,

    vpeddireddy said:
    Now I want to use cal_trim of 21 for all tt corners, cal_trim of 30 for all ff corners and 9 for all ss corners. I know this can be done using the ?cornerName argument and running each corner separately, but I want to run everything in parallel so I can plot the results together. Any suggestions on how I can implement this?

    I do not have access to Cadence tools at this time and hence cannot verify this potential thought, but if you have the time and patience, you might consider the following methodology. Basically, the thought is to create a set of design variables that are conditional expressions dependent on the silicon processes you mention (tt, ss, and ff). Each of these three variables is then used in an expression for a design variable that sets the calibration code for your simulation.

    Specifically, suppose your three calibration simulations for the tt, ss, and ff process cases are in Interactive.102, Interactive.103, and Interactive.104 respectively.

    1. Define the following three global variables using the calcVal() functions:

    cal_trim_tt = calcVal("Cal_code" "Cal_MC" ?historyName "Interactive.102" ?defaultVal 0)
    cal_trim_ss = calcVal("Cal_code" "Cal_MC" ?historyName "Interactive.103" ?defaultVal 0)
    cal_trim_ff = calcVal("Cal_code" "Cal_MC" ?historyName "Interactive.103" ?defaultVal 0)

    2. Define a corner design variable:

    An example of the procedure to create a corner dependent variable and the results shown in the resulting input.scs file may be found in the Dropbox link in response to the Forum post at:

    community.cadence.com/.../1385792

    (I could not include the Dropbox link as my response was flagged as spam.)

    3. Assuming the corner variable is named "corner", define the following design variables as conditional expressions.

    cal_variable_tt: if(VAL("corner") == "tt") then cal_val_tt else 0)
    cal_variable_ss: if(VAL("corner") == "ss") then cal_val_ss else 0)
    cal_variable_ff: if(VAL("corner") == "ff") then cal_val_ff else 0)

    4 Finally, add one more variable whose value is the sum of cal_variable_tt:, cal_variable_ss, and cal_variable_ff.

    cal_val: cal_variable_tt + cal_variable_ss + cal_variable_ff

    Variable cal_val is the calibration code you will use in your single set of corner simulations. Since its value will vary with the corner of each individual simulation, your simulation set can vary silicon process, temperature, voltage and any other parameters you choose and the calibration value "cal_val" will follow the specific silicon process of each simulation in the set.

    As I mentioned, I cannot verify this at the present time, but wanted to pass the idea by you in case it provides some insight. Others may have more efficient means to accomplish this, but as I mentioned, I wanted to at least add my thoughts vpeddireddy.

    Shawn

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 2 years ago in reply to ShawnLogan

    I suspect the answer to this question is either to use the ?matchParams or ?ignoreParams arguments to the calcVal function to try to ensure there's a match between the points in the 2nd test compared with the 1st, given that there are more sweep points in the second, you need to narrow the match to only those that existed in the 1st test.

    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