• 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 SKILL
  3. Inconsistency in maestro result DB using SKILL

Stats

  • Locked Locked
  • Replies 7
  • Subscribers 143
  • Views 16075
  • 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

Inconsistency in maestro result DB using SKILL

KGh94
KGh94 over 7 years ago

Hello,

I have two maestro views from which I extract my outputs using SKILL. Each view is in a different virtuoso version. The SKILL code used is the same in both versions:

; get session Id
sessId = maeOpenSetup(myLib myCell "maestro")

; get result DB
resDB = maeReadResDB(?historyName myHistory ?session sessId)

; select one arbitrary point and corner
point = car(resDB->points())
corner = car(point->corners())

; iterate tests and outputs
foreach(test corner->tests()
    foreach(output test->outputs()
        ; evaluate wave outputs
        when(output->value == "wave" myWave = calcVal(output->name test->name)
            print(myWave)
        )
    )
)

This works for one version of virtuoso and extracts the waves of all tests and corners across all points and corners. The other version has two problems:

  1. Outputs of only one test can be accessed using a single point (i.e. outputs are separated throughout the points)
  2. print(myWave) prints nil. In the maestro GUI I am able to view the plots without any problem

Is there a way to make both versions behave the same (e.g. an environment variable?). Any help would be appreciated.

Best regards,
Karam

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago

    Hi Karam,

    Are we supposed to guess which versions you're using? i.e. the version that works and the version that doesn't? I for one am not going to do lots of experiments to try to figure if there's a version dependency on this working or not, or whether it's down to something else. If I knew the versions, I might be rather more inclined to experiment (it's been a long week, so excuse me being blunt).

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • KGh94
    KGh94 over 7 years ago in reply to Andrew Beckett

    Hello Andrew,

    Thank you for your reply. I thought you might be aware of this, but no need to guess the versions Slight smile The code works on 12.3-64b.8 and doesn't work on 12.3-64b.500.20.

    Apologies for the lack of info. It's been a long week here as well

    Best regards,
    Karam

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • KGh94
    KGh94 over 7 years ago in reply to Andrew Beckett

    Update: if I "View Results" from the GUI, the code at least returns the correct value for calcVal( .. ).

    Using maeOpenResults( .. ) does not change anything

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • KGh94
    KGh94 over 7 years ago in reply to Andrew Beckett

    Hello Andrew,

    Is there a known workaround for this issue in version 12.3-64b.500.20?

    Best regards,
    Karam

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to KGh94

    Karam,

    I'm not entirely sure what the problem is here. For a start, your script looks incorrect - it says it is picking the first point and first corner, but it had no car() on each, and so it failed for me (in any version). I then updated the calcVal expression to try to pick the specific corner, history and result (for signals) and added the check for nil - but then I realised your calcVal are trying to reference previous waveform expressions rather than signals. For me, the calcVal doesn't work in any version if I'm trying to retrieve waveform expressions this way.

    I suggest you contact customer support so that you can provide a bit more information and somebody can investigate in more detail. Here's my updated version of your script, in case it helps.

    ; get session Id
    sessId = maeOpenSetup(myLib myCell "maestro")
    
    
    ; get result DB
    resDB = maeReadResDB(?historyName myHistory ?session sessId)
    
    ; select one arbitrary point and corner
    ; ANDREW - didn't have car here before, so this wouldn't have worked
    point = car(resDB->points())
    corner = car(point->corners())
    
    ; iterate tests and outputs
    foreach(test corner->tests()
        foreach(output test->outputs()
            printf("%L %L %L\n" output->name output->value output->test()->name)
            ; ANDREW - need to map corner name for nominal (for some reason)
            cornerName=corner->name
            when(cornerName=="nominal"
                cornerName="Nominal"
            )
            ; evaluate wave outputs
            ; ANDREW - have to be more explicit about which corner and history you want
            when(output->value == "wave" || output->value==nil 
                myWave = calcVal(output->name test->name ?cornerName cornerName ?historyName myHistory ?result 'tran)
                print(myWave)
            )
        )
    )
    maeCloseSession(?session sessId)
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • KGh94
    KGh94 over 7 years ago in reply to Andrew Beckett

    Hello Andrew,

    Thank you for the reply, correction, and explanation. I used car( ) in my code, but it was lost in translation - my bad (updated my code above).

    Is re-evaluation of nil results required for net-dependent expressions? I'm doing simple noise plots VNPP("/M1" "total")

    In the older virtuoso version, I was able to use this script without specifying the corner and history names. It was also able to plot all tests using only one point.

    In the new version, corner and history must be provided (result is not mandatory .. yet). I also have to iterate over all points to extract results of all tests.

    Thanks Andrew

    Best regards,
    Karam

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to KGh94

    Hi Karam,

    The handling of nil results was only if you want to get signals as well as waveform expr. I'm not sure how this could have worked without specifying the corner if you were sweeping over corner - but then again I don't know enough about your set up - maybe you weren't sweeping corners, or not sweeping points? It's unclear. I suggest you contact customer support so that there can be some clarity about your setup before and now to see if there's a bug that's been introduced. In my experiments I didn't spot any change in behaviour, so that probably means I'm not doing quite the same as you. I don't have the bandwidth to do loads of experiments to try to guess what is different about what you're doing than I'm doing - so I suggest you work with your local support team.

    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