我正在尝试为我的设计编写功能覆盖。我编写了所需的封面组,但现在我面临着在测试运行之间传输我的覆盖范围的困难。这里有几个代码示例:
`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) Covergroup 实例 '/t::test::cg ' 存在于模拟中但未在数据库中找到
我需要做什么,才能让我的旧覆盖率在测试中?