Мне нужно следить за состоянием регистра. Я создал последовательность UVM, чтобы прочитать регистр и хранить их локально. Теперь в моем тестовом коде мне нужно получить доступ к этим регистрам. Вот код Суд:Ссылка на последовательность UVM
typedef struct {
int a;
} my_regs;
class my_seq extends uvm_sequence;
// register to uvm db
reg_map map;
my_regs regs;
uvm_status_e status;
task build_phase(uvm_phase phase);
endtask
task run_phase(uvm_phase phase);
map.CORE.reg_a.read(status, regs.a, UVM_BACKDOOR)
endtask
endclass
class test_reg extends uvm_test;
// register to uvm db
my_seq seq;
my_regs regs;
task build_phase(uvm_phase phase);
seq = my_seq::type_id::create("reg_seq", this);
regs = seq.regs;
endtask
task run_phase(uvm_phase phase);
reg_seq.start(null);
// read reg values from seq??????
if(rqgs.a>1)
//do some thing
endtask
endclass
Как вы можете видеть, я постоянно начинаю последовательность, так что я не пропустите ни одной новость. Я считаю, что задача start не создает новый объект , поэтому значения внутри объекта должны оставаться постоянными между начальными вызовами.
Предполагая, что я не читаю значения regs из seq каждый раз, журналы тестового класса не получат обновления из seq. Это означает, что regs = seq.regs; не создает фактическую ссылку на seq.regs. Я хочу знать, почему это так и как я могу создать абсолютную ссылку на этот объект? (так что я не трачу циклы моделирования при чтении и обновлении значений regs в тестовом классе). Также, пожалуйста, сообщите мне, есть ли лучший способ сделать это.
О, ты прав , поскольку я сказал, что это код sudo, и в исходном коде я реализовал тело так, как вы описали. Еще раз спасибо! – maskarih
:) Получил это. Просто убедитесь, что все. Добро пожаловать . –