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