How to access data from a corner simulation with ocean

  • Thread starter Svenn Are Bjerkem
  • Start date
S

Svenn Are Bjerkem

Guest
Hi,
this is probably a very easy question so I searched some manuals to find
out how to to plot one single run from a corner simulation. I so far
have found a way that opens the psf file of each run separately.

Is there a way to tell the macros which corner I want? Or is there a
command that I can use to find out which corners or parametric runs are
available at all?

--
Svenn
 
Svenn Are Bjerkem wrote:
Hi,
this is probably a very easy question so I searched some manuals to find
out how to to plot one single run from a corner simulation. I so far
have found a way that opens the psf file of each run separately.

Is there a way to tell the macros which corner I want? Or is there a
command that I can use to find out which corners or parametric runs are
available at all?
Hi Svenn,

if you run "normal" simulations (as opposed to the "advanced" ones,
parametric, montecarlo, ...) in ocean, you have to keep track of what
result directory corresponds to what run.
When you run from the GUI a parametric analysis, a so called "run
object file" (ROF) glues together the different result directories, so
that you can obtain waveform families. This does not happen with ocean.
I also found no procedural way to generate ROFs from ocean, so I am
interested if you find a solution.

There is also a solution without using either ocean or the java corner
tool: If you have access to the model file, you can run over corners
using a parametric analysis. But I must admit... it works OK only with
spectre 6 running in batch mode. You can switch between different
altergroups using the structural "if" statement. In these altergroups
you can modify the parameters that are used in the modelling. ( If the
modelling is not parameterised, then it may not work. I did not try that.)
 
fogh wrote:
if you run "normal" simulations (as opposed to the "advanced" ones,
parametric, montecarlo, ...) in ocean, you have to keep track of what
result directory corresponds to what run.
When you run from the GUI a parametric analysis, a so called "run
object file" (ROF) glues together the different result directories, so
that you can obtain waveform families. This does not happen with ocean.
I have not yet run a corner run from ocean so I don't know how ocean
does this. I use the corner tool to simulate, and I use ocean to plot
some of the results because I can control such things like subwindows
and titles etc. If I, after a corner run, do a simple
plot(v("/dut/out")), then a cloud of curves occur on the plot. Thats
nice, but this cloud consist of all corners, slow, fast etc and
temperature. If I want to have a plot with curves at only 100 degree, or
like I try to do now: a strip plot of the two inputs of an opamp in a
regulation loop, in each strip a separate corner and temperature. This
can be arranged in awd with the Curves->edit function but is rather tedious.


There is also a solution without using either ocean or the java corner
tool: If you have access to the model file, you can run over corners
using a parametric analysis. But I must admit... it works OK only with
spectre 6 running in batch mode. You can switch between different
altergroups using the structural "if" statement. In these altergroups
you can modify the parameters that are used in the modelling. ( If the
modelling is not parameterised, then it may not work. I did not try that.)
With batch mode you mean starting from the command line? We use a
mixture of spectre and an in-house simulator. For my current project I
have to use the in-house simulator. It is integrated into ADE so that it
is possible to use ocean, but I'll have to wait for my next project to
test this solution.

--
Svenn
 
fogh wrote:
if you run "normal" simulations (as opposed to the "advanced" ones,
parametric, montecarlo, ...) in ocean, you have to keep track of what
result directory corresponds to what run.
Reading The Fine Ocean Manual came up with some info on this:
The sweepValues() function give me a list of the named corner
simulations. Together with selectResult() this should be theoretically
done like this:

