Как распечатать отчет о покрытии в uvm? - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь работать с функциональным покрытием в первый раз, поэтому я создал файл mem_cov.sv, в котором я создал класс покрытия, расширяя его из класса uvm_subscriber, и реализовал функцию записи для выборки покрытия. Я пытаюсь распечатать его в report_phase, но он не печатается, я не уверен, что мне не хватает чего-то, чтобы напечатать его.

 This is the link of the code
 https://www.edaplayground.com/x/3R8m

Предоставляя образцы из кода, это мой класс покрытия, расширенный от класса uvm_subscriber

         class mem_cov extends uvm_subscriber#(mem_seq_item);
        `uvm_component_utils(mem_cov)

         real cov;
         mem_seq_item tx; 
         covergroup cg;
         READ_EN:coverpoint tx.rd_en {bins bin_0_1[] ={0,1};}
         endgroup
         extern function new(string name="mem_cov",uvm_component parent);
         extern function void write( mem_seq_item t);
         extern function void extract_phase(uvm_phase phase);
         extern function void report_phase(uvm_phase phase);   
         endclass

         function mem_cov::new(string name,uvm_component parent);
         super.new(name,parent);
         cg=new();
         endfunction


         function void mem_cov::write(mem_seq_item t);
         tx=t;
         cg.sample();
         endfunction

         function void mem_cov::extract_phase(uvm_phase phase);    
         cov=cg.get_coverage();
         endfunction

         function void mem_cov::report_phase(uvm_phase phase);
         `uvm_info(get_full_name(),$sformatf("Coverage is 
         %d",cov),UVM_HIGH);
         endfunction

В моем классе env я подключил порт анализа монитора к порту экспорта анализа подписчика, вот фрагмент из класса env:

         function void build_phase(uvm_phase phase);
         super.build_phase(phase);
         mem_cv=  mem_cov::type_id::create("mem_cv",this);
         endfunction : build_phase


         function void connect_phase(uvm_phase phase);
       mem_agnt.monitor.item_collected_port.connect(mem_cv.analysis_export);
          endfunction : connect_phase

1 Ответ

1 голос
/ 22 апреля 2019

Ваша проблема не связана с покрытием.Это связано с многословием.Вы печатаете свое покрытие с многословием UVM_HIGH.Детализация в вашей симуляции установлена ​​на UVM_MEDIUM (что я думаю по умолчанию).Итак, ваше сообщение не будет напечатано.Если вы уменьшите детализацию до UVM_MEDIUM, она будет напечатана:

function void mem_cov::report_phase(uvm_phase phase);
    `uvm_info(get_full_name(),$sformatf("Coverage is %d",cov),UVM_MEDIUM)
endfunction

Уровень детализации сообщения - это уровень, на котором должна быть установлена ​​детализация, чтобы сообщение было напечатано.Таким образом, сообщение с уровнем UVM_HIGH будет напечатано, только если многословие UVM_HIGH или выше.Другими словами, если вы хотите, чтобы сообщение было напечатано, установите уровень детализации на более низком уровне.


Кстати: вам не нужна точка с запятой после макроса.

...