• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. Drawing with Viva

Stats

  • Locked Locked
  • Replies 1
  • Subscribers 125
  • Views 14472
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Drawing with Viva

BradW
BradW over 13 years ago
I was wondering if there was any code/interface to allow custom lines to be drawn on a waveform in Viva. My immediate need is to add an "eye" to an eye diagram plotted using the calculator. In the past I've used markers to find the points and then just added the lines in powerpoint. I'd like to be able to automate the actual drawing of the eye to show the waveforms pass spec. For reference I'm using 6.1.5. Thanks
  • Cancel
  • Andrew Beckett
    Andrew Beckett over 13 years ago

    Something like this will do it:

    line=abMakeWaveform(list(0.5 0.75 0.75 0.5 0.25 0.25 0.5) list(0 20n 60n 80n 60n 20n 0))

    drGetWaveformYVec(line)->units="V"

    ; this one not too critical
    drGetWaveformXVec(line)->name="time"

    drGetWaveformXVec(line)->units="s"

    Using this code:

     

    /* abMakeWaveform.il
    
    Author     A.D.Beckett
    Group      Custom IC (UK), Cadence Design Systems Ltd.
    Language   SKILL
    Date       Jul 14, 1999 
    Modified   Dec 10, 2007 
    By         A.D.Beckett
    
    A simple function to throw together waveforms for
    test purposes. Usage:
    
    abMakeWaveform('cos linRg(1 100 1)) => o_waveObj
    
    Returns a waveform with x axis 1 to 100, in 1 steps, with y
    axis the value of the x.
    
    A more complex example:
    
    abMakeWaveform(lambda((x) x*sin(x)) linRg(-40 40 0.1))
    
    Can be plotted in OCEAN using plot(var).
    
    Also supports the first argument being a list of y values:
    
    abMakeWaveform('(5 6 7) '(1 2 3))
    
    Note the lists must be equal length.
    
    An optional third argument which is the data type may be supplied,
    e.g. 'double (default) 'single etc. Finally a fourth argument
    may be given if the x-axis wants to be a different type. For example
    for bar graphs:
    
    abMakeWaveform('(1 -2 4) '("NOM" "SLOW" "FAST") 'double 'string)
    
    ***************************************************
    
    SCCS Info: @(#) abMakeWaveform.il 12/10/07.13:48:06 1.4
    
    */
    
    /***************************************************************
    *                                                              *
    * The generic function takes a function object, or the name of *
    *      a function (a symbol) and calls that function for       *
    *   each of the x values. This would be nice if it could be    *
    *    done as a method, but the problem is that you can only    *
    *   have a method specialised on user defined functions, not   *
    *                      binary functions.                       *
    *                                                              *
    ***************************************************************/
    
    (defgeneric abMakeWaveform (func xvalues @optional (yDataType 'double) 
        xDataType)
      (let (xVec yVec wave)
           (setq wave (drCreateEmptyWaveform))
           (unless xDataType (setq xDataType yDataType))
           (setq xVec (drCreateVec xDataType xvalues))
           (setq yVec (drCreateVec yDataType (mapcar func xvalues)))
           (drPutWaveformXVec wave xVec)
           (drPutWaveformYVec wave yVec)
           wave
           ))
    
    /****************************************************************
    *                                                               *
    * A method is defined to allow the first argument to be a list, *
    *               and do something different there.               *
    *                                                               *
    ****************************************************************/
    
    (defmethod abMakeWaveform ((yvalues list) xvalues @optional 
        (yDataType 'double) xDataType)
      (let (xVec yVec wave)
           (when
            (and (listp xvalues) (equal (length xvalues) (length yvalues)))
            (setq wave (drCreateEmptyWaveform))
            (unless xDataType (setq xDataType yDataType))
            (setq xVec (drCreateVec xDataType xvalues))
            (setq yVec (drCreateVec yDataType yvalues))
            (drPutWaveformXVec wave xVec)
            (drPutWaveformYVec wave yVec)
            wave
            )
           ))
    
    

     

    Regards,

    Andrew.

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

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.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information