blob: a5d7440eb9d97931e10c6e3edb5d99f91dbf49ad [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
// Standardize look & feel of report phase and uvm logging messages.
class dv_report_server extends uvm_default_report_server;
bit show_file_line = 1'b1;
// if enabled, show the relative path of the file. By default only show file name
bit show_file_path = 1'b0;
bit use_default_uvm_report_message_format = 1'b0;
function new (string name = "");
super.new(name);
// provide ability to override these knobs over cli
void'($value$plusargs("show_file_line=%0b", show_file_line));
void'($value$plusargs("show_file_path=%0b", show_file_path));
void'($value$plusargs("use_default_uvm_report_message_format=%0b",
use_default_uvm_report_message_format));
endfunction
function void report_summarize(UVM_FILE file = 0);
int num_uvm_warning;
int num_uvm_error;
int num_uvm_fatal;
num_uvm_warning = get_severity_count(UVM_WARNING);
num_uvm_error = get_severity_count(UVM_ERROR);
num_uvm_fatal = get_severity_count(UVM_FATAL);
// Print default summary report
super.report_summarize(file);
// Print final test pass-fail - external tool can use this signature for test status
// Treat UVM_WARNINGs as a sign of test failure since it could silently result in false pass
dv_test_status_pkg::dv_test_status((num_uvm_warning + num_uvm_error + num_uvm_fatal) == 0);
endfunction
// Override default messaging format to standard "pretty" format for all testbenches
virtual function string compose_report_message(uvm_report_message report_message,
string report_object_name = "");
if (use_default_uvm_report_message_format) begin
return (super.compose_report_message(report_message, report_object_name));
end else begin
uvm_severity severity = report_message.get_severity();
string filename = report_message.get_filename();
int line = report_message.get_line();
string obj_name = report_message.get_report_object().get_full_name();
string id = report_message.get_id();
string message = report_message.get_message();
string file_line;
if (show_file_line && filename != "") begin
if (!show_file_path) filename = str_utils_pkg::str_path_basename(filename);
file_line = $sformatf("(%0s:%0d) ", filename, line);
end
obj_name = {obj_name, ((obj_name != "") ? " " : "")};
compose_report_message = $sformatf({"%0s @ %t: ", file_line, obj_name, "[%0s] %0s"},
severity.name(), $realtime, id, message);
return compose_report_message;
end
endfunction
endclass