• 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. ViVa Bookmarks and its usage

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 126
  • Views 11459
  • 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

ViVa Bookmarks and its usage

TommasoF
TommasoF over 4 years ago

Hello everybody,

I recently discovered through another post here on the forum the VIVA function (see below) to include bookmarks on the charts. This one below create a red area from 2.11 GHz up to 2.66 GHz. This is a good way to highlight a specific area when plotting data.


awvPlaceBookmark( currentWindow() "xrange" list(2110e6 2200e6) ?waveIndex 1 ?description "B66" ?properties list(list("fillColor" "red") list("defaultLabel" "defaultBookMark")))

Currently I define this function (and others for other freq. ranges) in a text file which then gets uploaded into the expression editor thru the calculator

The function works well as long as I plot data directly from the Maetro--> results (see below)

However, if I copy that trace into a new window and I try to plot the bookmark again, I get the following error message in the CIW:

ERROR (WIA-1005): Waveform with the ID 1 does not exist.
ERROR (WIA-1015): Cannot place bookmark because waveform '1' is not visible.
ERROR (VIVA-3002):expression evaluation failed: Expression evaluates to nil

I tried to replace the function "currentWindow()" with others, but it doesn't help. Is there a way to plot this bookmarks on any desired selected chart ?
Is there also a way to store them in the Output Setup instead of the text file ? (it would be more handy) 

Thanks

Tommaso

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 4 years ago

    Hi Tommaso,

    The issue is that the waveform index number in the copy is no longer 1, and so it can't find the waveform. To make it easier, I've just written a wrapper function which allows you to specify the waveform to add the bookmark to by name rather than by index. So you'd change your call to abPlaceBookmarkByName and change the ?waveIndex 1 to ?waveName "/out" (or whatever the signal is called in the plot).

    Regards,

    Andrew

    /* abPlaceBookmarkByName.ils
    
    Author     A.D.Beckett
    Group      Custom IC (UK), Cadence Design Systems Ltd.
    Language   SKILL
    Date       May 28, 2021 
    Modified   Jun 02, 2021 
    By         A.D.Beckett
    
    Place a bookmark by waveform name rather than index - easier
    if the indices are unknown, for example.
    
    abPlaceBookmarkByName( currentWindow() "xrange" list(10e3 10e4)
        ?waveName "/out" ?description "myBookMark" 
        ?properties list(list("fillColor" "red") 
            list("defaultLabel" "defaultBookMark")))
    
    ***************************************************
    
    SCCS Info: @(#) abPlaceBookmarkByName.ils 06/02/21.13:27:28 1.2
    
    */
    
    /**************************************************************************
    *                                                                         *
    *       (abPlaceBookmarkByName winId bmType location @key waveName        *
    *                           parent description                            *
    *                      visible subwindow properties)                      *
    *                                                                         *
    * Wrapper around awvPlaceBookmark which allows you to add a bookmark to a *
    * waveform given its name rather than a potentially unknown index number. *
    *      The argument list is the same as awvPlaceBookmark except that      *
    *                   ?waveIndex is replaced by ?waveName                   *
    *                                                                         *
    **************************************************************************/
    
    (defun abPlaceBookmarkByName 
      (winId bmType location @key waveName parent description 
              visible subwindow properties)
      (let (transposed waveNameList indexName)
        (setq waveNameList (awvGetWaveNameList winId ?subwindow subwindow))
        (setq transposed
              (foreach mapcar (num name) (car waveNameList) (cadr waveNameList)
                       (list num name)))
        (setq indexName (car (exists indName transposed 
                                     (equal waveName (cadr indName)))))
        (unless indexName
          (error "Unable to find waveform name %L in window %L"
                 waveName winId)
          )
        (awvPlaceBookmark winId bmType location
                          ?waveIndex (car indexName) ?parent parent
                          ?description description ?visible visible
                          ?subwindow subwindow ?properties properties
                          )
        )
      )

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 4 years ago

    Hi Tommaso,

    The issue is that the waveform index number in the copy is no longer 1, and so it can't find the waveform. To make it easier, I've just written a wrapper function which allows you to specify the waveform to add the bookmark to by name rather than by index. So you'd change your call to abPlaceBookmarkByName and change the ?waveIndex 1 to ?waveName "/out" (or whatever the signal is called in the plot).

    Regards,

    Andrew

    /* abPlaceBookmarkByName.ils
    
    Author     A.D.Beckett
    Group      Custom IC (UK), Cadence Design Systems Ltd.
    Language   SKILL
    Date       May 28, 2021 
    Modified   Jun 02, 2021 
    By         A.D.Beckett
    
    Place a bookmark by waveform name rather than index - easier
    if the indices are unknown, for example.
    
    abPlaceBookmarkByName( currentWindow() "xrange" list(10e3 10e4)
        ?waveName "/out" ?description "myBookMark" 
        ?properties list(list("fillColor" "red") 
            list("defaultLabel" "defaultBookMark")))
    
    ***************************************************
    
    SCCS Info: @(#) abPlaceBookmarkByName.ils 06/02/21.13:27:28 1.2
    
    */
    
    /**************************************************************************
    *                                                                         *
    *       (abPlaceBookmarkByName winId bmType location @key waveName        *
    *                           parent description                            *
    *                      visible subwindow properties)                      *
    *                                                                         *
    * Wrapper around awvPlaceBookmark which allows you to add a bookmark to a *
    * waveform given its name rather than a potentially unknown index number. *
    *      The argument list is the same as awvPlaceBookmark except that      *
    *                   ?waveIndex is replaced by ?waveName                   *
    *                                                                         *
    **************************************************************************/
    
    (defun abPlaceBookmarkByName 
      (winId bmType location @key waveName parent description 
              visible subwindow properties)
      (let (transposed waveNameList indexName)
        (setq waveNameList (awvGetWaveNameList winId ?subwindow subwindow))
        (setq transposed
              (foreach mapcar (num name) (car waveNameList) (cadr waveNameList)
                       (list num name)))
        (setq indexName (car (exists indName transposed 
                                     (equal waveName (cadr indName)))))
        (unless indexName
          (error "Unable to find waveform name %L in window %L"
                 waveName winId)
          )
        (awvPlaceBookmark winId bmType location
                          ?waveIndex (car indexName) ?parent parent
                          ?description description ?visible visible
                          ?subwindow subwindow ?properties properties
                          )
        )
      )

    • Cancel
    • Vote Up +1 Vote Down
    • Cancel
