• 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. ADEXL: detecting process corners

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 126
  • Views 16348
  • 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

ADEXL: detecting process corners

kawan
kawan over 10 years ago

Hello,

Is there anyway I can have a circuit block decide its output value based on the process corner selected? Details as follows:

So I set up my process corners  to go FF & SS & TYP in a ADEXL simulation.

Block A puts out a value to calibrate for the process corner, It has analog and digital circuitry inside with clocking and all te fancy stuff. But at the end of the day, the value put out feeds all other analog blocks so they can tune in to the process corner.

I can run Block A withe mixed mode sims and collect the data. So I now know the value based on the process corner.

Can I have a view for Block A that puts out the value  based on the corner that ADEXL is running its present simulation? In other words, how do I detect a process corner and act on that information.

Thanls

zakir

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 10 years ago

    Zakir,

    Several options here. One is to use a "pre-run script" to do the calibration - or at least to look up the calibration value that you've previously found. More details are in the documentation.

    However, it might be simplest just to have a simple view (maybe Verilog-A or a simple schematic using voltage sources or whatever?) which outputs the value in whatever form you want and have the value controlled by a variable on the instance. That global variable could be added into your corner definitions so that for each corner the global variable has the value you previously captured in your mixed-signal simulations.

    Regards,

    Andrew.

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

    Andrew, 

    I do not quite follow.

    Within the corner definitions, I have a bunch of variables. But at the very bottom I get to choose the model files,  which I setup with specific names, like FF ( fast fast), SS (slow slow). I name them and select the appropriate model file and section. I do all this when I add/edit model groups. I can send you some pictures but can't seem to attach images.

    The problem is there is no variable that tells me what the process corner that is being currently run by the simulator.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 10 years ago

    I was suggesting that you add a variable which either corresponds to the corner somehow, or is just the calibration value, and have that track the corners - so there's one value per corner.

    You'd probably need to expand your corners though (which you can do with the right mouse button over the corner) so that you don't end up with orthogonal sweeps in the corners (i.e. if you have a corner definition with FF,SS,TT for models and -40,125 for temp then adding a new variable with multiple values would be an orthogonal sweep rather than a "paramset" sweep).

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • kawan
    kawan over 10 years ago
    I see the point you make about the global variable but that means I need to expand my corners like you said. I was hoping that there would some way for me to detect the process/model file that is being run. Thanks for the prompt responses.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 10 years ago

    OK, here's an approach that should work and is fairly simple.

    First create a variable for your test called (say) cornerNum and give it a default value (say 0). Then over the test do Right Mouse->Pre Run Script. On the form hit the "Load Template" button and then the edit icon (the one on the left) and erase the contents and replace with:

    ocnxlUpdatePointVariable("cornerNum"
      sprintf(nil "%d"
        case(axlGetCornerNameForCurrentPointInRun()
          ("" 0)
          ("C0_0" 1)
          ("C0_1" 2)
          ("C0_2" 3)
          ("C0_3" 4)
          ("C0_4" 5)
          ("C0_5" 6)
          ("C0_6" 7)
          ("C0_7" 8)
          ("C0_8" 9)
          (t 0) ; default in case matching corner not found
        )
      )
    )

    Save and quit the editor and OK the form. You could also just refer to an existing file rather than using the template approach, but I was trying to keep it simple.

    If I use VAR("cornerNum") in my output expressions, I see the corner number tracking the corner. Of course, you can change the above case statement to match your actual corner names, or use SKILL code to look up the mapping from a file, or rather than having a corner number you could use your captured calibration values - take your pick.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • kawan
    kawan over 10 years ago
    I will try this out. Thanks!!
    • 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