• 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. exception handling in skill/ocean

Stats

  • Locked Locked
  • Replies 10
  • Subscribers 145
  • Views 7313
  • 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

exception handling in skill/ocean

swdesigner
swdesigner over 13 years ago
I searched the community and support.cadence, but couldn't find any reference material or source code examples showing how to handle exceptions in skill/ocean.

For example, my ocean script loops voltage using foreach to do several runs. After each run, I do some postprocessing. If some of the post-processing fails because a condition being looked for in the simulation is not found, I want the rest of the runs to complete. Instead what happens is the ocean script exits with an error.

For example, if I am looking for  a rising edge on a certain signal and it doesn’t exist..

Any help will be great.

 
  • Cancel
  • marcelpreda
    marcelpreda over 13 years ago

     Hi there,

     

    Have a look at

    errset(skill_expr [bool])

    It tries to execute skill_expr,

    if it is ok the result is return as list

    if skill_expr rise an error then returns nil, if bool == t the error message is also printed.

    E.g.

    errset(x = list(1 2 3))
    ((1 2 3))
    errset(x = listx(1 2 3))
    nil
    errset(x = listx(1 2 3) t)
    *Error* eval: undefined function - listx
    nil

     

    BR,

    Marcel

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • swdesigner
    swdesigner over 13 years ago
    Thank you! I will try that.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 13 years ago

     The other approach I would recommend is actually checking the return values of various functions in your code. For example, v("/out" ?result 'tran) will return nil if that signal is not there. Similarly other functions may return nil (such as riseTime) if there is no rising edge - so conditional checks in your code will allow you to detect when things are not correct.

    errset() is the alternative as Marcel suggested, but often more defensive programming will allow you to cope with differences in the data more eloquently than just trapping errors.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • marcelpreda
    marcelpreda over 13 years ago

     Hi *,

    of course Andrew is right.

    Better to use if/else to "validate" data.


    I use errset when generate and execute skill code on the fly, sometimes I generate syntax errors or call missing/unexisting functions and that's the only way to catch them.

    Best Regards,

    Marcel

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • swdesigner
    swdesigner over 13 years ago

    The logic is unassailable. But what can we do to make the programming easier. At our location we've had people take full-fledged ocean-scripting classes and still, no one uses it. It's extremely unfriendly. How can we go from "linux" to "ipad"?

    Putting in all this error-checking will only make the code even more intimidating..

    BTW, did you mean "elegantly" or "eloquently"? :)

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

    If you want iPad, use ADE XL - which captures much of this in a UI. Programming languages are by nature flexble - and with flexibility comes (unfortunately) the need to cope with unexpected situations - it's very hard for a general programming language to do the right thing if it has no idea what the right thing should be given that your code could do anything...

    And yes I did mean eloquently (well written (yes, strictly it's well spoken, but I thought I'd be free to adapt my own language!)), but "elegantly" fits too.

    It really shouldn't be intimidating. Usually the conditions don't have to be complicated. I normally advise people to use things like:

    unless(member('tran results())
      ...
    )

    to check if the transient results are present - little idioms like this are easy enough to remember, even for non-programmers (and most engineers should have at least some programming knowledge these days).

    Glad they take the OCEAN class (I wrote it!). Surprised it's not used that much though - I tend to find many users who do because of the flexibility it gives them.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • mbchang
    mbchang over 12 years ago

    Andrew,

     

    If there are some errors when execute the OCEAN scripts,  how can I exit the OCEAN (or OCEAN environment)? I found the ocean is always hangng if there are errors. I am looking for some error handling solutions like other languages in OCEAN.

     

    Thanks,

    Jerry 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • skillUser
    skillUser over 12 years ago

    Hi Jerry,

    You can use "errset" to wrap or programmatically trap errors, as noted briefly in Solution 11508500 or Solution 11030618.

    Hopefully this answers your question?

    Regards,

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    Jerry,

    The various strategies (using conditional statements to detect presence of results, using errset) have been covered earlier in this thread. I wouldn't expect that errors would cause anything to hang though - so presumably the problem you're seeing is down to something else.

    Maybe contacting customer support with the details of your problem would be wise?

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • mbchang
    mbchang over 12 years ago

    Lawrence and Andrew,

     

    errset does resolve my issue.

     

    Thank you very much for your help!

     

    Regards,

    Jerry

    • 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