• 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. Blogs
  2. Verification
  3. User Extensions to DUT Error
teamspecman
teamspecman

Community Member

Blog Activity
Options
  • Subscribe by email
  • More
  • Cancel
Specman
e code
advanced verification
e language

User Extensions to DUT Error

10 Jan 2018 • 2 minute read

A question was raised to stackoverflow about how can one extend the dut_error() for printing more information. The capability to provide the test runners and debuggers more information upon an error can be a great enhancement to the quality and usability of the verification environment, so I decided to extend here a bit the answer given in the stackoverflow.

The request was worded: Can we extend the dut_error() method to print additional information such as the name of the package from which the error is reported.

Actually, although it looks like a method, dut_error() is not a method so it cannot be extended. But what you can do is to use the dut_error_struct. This struct contains two methods that you can extend, pre_error() and write(), and multiple methods that you can call.

  • The pre_error() is a hook method called when dut_error() is called.
  • The write() method is the method that writes the error message, and you can extend it to add information and/or modify the message format.

In your code you can use the dut_error_struct API for getting information such as which struct issued the error.  

For example, the following code increases a counter whenever there is an error during post_generate(), and reduces the check effect to IGNORE:

extend dut_error_struct {
    pre_error()
 is also {
        if source_method_name() == "post_generate" {
            out("\nProblem in generation, ",
                 source_location());
            sys.gen_errors_counter += 1;

            set_check_effect
(IGNORE);
        };
    };
};

To get the package name, as was requested in the original request, we have to know which struct reported this error, and then query it using the reflection API:

extend dut_error_struct {
   write() is first {
        // Special output for errors coming from the 
        // ahb package:
        var reporter_rf : rf_struct = 

          rf_manager.get_struct_of_instance(source_struct()
);
        if reporter_rf.get_package().get_name() == "ahb" {
            out(append("xxxxxx another bug in AHB package, ",
                           "\nreported ", source_location()));
        }; 
    };

These are just two examples of ways to extend the dut_error_struct, for implementing advanced verification utilities.

Additional examples can be downloaded from github-spmn-dut_error. Please try it out, and see if it cannot help you adjust and improve your verification methodology and requirements.

Efrat Shneydor,

Specman team

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

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