#system-verilog #uvm #test-coverage
#system-verilog #uvm #тестовое покрытие
Вопрос:
Я впервые пытаюсь работать с функциональным покрытием, поэтому я создал 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. пожалуйста, опубликуйте свои образцы ode в его вопросе. Не предоставляйте ссылки.
2. Конечно, я добавил сюда фрагменты кода, спасибо .
Ответ №1:
Ваша проблема не имеет ничего общего с покрытием. Это связано с подробностью. Вы печатаете свое покрытие с 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
или выше. Другими словами, если вы хотите, чтобы сообщение было напечатано, установите детализацию на более низкий уровень.
Кстати: вам не нужна точка с запятой после макроса.