Interesting observation on awd

Discussion in 'Cadence' started by svenn.are, Oct 26, 2004.

  1. svenn.are

    svenn.are Guest

    Hi,

    awd has the feature of horizontal and vertical markers. These are
    extremely useful, sometimes more useful as the A and B markers as I
    can have the intersect points printed.

    I have observed that the vertical markers are always available. The
    horisontal markers are sometimes grayed out. This is probably because
    it would make no sense to place a horizontal marker, like when more
    than one y-axis are used. (May be expeptions, though).

    I mostly declare my plots as expressions fetched from the calculator
    as I want to use dB20 and phase functions, and at the same time be
    able to use the plot button in ADE.

    In an attempt to plot three different open-loop simulations I
    discovered that when adding two subwindows and moving graphs so that I
    had the three simulations separate, I was able to place horizontal
    markers in the two added windows, but not in the original one. I added
    a fourth subwindow, moved the ones in the *expressions* window there
    and was then suddenly able to add horizontal markers. I could then
    delete the empty *expressions* window and place horizontal and
    vertical markers in all windows.

    Why fussing with the markers at all? I find it extremely convenient to
    place horizontal markers at 0dB to find the unity gain frequency with
    display intercept values. (Sometimes awd also forget the 0 value on
    the y-axis annotation depending on range on the y-axis. Indeed a bug
    in my opinion.) Then I place a vertical marker at that frequency to
    find the phase margine. I can then go on and place a horizontal marker
    at -180 deg to find the frequency where my circuit become positive
    feedback, and then place a marker to find the gain margine. Get the
    intercept values, add those numbers as annotations and, voila, the
    documentation of the work is finished.

    PM and GM can all be found with the calculator, and is an alternative
    way to find the frequencies at which I place my markers. I find it
    more convenient to have the markers in the plot as I can easily see
    what is going on just before and just after the critical points. PM
    and GM calculated from the calculator are just numbers. (Another thing
    is that when you have to work with CDE, you would like to do as much
    work in windows that pop up by themselves, the calculator is always on
    the bottom....)

    Now I have given a rationale why I do it this way, and maybe somebody
    can tell me why the original *expressions* window does not allow
    horizontal markers when it actually should have.

    Kind regards,
     
    svenn.are, Oct 26, 2004
    #1
  2. svenn.are

    fogh Guest

    It is generally speaking difficult to do things post-process. You either have
    to carefully define your outputs, choose a specific spectre analysis (S, PZ, or
    stability in your case ) or write your postprocessing in ocean.

    Anyway, there is enough that can be done with awv when you get to know it a bit.
    There is one thing I would still like to learn: how to you group multiple waves
    into a family. And a related one: how to generate a customised ROF after ocean runs.

    Did you try the new waveform viewer too ("wavescan" if I remember) ?

    I use these to help me build my X vector:

    (defmacro cfor (initExpr testExpr incrExpr @rest bodyExprs)
    `(let ((l_return nil))
    ,initExpr
    (while ,testExpr
    ,@bodyExprs
    l_return=tconc(l_return ,incrExpr )
    );while
    car(l_return)
    );let
    );mac
    procedure(as(start stop step)
    cfor(i=start-step i<stop i=i+step i) )
    procedure(an(start stop numpoints) let( ( (step 1.0*(stop-start)/numpoints) )
    as(start stop step) ) )
    procedure(gs(start stop ratio)
    cfor(i=start/ratio i<stop i=i*ratio i) )
    procedure(gn(start stop numpoints) let( ( (ratio
    1.0*exp((ln(stop)-ln(start))/numpoints)) )
    gs(start stop ratio) ))
    procedure(en(start stop numpoints) let( ( (ratio
    1.0*exp((ln(10)-ln(1))/numpoints)) )
    gs(start stop ratio) ))

    /* example */
    w1=expr(x sin(x)/x an(1p 15 10000))
    w2=w1+flip(w1)-1
    wi2=iinteg(w2)
    wf1=dB20(dft(w2 -15 15 4096))
    wif1=dB20(dft(wi2 -15 15 4096))

    plotwin=newWindow()
    plot(w2 ?expr '("sin(x)/x" ))
    plot(wi2 ?expr '("sum[sin(x)/x]" ))
    awvSetDisplayMode(plotwin "strip")
    awvAddSubwindow(plotwin)
    awvSetCurrentSubwindow(plotwin 2)
    awvSetDisplayMode(plotwin "strip")
    plot(wf1) plot(wif1)
     
    fogh, Oct 27, 2004
    #2
  3. svenn.are

    svenn.are Guest

    Yes, I am aware of wavescan, and I use it quite a lot for spectre
    corner runs. Problem is that we have an in-house simulator that write
    runObjFiles that awd understand, but wavescan don't. Wavescan has some
    features that awd doesn't have and vice versa. I really like the look
    of awd, but I don't like the feel. With wavescan it is the other way
    around.

    What you say about post-processing is true. But post-processing of
    data is the documentation work of a successful circuit. Problem is
    that the doc process that a designflow with cadence support best is
    stack-of-paper. If I want to store plots or sections of plot data for
    later processing, I have to go through a big process that tight
    schedules don't support.

    I have tried a couple of other post-processing tools and there are
    always pros and cons for each tool. What I really miss in awd and
    wavescan is the ability to save the curve data to a table ascii file.
    That way I could use a simple x/y plotting tool to generate data for a
    latex run. I know I can include PostScript, but I sometimes like to
    overlay data that weren't plotted overlaid in awd.
     
    svenn.are, Oct 28, 2004
    #3
  4. svenn.are

    fogh Guest

    If you need only the raw data, that's not too hard. Let's say you pick a real
    waveform in the calculator and it shows you wavew9s1i1(), you can do something
    like this:
    mapcar(lambda((lXY) printf("%L\t%L\n" car(lXY) cadr(lXY)))
    artWaveformToList(wavew9s1i1()))

    Now you would have to extend it, test if it is a complex waveform, a family, in
    that case use another format string, loop with famMap etc... and register it as
    a calculator function, with a GUI to ask you what file/port you want to fprintf
    to, and then you have a really end-user solution. If you do so, please post your
    SKILL.

    I can recognise what you say about docs. But if the client gave a greenlight
    for detailed circuit design, he can wait a small while after the circuit review
    before he gets docs. Or do you have people making application PCBs and stacks of
    specsheets before the custom IC layout even started ?
     
    fogh, Oct 28, 2004
    #4
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.