2016-02-18 3 views
-1

Код ниже не работаетобычай report_server не работает

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 

В build_phase из test_base.

function void build_phase(uvm_phase phase) 
    my_report_server srv_h = new(); 
    uvm_report_server::set_server(srv_h); 
endfunction 

ответ

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.

+0

Вы используете библиотеку uvm1.2? Я возвращаю строку. – user3510047

+0

Это было на EdaPlayground. Библиотека UVM1.1d. Рабочий пример доступен по [этой ссылке] (http://www.edaplayground.com/x/NzV). Для ** UVM1.2 ** функция 'compose_report_message', доступная по [этой ссылке] (https://verificationacademy.com/verification-methodology-reference/uvm/docs_1.2/html/files/base/uvm_report_server -svh.html # uvm_report_server.compose_report_message). – sharvil111

Смежные вопросы