# Report Macros

This set of macros provides wrappers around the uvm_report_* Reporting functions. The macros serve two essential purposes:

- To reduce the processing overhead associated with filtered out messages, a check is made against the report’s verbosity setting and the action for the id/severity pair before any string formatting is performed. This affects only `uvm_info reports.
- The `__FILE__ and `__LINE__ information is automatically provided to the underlying uvm_report_* call. Having the file and line number from where a report was issued aides in debug. You can disable display of file and line information in reports by defining UVM_REPORT_DISABLE_FILE_LINE on the command line.

The macros also enforce a verbosity setting of UVM_NONE for warnings, errors and fatals so that they cannot be mistakenly turned off by setting the verbosity level too low (warning and errors can still be turned off by setting the actions appropriately).

To use the macros, replace the previous call to uvm_report_* with the corresponding macro.

>     //Previous calls to uvm_report_*
>     uvm_report_info("MYINFO1", $sformatf("val: %0d", val), UVM_LOW);
>     uvm_report_warning("MYWARN1", "This is a warning");
>     uvm_report_error("MYERR", "This is an error");
>     uvm_report_fatal("MYFATAL", "A fatal error has occurred");

The above code is replaced by

>     //New calls to `uvm_*
>     `uvm_info("MYINFO1", $sformatf("val: %0d", val), UVM_LOW)
>     `uvm_warning("MYWARN1", "This is a warning")
>     `uvm_error("MYERR", "This is an error")
>     `uvm_fatal("MYFATAL", "A fatal error has occurred")

Macros represent text substitutions, not statements, so they should not be terminated with semi-colons.

Summary

Report Macros
This set of macros provides wrappers around the uvm_report_* Reporting functions.
Basic Messaging Macros |
`uvm_info | Calls uvm_report_info if VERBOSITY is lower than the configured verbosity of the associated reporter.
`uvm_warning | Calls uvm_report_warning with a verbosity of UVM_NONE.
`uvm_error | Calls uvm_report_error with a verbosity of UVM_NONE.
`uvm_fatal | Calls uvm_report_fatal with a verbosity of UVM_NONE.
`uvm_info_context |
`uvm_warning_context |
`uvm_error_context |
`uvm_fatal_context |
Message Trace Macros |
`uvm_info_begin |
`uvm_info_end | This macro pair provides the ability to add elements to messages.
`uvm_warning_begin |
`uvm_warning_end | This macro pair operates identically to `uvm_info_begin/`uvm_info_end with exception that the message severity is UVM_WARNING and has no verbosity threshold.
`uvm_error_begin |
`uvm_error_end | This macro pair operates identically to `uvm_info_begin/`uvm_info_end with exception that the message severity is UVM_ERROR and has no verbosity threshold.
`uvm_fatal_begin |
`uvm_fatal_end | This macro pair operates identically to `uvm_info_begin/`uvm_info_end with exception that the message severity is UVM_FATAL and has no verbosity threshold.
`uvm_info_context_begin |
`uvm_info_context_end |
`uvm_warning_context_begin |
`uvm_warning_context_end |
`uvm_error_context_begin |
`uvm_error_context_end |
`uvm_fatal_context_begin |
`uvm_fatal_context_end |
Message Element Macros |
`uvm_message_add_tag |
`uvm_message_add_int |
`uvm_message_add_string |
`uvm_message_add_object | These macros allow the user to provide elements that are associated with uvm_report_messages.

### Basic Messaging Macros

### `uvm_info

Calls uvm_report_info if VERBOSITY is lower than the configured verbosity of the associated reporter. ID is given as the message tag and MSG is given as the message text. The file and line are also sent to the uvm_report_info call.

>     `uvm_info(ID, MSG, VERBOSITY)

### `uvm_warning

Calls uvm_report_warning with a verbosity of UVM_NONE. The message cannot be turned off using the reporter’s verbosity setting, but can be turned off by setting the action for the message. ID is given as the message tag and MSG is given as the message text. The file and line are also sent to the uvm_report_warning call.

>     `uvm_warning(ID, MSG)

### `uvm_error

Calls uvm_report_error with a verbosity of UVM_NONE. The message cannot be turned off using the reporter’s verbosity setting, but can be turned off by setting the action for the message. ID is given as the message tag and MSG is given as the message text. The file and line are also sent to the uvm_report_error call.

>     `uvm_error(ID, MSG)

### `uvm_fatal

Calls uvm_report_fatal with a verbosity of UVM_NONE. The message cannot be turned off using the reporter’s verbosity setting, but can be turned off by setting the action for the message. ID is given as the message tag and MSG is given as the message text. The file and line are also sent to the uvm_report_fatal call.

>     `uvm_fatal(ID, MSG)

### `uvm_info_context

>     `uvm_info_context(ID, MSG, VERBOSITY, RO)

Operates identically to `uvm_info but requires that the context, or uvm_report_object, in which the message is printed be explicitly supplied as a macro argument.

### `uvm_warning_context

>     `uvm_warning_context(ID, MSG, RO)

Operates identically to `uvm_warning but requires that the context, or uvm_report_object, in which the message is printed be explicitly supplied as a macro argument.

### `uvm_error_context

>     `uvm_error_context(ID, MSG, RO)

Operates identically to `uvm_error but requires that the context, or uvm_report_object in which the message is printed be explicitly supplied as a macro argument.

### `uvm_fatal_context

