以下代码无效
class my_report_server extends uvm_default_report_server;
`uvm_object_utils(my_report_server)
function new(string name="my_report_server");
super.new();
$display( "Constructing report serevr %0s",name);
endfunction : new
virtual function string compose_message( uvm_severity severity,string name,string id,string message,string filename,int line );
//implemeted own code.
endfunction
endclass
在test_base的build_phase中。
function void build_phase(uvm_phase phase)
my_report_server srv_h = new();
uvm_report_server::set_server(srv_h);
endfunction
答案 0 :(得分:1)
我尝试了相同的代码并打印来自重写类的消息。没有uvm_default_report_server
类。而不仅仅是uvm_report_server
。
以下是我的代码片段,它根据需要打印输出:
// User report server
class my_report_server extends uvm_report_server;
`uvm_object_utils(my_report_server)
function new(string name="my_report_server");
super.new();
$display( "Constructing report serevr %0s",name);
endfunction : new
// Return type is string
virtual function string compose_message( uvm_severity severity,string name,string id,string message,string filename,int line );
// DEBUG MESSAGE
$display("From Super: \n %0s",super.compose_message(severity,name,id,message,filename,line));
//This display comes.
$display("This is from extended class");
endfunction
class test extends uvm_test;
// ... Some stuff here...
// Declare handle here.
my_report_server srv_h;
function void build_phase(uvm_phase phase);
super.build_phase(phase);
srv_h = new();
uvm_report_server::set_server(srv_h);
endfunction
endclass
我想指出的一件事是你已经在build_phase内部声明了句柄。这可能会产生范围问题(尽管它适用于VCS)。
另请注意,compose_message
函数的返回类型为string
。因此,必须有一些来自被覆盖函数的输出。我为此添加了调试消息,这会打印默认格式化消息。
有关uvm_report_server的更多信息,请参阅this班级参考链接。