Есть ли способ получить доступ к uvm_phase из верхней части testbench? - PullRequest
1 голос
/ 11 июля 2019

Есть ли способ узнать в моей верхней части тестового стенда о текущей фазе иерархии UVM ?.Поскольку testbench top является статическим модулем, а иерархия UVM состоит из динамических классов.

В моей вершине testbench я непосредственно управляю несколькими портами, находящимися вне иерархии UVM.Мне нужно прекратить движение этих портов, скажем, после фазы выключения.Я могу сделать это, используя uvm_config_db, передавая фазу из последовательности, но я не хочу создавать зависимости.Я знаю, что это побеждает цель использования UVM и возможности повторного использования, но просто спрашиваю, могу ли я это сделать?.

module top()

     initial begin
         drive_ports();
     end

     virtual task drive_ports()
         //I need to keep driving these ports till shutdown_phase
         if (!uvm_tb_hierarchy.phase == shutdown_phase) //?? How to get phase??
         dut.port = 8'hff
         dut.en = 1;
     endtask

     initial begin
         run_test()
     end
endmodule

Ответы [ 2 ]

2 голосов
/ 12 июля 2019

Вы можете попробовать это, чтобы получить текущую фазу.

uvm_root top;
uvm_phase curr_phase.
uvm_coreservice_t cs = uvm_coreservice_t::get();
top = cs.get_root();
curr_phase = top.m_current_phase;
0 голосов
/ 12 июля 2019

Спасибо, я попробовал приведенный ниже код, и он работает. Кажется, что каждая фаза может быть доступна в верхней части testbench с помощью «uvm_top.m_current_phase», если вы импортируете uvm_pkg в верхней части testbench. Поскольку build_phase () запускается в момент времени 0, доступ к этой переменной с использованием initial_begin в верхней части testbench приводил к ошибке времени выполнения. Поэтому добавлено ожидание в топ ТБ, и оно работает.

module top();
import uvm_pkg::*;

int shutdown;

initial begin
    wait (uvm_top != null);
    while (1) begin
        @(uvm_top.m_current_phase);
        if (uvm_top.m_current_phase != null) begin
            case (uvm_top.m_current_phase.get_name())
                "pre_shutdown": shutdown = 1;
            endcase
        end
     end
   end
endmodule
...