首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加载coverage_db?

如何加载coverage_db?
EN

Stack Overflow用户
提问于 2019-10-30 09:04:35
回答 1查看 254关注 0票数 0

我试图为我的设计写一个功能覆盖。我编写了所需的覆盖组,但现在我面临着在测试运行之间传输我的覆盖率的困难。这里有几个代码示例:

代码语言:javascript
复制
`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中,如下所示:

代码语言:javascript
复制
`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‘在模拟中存在,但在数据库中找不到

我需要做些什么,才能让我的旧保险在测试中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-15 07:37:47

在我已经编写了一个python脚本,在每次运行从覆盖率导出到文本文件的测试之后创建和更新我自己的sqlite数据库之后,我终于发现questa中有一个vcover命令,它合并了所有测试的覆盖率。

据我所知,这是普遍接受的做法:将每个测试的覆盖范围保持在一起,而不是将全部覆盖范围加载到每个新测试中。但是仍然存在一个问题,vcover的帮助很差,而且在文档中几乎没有提到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58621783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档