Children
  • TommasoF
    TommasoF over 4 years ago in reply to Andrew Beckett

    thanks! it would be nice to have this feature implemented in the tool in future releases, in a way to define it in the output setup for instance.

    BR,
    Tommaso

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 4 years ago in reply to TommasoF

    Hi Tommaso,

    Actually, if you create the bookmarks using SKILL, and then save a plotting template from ViVA into the maestro view (which is a new feature in IC6.1.8/ICADVM18.1) then you can plot the graphs again with the same bookmarks as before - this is the preferred way of restoring markers and bookmarks to the graph, and having the same graph arrangement as before.

    However, there isn't currently a UI way of adding bookmarks on the graph, which would be needed for this to be really useful and accessible. I believe (from when I've looked at this in the past) that there are requests for this, but the focus with bookmarks was having sufficient support for them to be used programmatically as that was mainly what they were used for (for example, with checks-and-asserts, it can show the region of a waveform with an assertion failure).

    You might want to contact customer support to ask for a menu in VIVA to add bookmarks. You might want to mention to the AE CCR 1583128 which talks about some of the incomplete parts of the bookmark implementation right now.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • TommasoF
    TommasoF over 4 years ago in reply to Andrew Beckett

    Hi Andrew, 
    Yes I thought indeed about the plotting template (which I am already using). Thank you for the hint, I will follow up with the customer support.

    BR,
    Tommaso

    • 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