I have an oscillator design, and I would like to make sure that it will oscillate over a range of component values. Because "oscillation" is a binary sort of issue (it does or it doesn't), normal sensitivity analysis won't work. I can do yield analysis, but it just tells me what my yield is. I haven't figured out a way to interpret/plot the results to tell me what component values caused it to fail. I can play around with tuning each component manually, but I don't want to have to go through that exercise each time I make a change.
The yield system should have the info I need, but I don't understand how to get at it. For example, let's say I have an L & a C that I want to work with. What I'd like to get is a plot of what range of values for each gives me 100% yield. To make life more complicated, the results will not be independent. I could do a surface plot, but I get stuck if I add another variable. Because it's a Monte Carlo analysis, one option would be a list of all of the parameter combinations that worked. It would be a pain to wade through but at least I could see what was going on. There are a variety of yield variables, but I haven't found the section in the manual that explains exactly what they are. Experimental plots haven't given any results that make sense to me. They do warn you that if you ask for all of the simulation data, that it will be huge & slow the simulation down. No where do they explain exactly what info would be contained in such a data set, or how to get at the bits I need.
I tried yield optimization, but that only comes up with a single value that it is happiest with, not a range, nor does it provide info on any interactions.
Any suggestions would be appreciated. Is there an example someplace that deals with this?
Thanks!
The yield system should have the info I need, but I don't understand how to get at it. For example, let's say I have an L & a C that I want to work with. What I'd like to get is a plot of what range of values for each gives me 100% yield. To make life more complicated, the results will not be independent. I could do a surface plot, but I get stuck if I add another variable. Because it's a Monte Carlo analysis, one option would be a list of all of the parameter combinations that worked. It would be a pain to wade through but at least I could see what was going on. There are a variety of yield variables, but I haven't found the section in the manual that explains exactly what they are. Experimental plots haven't given any results that make sense to me. They do warn you that if you ask for all of the simulation data, that it will be huge & slow the simulation down. No where do they explain exactly what info would be contained in such a data set, or how to get at the bits I need.
I tried yield optimization, but that only comes up with a single value that it is happiest with, not a range, nor does it provide info on any interactions.
Any suggestions would be appreciated. Is there an example someplace that deals with this?
Thanks!
On the Yield/Monte Carlo-Controller, go to the Parameters tab and make sure "Random Variables" is checked.
In the dataset you will now find the component values that varies for each iteration (mcTrial).
How to make sense of all this data is a bit of a challenge as you've already figured out. One way is to look at the sensitivity of each component vs some criteria, for instance Yield.
There is one example which ships with ADS that you can look at:
/examples/Tutorial/Statistical_Design_prj
(You can download the ADS 2003C version of this example here in case you don't have the examples installed)
If you open this example and look at the data display called sens_hist_all_parts.dds. This datadisplay plots the sensitivity for all parts vs the total Yield. What you can tell from this kind of plots is if there is any component(s) that is extra sensitive. In this case you can see that Lres1 is very sensitive and has to be kept under control, i.e. buy extra tight tolerance on this part or use tuning.
What these type plots still don't show you is which combinations of component values are good/bad. For two components you could do a surface plot, but with many components then it's more complicated.
The sensitivity plots vs component values are the only thing I can think of right now. Someone else might have an idea!?
To adapt the sensitivity plot to you case, i.e. Osc/No Osc, you could do something like this:
I did some experiments with this Oscilator example and found that the Oscillation frequency was 0 Hz for the iterations which failed to oscillate.
This equation indicates all iterations which failed to oscilliate:
MyOsc = if (OscFrequency == 0) then 1 else 0
You can the relate this to a component, for instance C1:
Osc_vs_C1 = vs(MyOsc,C1)
Finally, you can create a histogram like this:
Osc_Sens_vs_C1 = yield_sens(Osc_vs_C1,21)
where 21 is the number of binaries in the histogram
If you plot Osc_Sens_vsC1 you will get a histogram which indicates which component values of C1 caused a oscillation failure. You will have to write these three equations for each component. You can then see which range of values, for each component, causes problems.
I hope this is of some help..