Я пытаюсь написать функциональное покрытие для моего дизайна. Я написал необходимые группы покрытия, но теперь я столкнулся с трудностями при переносе моего покрытия между тестовыми прогонами. Вот несколько примеров кода:
`include "uvm_macros.svh"
package t;
import uvm_pkg::*;
class test extends uvm_test;
`uvm_component_utils(test)
byte unsigned data;
covergroup cg;
dat: coverpoint data;
endgroup
function new(string name, uvm_component parent);
super.new(name,parent);
cg = new();
endfunction: new
task run_phase(uvm_phase phase);
phase.raise_objection(this);
repeat(5) begin
#5data = $urandom();
#10 cg.sample();
end
phase.phase_done.set_drain_time(this, 50ns);
phase.drop_objection(this);
endtask
endclass: test
endpackage
module top();
import uvm_pkg::*;
import t::*;
initial begin
$load_coverage_db("coverage_report.db");
$set_coverage_db_name("coverage_report.db");
run_test();
end
endmodule
Если я пытаюсь запустить тест выше, я получаю эту ошибку:
** Ошибка: (vsim-6844) Covergroup '/ t/ test / cg 'не имеет экземпляра, созданного в симуляции, игнорируя его
Очевидно, проблема в том, что cg создан после запуска теста, а загрузка config_db, когда он еще не создан. Поэтому я поместил $load_coverage_db
в run_phase
следующим образом:
`include "uvm_macros.svh"
package t;
import uvm_pkg::*;
class test extends uvm_test;
`uvm_component_utils(test)
byte unsigned data;
covergroup cg;
dat: coverpoint data;
endgroup
function new(string name, uvm_component parent);
super.new(name,parent);
cg = new();
endfunction: new
task run_phase(uvm_phase phase);
$load_coverage_db("coverage_report.db");
phase.raise_objection(this);
repeat(5) begin
#5data = $urandom();
#10 cg.sample();
end
phase.phase_done.set_drain_time(this, 50ns);
phase.drop_objection(this);
endtask
endclass: test
endpackage
module top();
import uvm_pkg::*;
import t::*;
initial begin
$set_coverage_db_name("coverage_report.db");
run_test();
end
endmodule
Теперь я получаю предупреждение такого типа:
** Предупреждение: (vsim-6841) Экземпляр группы покрытия '/ t :: test :: cg' существует в симуляции, но не найден в базе данных
Что мне нужно сделать, чтобы получить мое старое покрытие в тесте?