openResults(...)
selectResult('tran)
corners = sweepValues()
foreach( corner corners
selectResult('tran corner)
plot(v("/dut/net01"))
...
)

When doing this on the CIW command line, everything goes well until that
plot command:
*Error* Error in evaluating sweep value "slow100"
But something is plotted, but I broke it off because it took too long time.

I then checked the following on the commandline:
selectResult('tran "slow100")
plot(v("/dut/net01"))
Same error message and this time it plotted /dut/net01 28 times. (I have
28 corners). Somehow plot or me doesn't understand something here.

--
Svenn
 
Hi Svenn,
forget my previous post. I did not understand you were interested only in
post-processing.

You run "slow100" probably failed. You should try to open it with the result
browser, or list files in there. I bet there is no transient psf.
That is the trick with corners and worst cases: it is also stressing your
simulation setup, so there can be corners where a typical 10minute simulation
becomes hours long, where no initial solution is found, etc ... This happens
more with pss simulations.

About the corners themselves, are those 28 all process related, or do you have
something like 3process*3supplies*3temperatures (+ 1 for the tip.) ?

I am interested in anything related to application of design-of-experiment
techniques to simulations, and also mismatch analysis.

Svenn Are Bjerkem wrote:
fogh wrote:

if you run "normal" simulations (as opposed to the "advanced" ones,
parametric, montecarlo, ...) in ocean, you have to keep track of what
result directory corresponds to what run.


Reading The Fine Ocean Manual came up with some info on this:
The sweepValues() function give me a list of the named corner
simulations. Together with selectResult() this should be theoretically
done like this:

openResults(...)
selectResult('tran)
corners = sweepValues()
foreach( corner corners
selectResult('tran corner)
plot(v("/dut/net01"))
...
)

When doing this on the CIW command line, everything goes well until that
plot command:
*Error* Error in evaluating sweep value "slow100"
But something is plotted, but I broke it off because it took too long time.

I then checked the following on the commandline:
selectResult('tran "slow100")
plot(v("/dut/net01"))
Same error message and this time it plotted /dut/net01 28 times. (I have
28 corners). Somehow plot or me doesn't understand something here.
 
fogh wrote:
You run "slow100" probably failed. You should try to open it with the
result browser, or list files in there. I bet there is no transient psf.
That is the trick with corners and worst cases: it is also stressing
your simulation setup, so there can be corners where a typical 10minute
simulation becomes hours long, where no initial solution is found, etc
... This happens more with pss simulations.
my slow100 process did not fail. I have tried with another simulation
run and when I use the vs button in calculator, then all corners are
shown in the plot.

When I do a selectResult 'dc "garble" I get an object returned. If I try
to access the data, like with v("/output") then the error message
*Error* -error in evaluating sweep value "garble"
shows up. This means probably that the value of the sweep corner is not
evaluated until i try to access the data. So it is just a matter of
finding out what to put into that argument to selectResult()

In the ocean manual they talk about getting a specific result out of a
parametric simulation like this:
selectResult(’tran car( sweepValues()))
and that is probably where the dog is buried. I tried a quick parametric
simulation, and the directory structure is something like this:

schematic-+- Corners -+- slow100lv
| +- slow100hv
| +- fast100lv
. .
+- voff=1
+- voff=2
+- voff=3

except that the Cornsers directory is empty after running the parametric
sim and the parametric directories are gone after the corner sim.

For some reason the sweepValues() report the corners correctly, but the
alias function v() does not evaluate the location correctly because it
thinks that slow100 is schematic/slow100/psf or something like that. I
tried selectResult( 'tran "Corners/slow100lv" ) also but it didn't
cooperate.


I guess I will have to use the result from sweepValues() to create an
absolute path to the psf and then use the v( net ?result ?resultDir)
function. I can't understand that is is so difficult to extract one or
two curves out of a corner cloud.

About the corners themselves, are those 28 all process related, or do
you have something like 3process*3supplies*3temperatures (+ 1 for the
tip.) ?
two temperatures, two supplies and rest process



--
Svenn
 
Svenn Are Bjerkem wrote:
fogh wrote:

You run "slow100" probably failed. You should try to open it with the
result browser, or list files in there. I bet there is no transient psf.
That is the trick with corners and worst cases: it is also stressing
your simulation setup, so there can be corners where a typical
10minute simulation becomes hours long, where no initial solution is
found, etc ... This happens more with pss simulations.
my slow100 process did not fail. I have tried with another simulation
run and when I use the vs button in calculator, then all corners are
shown in the plot.
Dammit! I am really guessing wrong every time on this one. Maybe you are
now done with this problem already.

When I do a selectResult 'dc "garble" I get an object returned. If I try
to access the data, like with v("/output") then the error message
*Error* -error in evaluating sweep value "garble"
shows up. This means probably that the value of the sweep corner is not
evaluated until i try to access the data. So it is just a matter of
finding out what to put into that argument to selectResult()
selectResult can probably accomodate to any argument type that is a
valid element of the list returned by sweepValues()
Many things in ocean are just "shapeshifters", that is already the
case in SKILL, but since ocean is made of SKILL++ , that is even more
so. The point being: don't try to guess the type of the elements of
sweepValues. Better to just follow the manual and use nth() or car().
That is what you did in the beginning. You problem was that the last
corner was giving you all curves (the family) of a parametric analysis,
right ?
I have never tried anything more complicated in listing/selecting
analysis and results than the examples of ocnHelp()

Your particular problem is that you want the curve settings to be
saved. Is the awd file->save menu not giving you what you want ?

In the ocean manual they talk about getting a specific result out of a
parametric simulation like this:
selectResult(’tran car( sweepValues()))
and that is probably where the dog is buried. I tried a quick parametric
simulation, and the directory structure is something like this:

schematic-+- Corners -+- slow100lv
| +- slow100hv
| +- fast100lv
. .
+- voff=1
+- voff=2
+- voff=3

except that the Cornsers directory is empty after running the parametric
sim and the parametric directories are gone after the corner sim.
I would not expect that mixing two analysis goes too well. That is why
I proposed you put the corners in the parametric by modifying the model
file.

For some reason the sweepValues() report the corners correctly, but the
alias function v() does not evaluate the location correctly because it
thinks that slow100 is schematic/slow100/psf or something like that. I
tried selectResult( 'tran "Corners/slow100lv" ) also but it didn't
cooperate.


I guess I will have to use the result from sweepValues() to create an
absolute path to the psf and then use the v( net ?result ?resultDir)
function. I can't understand that is is so difficult to extract one or
two curves out of a corner cloud.
if you using resultDir , or getData(), does give what you want, just go
for it !



About the corners themselves, are those 28 all process related, or do
you have something like 3process*3supplies*3temperatures (+ 1 for the
tip.) ?
two temperatures, two supplies and rest process
7 process corners. That may be already worth using the " if(corner) then
altergroup " trick.
Are they defined as speed corners, power corners, skew, ... or setting
process variables ( underetch , sheet resistance, ...) one after another
at + or - 4 sigma ?
 
Svenn,

This looks like a bug. I just tried using selectResult('tran "mycornername")
on some corner results that I have, and I got the same error when I
do v("/out") for example - I did some digging down in the code, but the error
is coming from some rather low level. Either way, it needs a PCR.

I'll file a service request and PCR for this.

As an alternative, you can select a corner using the value function:

plot(value(v("/output") 'C "slow100"))

Note there is a problem with using value with family data where 2 or more
variables are being swept - see my sourcelink solution 11021230 which
explains how to workaround this using famMap.

Andrew.

On Thu, 10 Feb 2005 15:00:01 +0100, Svenn Are Bjerkem <svenn.are@bjerkem.de>
wrote:

fogh wrote:
You run "slow100" probably failed. You should try to open it with the
result browser, or list files in there. I bet there is no transient psf.
That is the trick with corners and worst cases: it is also stressing
your simulation setup, so there can be corners where a typical 10minute
simulation becomes hours long, where no initial solution is found, etc
... This happens more with pss simulations.

my slow100 process did not fail. I have tried with another simulation
run and when I use the vs button in calculator, then all corners are
shown in the plot.

When I do a selectResult 'dc "garble" I get an object returned. If I try
to access the data, like with v("/output") then the error message
*Error* -error in evaluating sweep value "garble"
shows up. This means probably that the value of the sweep corner is not
evaluated until i try to access the data. So it is just a matter of
finding out what to put into that argument to selectResult()

In the ocean manual they talk about getting a specific result out of a
parametric simulation like this:
selectResult(’tran car( sweepValues()))
and that is probably where the dog is buried. I tried a quick parametric
simulation, and the directory structure is something like this:

schematic-+- Corners -+- slow100lv
| +- slow100hv
| +- fast100lv
. .
+- voff=1
+- voff=2
+- voff=3

except that the Cornsers directory is empty after running the parametric
sim and the parametric directories are gone after the corner sim.

For some reason the sweepValues() report the corners correctly, but the
alias function v() does not evaluate the location correctly because it
thinks that slow100 is schematic/slow100/psf or something like that. I
tried selectResult( 'tran "Corners/slow100lv" ) also but it didn't
cooperate.


I guess I will have to use the result from sweepValues() to create an
absolute path to the psf and then use the v( net ?result ?resultDir)
function. I can't understand that is is so difficult to extract one or
two curves out of a corner cloud.


About the corners themselves, are those 28 all process related, or do
you have something like 3process*3supplies*3temperatures (+ 1 for the
tip.) ?
two temperatures, two supplies and rest process
 

Welcome to EDABoard.com

Sponsor

Back
Top