2014-12-05 2 views
0

Я застрял в задаче и был бы признателен любой вход/предложение:Использование SystemVerilog статической переменной в классе

Я агент для моего испытательного стенда, который имеет следующие компоненты: базовый класс A- определяет две статические переменные - X и Y - два новых класса B и C, BOTH - от A. Они используют статическую переменную, объявленную в базовом классе. Другой класс D, который использует B и C, чтобы что-то сделать.

Скажем, класс D является моим главным агентом, и я называю его bfm_agent. Этот bfm_agent может быть создан несколько раз на моем стенде. Теперь проблема заключается в том, что X и Y будут использоваться для всех bfm_agent. Я не хочу этого. Я просто хочу, чтобы X и Y были статичными, чтобы классы B и C внутри каждого bfm_agent могли использовать эти две переменные для выполнения некоторой работы.

Как я могу это достичь? Я просто хочу, чтобы область действия этих двух статических переменных была действительной только в каждом экземпляре bfm_agent.

ответ

2

Вы должны использовать объект конфигурации, который содержит переменные X и Y. Тогда базовый класс A сконструирует объект конфигурации, если он не существует, а затем установите его для каждого экземпляра агента.

class A extends uvm_component; 

my_config_c myconfig; 

function void build_phase(uvm_phase phase); 
... 
    if(!uvm_config_db#(myconfig)::get(get_parent(),"","myconfig",myconfig)) begin 
    myconfig = my_config_c::type_id::create("myconfig"); 
    uvm_config_db#(myconfig)::set(get_parent(),"","myconfig",myconfig) 
    end 
endfunction 

Теперь оба класса B и C будут иметь возможность обратиться к myconfig.X и myconfig.Y.

+1

@newbie 'static' означает все экземпляры. То, что вы хотите, это переменные экземпляра. Если вы указали свои переменные 'X' и' Y' как статические, чтобы сделать такой вид обмена, я бы сказал, что вы удаляете ключевое слово 'static' и назначаете правильные значения для каждого экземпляра. Подход Дейва работает лучше всего, если вы используете UVM. –

+0

Поскольку сообщение было помечено 'UVM', я предположил, что они уже используют его. Если notm, вы все равно можете сделать что-то подобное, разделив дескрипторы, а не сами переменные. –

Смежные вопросы