>     `uvm_fatal_context(ID, MSG, RO)

Operates identically to `uvm_fatal but requires that the context, or uvm_report_object, in which the message is printed be explicitly supplied as a macro argument.

### Message Trace Macros

### `uvm_info_begin

>     `uvm_info_begin(ID, MSG, VERBOSITY, RM = __uvm_msg)

### `uvm_info_end

This macro pair provides the ability to add elements to messages.

>     `uvm_info_end

Example usage is shown here.

>     ...
>     task my_task();
>        ...
>        `uvm_info_begin("MY_ID", "This is my message...", UVM_LOW)
>          `uvm_message_add_tag("my_color", "red")
>          `uvm_message_add_int(my_int, UVM_DEC)
>          `uvm_message_add_string(my_string)
>          `uvm_message_add_object(my_obj)
>        `uvm_info_end
>        ...
>     endtask

### `uvm_warning_begin

>     `uvm_warning_begin(ID, MSG, RM = __uvm_msg)

### `uvm_warning_end

This macro pair operates identically to `uvm_info_begin/`uvm_info_end with exception that the message severity is UVM_WARNING and has no verbosity threshold.

>     `uvm_warning_end

The usage shown in `uvm_info_end works identically for this pair.

### `uvm_error_begin

>     `uvm_error_begin(ID, MSG, RM = __uvm_msg)

### `uvm_error_end

This macro pair operates identically to `uvm_info_begin/`uvm_info_end with exception that the message severity is UVM_ERROR and has no verbosity threshold.

>     `uvm_error_end

The usage shown in `uvm_info_end works identically for this pair.

### `uvm_fatal_begin

>     `uvm_fatal_begin(ID, MSG, RM = __uvm_msg)

### `uvm_fatal_end

This macro pair operates identically to `uvm_info_begin/`uvm_info_end with exception that the message severity is UVM_FATAL and has no verbosity threshold.

>     `uvm_fatal_end

The usage shown in `uvm_info_end works identically for this pair.

### `uvm_info_context_begin

>     `uvm_info_context_begin(ID, MSG, UVM_NONE, RO, RM = __uvm_msg)

### `uvm_info_context_end

>     `uvm_info_context_end

This macro pair operates identically to `uvm_info_begin/`uvm_info_end, but requires that the context, or uvm_report_object in which the message is printed be explicitly supplied as a macro argument.

### `uvm_warning_context_begin

>     `uvm_warning_context_begin(ID, MSG, RO, RM = __uvm_msg)

### `uvm_warning_context_end

>     `uvm_warning_context_end

This macro pair operates identically to `uvm_warning_begin/`uvm_warning_end, but requires that the context, or uvm_report_object in which the message is printed be explicitly supplied as a macro argument.

### `uvm_error_context_begin

>     `uvm_error_context_begin(ID, MSG, RO, RM = __uvm_msg)

### `uvm_error_context_end

>     `uvm_error_context_end

This macro pair operates identically to `uvm_error_begin/`uvm_error_end, but requires that the context, or uvm_report_object in which the message is printed be explicitly supplied as a macro argument.

### `uvm_fatal_context_begin

>     `uvm_fatal_context_begin(ID, MSG, RO, RM = __uvm_msg)

### `uvm_fatal_context_end

>     `uvm_fatal_context_end

This macro pair operates identically to `uvm_fatal_begin/`uvm_fatal_end, but requires that the context, or uvm_report_object in which the message is printed be explicitly supplied as a macro argument.

### Message Element Macros

### `uvm_message_add_tag

>     `uvm_message_add_tag(NAME, VALUE, ACTION=(UVM_LOG|UVM_RM_RECORD))

### `uvm_message_add_int

>     `uvm_message_add_int(VAR, RADIX, LABEL = "", ACTION=(UVM_LOG|UVM_RM_RECORD))

### `uvm_message_add_string

>     `uvm_message_add_string(VAR, LABEL = "", ACTION=(UVM_LOG|UVM_RM_RECORD))

### `uvm_message_add_object

These macros allow the user to provide elements that are associated with uvm_report_messages. Separate macros are provided such that the user can supply arbitrary string/string pairs using `uvm_message_add_tag, integral types along with a radix using `uvm_message_add_int, string using `uvm_message_add_string and uvm_objects using `uvm_message_add_object.

>     `uvm_message_add_object(VAR, LABEL = "", ACTION=(UVM_LOG|UVM_RM_RECORD))

Example usage is shown in `uvm_info_end.

This macro pair provides the ability to add elements to messages.
Indicates a potential problem.
Indicates a real problem.
Indicates a problem from which simulation cannot recover.

> class uvm_report_message extends uvm_object

The uvm_report_message is the basic UVM object message class.

> class uvm_report_object extends uvm_object

The uvm_report_object provides an interface to the UVM reporting facility.
This macro pair operates identically to `uvm_info_begin/`uvm_info_end with exception that the message severity is UVM_WARNING and has no verbosity threshold.
This macro pair operates identically to `uvm_info_begin/`uvm_info_end with exception that the message severity is UVM_ERROR and has no verbosity threshold.
This macro pair operates identically to `uvm_info_begin/`uvm_info_end with exception that the message severity is UVM_FATAL and has no verbosity threshold.

> virtual class uvm_object extends uvm_void

The uvm_object class is the base class for all UVM data and hierarchical classes.
These macros allow the user to provide elements that are associated with uvm_report_messages.