我需要监视寄存器的状态。我创建了一个UVM序列来读取寄存器并将它们存储在本地。现在在我的测试代码中,我需要访问这些 寄存器。这里是一个sudo代码:参考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
正如你所看到的,我不断地开始序列,以便我不会错过任何更新。我相信开始任务按顺序不会创建一个新的对象 因此对象内的值应保持恒定的开始调用之间。
假设我每次都不读取seq的regs值,测试类的regs将不会从seq获取更新。意思是regs = seq.regs;不会创建对seq.regs的实际参考。我想知道为什么是这样的,我怎样才能创建一个绝对引用该对象? (这样我就不用浪费模拟周期来阅读和更新测试类中的regs值)。另外请告诉我是否有更好的方法来做到这一点。
哦,你是对的,正如我所说这是一个sudo代码,并且在原始代码中,我已按照您描述的方式实现了该主体。再次感谢! – maskarih
:)明白了。只要确保这一切。不用谢 。 –