How to access data from a corner simulation with ocean

Discussion in 'Cadence' started by Svenn Are Bjerkem, Feb 8, 2005.

  1. 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 Are Bjerkem, Feb 8, 2005
    #1
  2. Svenn Are Bjerkem

    fogh Guest

    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, Feb 9, 2005
    #2
  3. 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.

    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 Are Bjerkem, Feb 9, 2005
    #3
  4. 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 Are Bjerkem, Feb 9, 2005
    #4
  5. 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.
    two temperatures, two supplies and rest process
     
    Svenn Are Bjerkem, Feb 10, 2005
    #5
  6. Svenn Are Bjerkem

    fogh Guest

    Dammit! I am really guessing wrong every time on this one. Maybe you are
    now done with this problem already.
    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 ?
    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.
    if you using resultDir , or getData(), does give what you want, just go
    for it !


    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 ?
     
    fogh, Feb 13, 2005
    #6
  7. 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.
     
    Andrew Beckett, Feb 14, 2005
    #7
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.