自定义report_server无法正常工作

时间:2016-02-18 06:41:54

标签: system-verilog uvm

以下代码无效

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

1 个答案:

答案 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班级参考链接。