Home > Community > Blogs > Custom IC Design > things you didn t know about virtuoso outputs setup in ade xl
 
Login with a Cadence account.
Not a member yet?
Create a permanent login account to make interactions with Cadence more conveniennt.

Register | Membership benefits
Get email delivery of the Custom IC Design blog (individual posts).
 

Email

* Required Fields

Recipients email * (separate multiple addresses with commas)

Your name *

Your email *

Message *

Contact Us

* Required Fields
First Name *

Last Name *

Email *

Company / Institution *

Comments: *

Things You Didn't Know About Virtuoso: Outputs Setup in ADE XL

Comments(19)Filed under: Custom IC Design, Virtuoso, Virtuoso IC 6.1.3, IC 6.1.4, Virtuoso Analog Design Environment, IC 6.1, analog, ADE, ADE-XL, Analog simulation, ADE-GXL

Continuing on our exploration of ADE XL (see here and here for previous articles), today let's take a look at the Outputs area in the center of the screen. 

Any output signals or expressions which appear in the ADE XL Test Editor (or the ADE L window if you created the setup in there) will show up automatically in the Outputs Setup tab.  You can still work with them the same way you always have by bringing up the Test Editor (RMB on the test name in the Data View Assistant and select Open Test Editor...).

But I'm not here to tell you how to do things the same way you've always done them...

Let's start by taking a look at the row of icons at the top of the Outputs Setup tab.  The first one on the left is a pulldown that allows you to add various types of outputs and measurements to each test.  So if you want to add an expression, select the appropriate test and choose "Expression".  A new blank line of type "expr" will show up at the bottom of the pane.  Now, double-click in the field under the column "Expression/Signal/File."  You'll be able to type into the field, and you'll also see 2 cryptically labelled buttons. 

  • Just an aside here...whenever you see a button, icon or even a piece of text that you don't understand in Virtuoso, try hovering your mouse over it for a second.  Hopefully, you will be rewarded with a pink box containing a tooltip telling you what that button does.  We'd like these tooltips to be helpful and usually they are.  But sometimes the tooltips are missing and sometimes they're downright silly.  Let us know about those, so we can fix them...or at least share a good laugh...

Anyway, back to adding an expression.  In case you didn't catch the hint, hover your mouse over the 2 buttons in the "Expression/Signal/File" field to see what they do.  Now, use one of them (hint: "...") to open the calculator. 

I'm not going to get into how to use the calculator in this article.  I did an article on it late last year and I'll probably fill up one or two more later this year as well. 

Let's fast forward to the part where you've got an expression in the calculator buffer that you want to get it back into ADE XL.  Go back to the ADE XL window and click on the other mysterious icon in the "Expression/Signal/File" field (hint: "<") to pull the contents of the calculator buffer into the field.

Tip: There's another way to do this if you've already got the calculator open.  To save yourself some window hopping, verify that the test name showing in the "Test" pulldown at the top of the calculator is the one you want to work with, then select Tools->Send to ADE XL Test from the calculator banner menu.  This automatically creates a new expression for that test in the Outputs Setup tab and sends the contents of the calculator buffer to populate it.

Dependent Expressions

Earlier this year I wrote about the exciting news that dependent expressions are now supported in IC 6.1.4 for ADE L.  Well, that goes for ADE XL as well.  If you want to build an expression which is built from other expressions, all you have to do is use the name of the expression (which, of course, you can assign in the Name column of the Outputs Setup panel) and off you go.

This works for creating multiple expressions within the same test.  To build expressions using results from multiple tests, you use what we refer to as...

Combinatorial Expressions

To create an output expression using results from multiple tests, just drag the desired expressions (one at a time) starting from any field in the line containing that expression in the Outputs Setup pane and drop them into the calculator buffer.  When you drop in an expression, you'll see that it has morphed into a different syntax:  calcVal("expression_name" "test_name").  You can use the calculator as usual to build the expression and then use either of the 2 methods described above to get it back into ADE XL.

