Как загрузить cover_db? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь написать функциональное покрытие для моего дизайна. Я написал необходимые группы покрытия, но теперь я столкнулся с трудностями при переносе моего покрытия между тестовыми прогонами. Вот несколько примеров кода:

`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' существует в симуляции, но не найден в базе данных

Что мне нужно сделать, чтобы получить мое старое покрытие в тесте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...