Bonus Tip: You can create combinatorial expressions for variables in the same way, by dragging from the Outputs Setup pane into the desired Value field in the Global Variables or Design Variables sections of the Data View or Variables and Parameters Assistants (we'll talk more about variables in a future article). 

In this way, you can set a design variable value, such as a voltage or current source based on results from another test.

Obviously, you'll need to avoid creating a cyclic dependency when you do this (a variable value which depends on results from a test which uses that variable).  ADE XL will scold you if you try.

combinatorial

Quick ways to create more output expressions

Sometimes you might need to use the same (or similar) expressions in several tests.  To do this, simply RMB over the expression you want to use in another test, select Copy to Test and choose the test(s) you want to copy it to.  You can also use Ctrl-Select or Shift-Select to grab multiple expressions and copy them all to another test.  Of course you can edit them as desired after you copy them.

Tip: Double-click on an expression in the Outputs Setup pane and click that "..." icon I mentioned above to push the expression into the calculator buffer if you want to edit it more easily.

Ctrl-C and Ctrl-V also work to copy just the contents of a particular field from one place to another.

Well, I thought I'd have time for a lot more in this article, but it'll have to wait until next time.  As always, leave a comment if you find any tips of your own to share or if there are any topics you'd like to see discussed further.

Stacy

Comments(19)

By Paul on September 15, 2010
Dependent expressions are not available in 6.1.3, as it is in simple ADEXL using skill commands.  For example, I am trying to calculate a voltage difference from a parametric data set....  with Vdiff = (value(v("vnet!" ?result "ac-ac" ?resultsDir resultsDir()) "TestCase" 1) -  value(v("vnet!" ?result "ac-ac" ?resultsDir resultsDir()) "TestCase" 0)), and I receive the warning message:
WARNING (OCN-6004): The ocean session was not created. In order to proceed create the session by setting simulator using the following command:  simulator('simulator_name)
Yet, after the simulation, I can simply copy the output expression into the calculator and it will calculate a value.  Is there anyway in 6.1.3 to get ADEXL to wait until the parametric sweep is done to make a simple calculation?

By stacyw on September 17, 2010
Hi,  Thanks for the feedback.  I'm not sure I completely understand what you are trying to do, but I'll take a guess that you want to make some measurement relating measured values from different points in a parameter sweep.  
You're right.  At this time, the way to do this in ADE XL is to use the calculator after the sweep is finished.  Unfortunately, then you can't store the expression in ADE XL.  We are planning this capability for a future enhancement.
There are a couple of tricky methods for this kind of thing, neither of which will likely "wow" you, but I'll state them anyway in case you may find them interesting for other applications.
1. Starting in recent ISRs of IC 6.1.3 (don't recall exactly which) the calculator has a feature called the Expression Editor (you can find it under "Expression" on the pulldown in the bottom Functions area of the calculator).  You can send any expression there from the buffer by using the "E+" icon under the buffer.  Expressions stored here can be saved, loaded and evaluated at any time in any later session.  So you don't have to re-send expressions to the calculator from ADE XL after each run.  They will already be there.
2. Something even trickier would be to break up the parameter sweep into separate tests, one test for each point in the sweep.  Then you can use dependent expressions to do the measurements.  It looks uglier, but could suffice in some cases.
Hope this at least let's you know a few options.
Thanks,
Stacy

By csr on October 6, 2010
Hi, I have a problem using this feature:
In the calculator I type:
(calcVal("Acoeff" "dc_sim") * 1 * VS("/word"))
When I click on the evalution button the expected wave is drawn. But inside ADE-XL, there is no way to plot this wave, and I have the following error message in Virtuoso window:
WARNING (ADE-1058): Symbol(s) named " 'Acoeff' " used in the definition of dependent expression
       Name:'reg_wave'
       Expression:'(calcVal("Acoeff" "dc_sim") * 1 * VS("/word"))'
     have not been defined as expressions. This may result in evaluation errors or ambiguous values for the dependent expression.
     Either add these symbol(s) as BLOCKED EXPRESSION in the Outputs or remove them from the definition of the dependent expression.
*Error* ("times" 74 t nil ("*Error* times: can't handle (nil * 1)"))
ERROR (ADE-1057): Could not evaluate expression
       Name:'reg_wave'
       Expression:'(calcVal("Acoeff" "dc_sim") * 1 * VS("/word"))'
    because of the following error(s)
       ("times" 74 t nil ("*Error* times: can't handle (nil * 1)"))
    Ensure that the definition of the expression is correct.
What can I do ?

By fg03 on October 6, 2010
this feature does not work with Monte-Carlo simulation...

By stacyw on October 6, 2010
Hi,
Thanks for the comments!  First I want to verify that you are using version IC 6.1.4, as dependent expressions are not supported in IC 6.1.3 or before.
You raised 2 issues.
1. Problem plotting expression in ADE XL (calcVal("Acoeff" "dc_sim") * 1 * VS("/word"))
Now, I'm guessing from the error message that the problem is that you are trying to use calcVal in an expression in the same test ("dc_sim").  calcVal is only for bringing in expressions from different tests.  So if you have 2 tests, testA and testB and expression X is in testA, then you can define expression Y in testB using:
in testB:
Y=calcVal("X" "testA") * [some_stuff_from_testB]
If you try to do:
testA:
Y=calcVal("X" "testA") * [some_stuff_from_testA]
You will get the message you indicated in your comment.  Kind of a silly restriction, but in that case you would only need to do:
testA:
Y= X * [some_stuff_from_testA]
If, in your case, the expression (calcVal("Acoeff" "dc_sim") * 1 * VS("/word")) is created in a test other than "dc_sim", the this is a bug and you should report it to Customer Support.
2. Problems with using "this feature" (not sure which "feature" you are referring to) in Monte Carlo.
Of course, I would need to see exactly what is failing, but in some versions we have had bugs using dependent expressions in Monte Carlo, so verify that you are using the latest ISR (ISR7 as of this posting).
Also, I did find that using a combination of calcVal and dependent expressions currently does fail in Monte Carlo analysis.  I have filed a CCR for this internally, but I would STRONGLY suggest you do so as well, as customer CCR's always carry more weight!

By Mike on April 1, 2011
I have a user defined function that works in the calculator. But when I use that in the Output Setup of ADEXL, it doesn't work. It says the function is not defined.
Please help with this.

By stacyw on April 5, 2011
I can't say for sure what the problem is, but you'll need to make sure the function definition is loaded (e.g. loaded in your .cdsinit file) and accessible when ADE XL launches the job on the remote machine using whatever job distribution mechanism you have.  I'm sure Customer Support can help you with details.
Stacy

By rkic on October 31, 2011
How can i push an expression in the calculatior buffer into the function panel such that it auto populates the corresponding fields in the function panel with the appropriate values? My intent here is to be able to re-use some of the fields and make updates to some of them without having to create a function from scratch.

By stacyw on November 1, 2011
Hi,
Thanks for the question.  I actually don't see any shortcut way to do this.  Of course, you can bring the expression into the buffer and edit it there, or send it to the Expression Editor in the calculator and edit it there (or save to, edit in then load from an external file).  But I don't think you can repopulate all the fields of the function to create a new instance of the function.  
That said, the calculator will tend to remember the last values you used for any given function, so the next time you create, say, a slew rate function, the fields will be populated with the values you used the last time.
Stacy

By Paul on January 17, 2012
Hi Stacy
I want to do what you mentioned above:
'make some measurement relating measured values from different points in a parameter sweep'
I need to sweep a variable, e.g. amplitude, and measure the step size of an output that needs skill to do the calculation (an ocean output instead of expr). I have done it the ugly way where I broke the sweep into individual tests. This very un-weildy and not very flexible.
Since it has been over a year since you made the comment ' We are planning this capability for a future enhancement.' do you know if anything has been done?
I am running IC6.1.5.500.8
Paul

By stacyw on February 10, 2012
Hi Paul,
You may find what you need in my latest post:
www.cadence.com/.../things-you-didn-t-know-about-virtuoso-we-re-in-your-corner.aspx
Measurements across corners was implemented in 6.1.5 ISR6, so you should have access to it.  You'll need to run your sweep as a corners run, then you can make various measurements on the results using the measured values over the swept corners variable(s).
Hope this helps.
Stacy

By Lance Trodd on August 9, 2012
Hi Stacy.  I want to sweep a variable, a DAC code 0-15 say and have expressions that operate across that variable. Say I want to normalise all the results from each code setting  to that of code 15. This would have been simple with a transient ramp but I chose a dc sim and varied the code across 16 separate tests, each with a unique code setting. I use the calcVal to normailise all the results in each test to test 15. Works great but I can't plot my results across tests. You can plot acros corners or design point but not tests. If I try and ctrl  select  all the separate test results  and then do a plot, the results are in separate waveform windows and not wrt to the intended code setting. So how can i plot a result across test and nominate a variable to plot against? Or maybe ADEXL should sense the only variable different across the tests and plot against this. Or ADEXL should ask what to plot wrt. Then I would run over process corners and have a separate line graph for each process corner. I also read your article on the link above about MAC expressions and plotting expressions across corners. I would then have to assign my variable as a corner but then it would have been mixed up with process corners. I wish I had ramped the code over time in a transient sim now :-(

By stacyw on August 10, 2012
Hi Lance,  Thanks for your feedback.  You are right that you can't plot across tests, unfortunately.  You say that you ran a dc sim.  Perhaps you could try a dc sweep instead.  Then you could do something like:  VS("/OUT") / value( VS("/OUT") 15).  

By mt on November 28, 2012
Hi Stacy, I have been working on some scripts that reads the output signals/expressions from the ADE outputs area and operates on them then sets them back to the results of the modified outputs. I got one problem that the procedure "asiGetPlotList" returns only the signals so i used "asiGetOutputList" this one gets both signals and expressions. but any modification in the values returned by this procedure is reflected directly on the ADE output section. If i created the output structure "sevOutputStruct" I can't find a way to add this structure to the output section of the ADE can you help me with that. Thanks a lot for you help

By stacyw on December 5, 2012
Hi,  It's not entirely clear to me what you are trying to do.  If you are trying to add an expression in ADE L, you could try the sevAddExpression function.  In ADE XL, you could use axlAddOutputExpr and axlAddOutputSignal.  You can also use the menu pick from ADE L Outputs->Export to export the output signal and expressions to a text file, then you can do some modification and do Outputs->Import to read them back in.

By Franzi on March 6, 2013
Hi,
I've been trying to figure out how reusing test results in another test as design variables works. In your article you mention that it's possible, but I can't make it work. I'm calculating calibration data in testA and want to use it as an input in testB and perform a monte carlo analysis. TestB however does not run and doesn't even give an error message. Is what I'm trying to do actually not possible?
Thanks for any help.

By stacyw on March 15, 2013
Hi,  For multi-test expression reuse in Monte Carlo, the best recommendation is to use a pre-run calibration script.  You can find more information in the documentation and there is an extensive application note (including examples) here: support.cadence.com/.../cos  (or search Cadence Online Support for "Calibrated Verification with ADE XL")  

By Parameswaran on June 5, 2013
I am not being able to use results from multiple tests. I am testing a diff amp and have two tests together for finding differential and common mode gain. I created an output expression just like you've shown and it comes to :
(calcVal("DIFF_G" "TEST_DIFF:1") - calcVal("COMM_G" "TEST_COMM:1"))
where DIFF_G and COMM_G are the output names for differential and common mode gain.
This produces an 'eval_err'.
This seems to be because the calcVal("COMM_G" "TEST_COMM:1") evaluated in the calculator produces the same result as the differential gain because "TEST_DIFF:1" seems to stay in the 'Test' option in the calculator.How to get over this?
Regards,
Parameswaran

By stacyw on June 17, 2013
Hi Parameswaran,  You don't need to use the calcVal syntax for the measurement coming from same test as the measurement.  So, for example, you could add your expression to TEST_DIFF:1 and it would be: (DIFF_G - calcVal("COMM_G" "TEST_COMM:1"))

Leave a Comment


Name
E-mail (will not be published)
Comment
 I have read and agree to the Terms of use and Community Guidelines.
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.