我正在创建一个框架,我的验证团队和我可以轻松地编写 uvm 测试用例。基本思想是我的基本(uvm_)序列在其主体任务中仅包含一行:
regs.update(status);
从我的个人 (uvm_) 测试中,我可以使用方便的辅助函数设置寄存器值。例如,我的测试将包含:
class base_test extends uvm_test;
........
........
virtual function void set_registerA(....);
regs.registerA1.set(....);
regs.registerA2.set(....);
regs.registerA3.set(....);
endfunction
virtual function void set_registerB(....);
regs.registerB1.set(....);
regs.registerB2.set(....);
regs.registerB3.set(....);
endfunction
endclass
class test1 extends base_test;
virtual function void end_of_elaboration_phase(uvm_phase phase);
set_registerA(....);
set_registerB(....);
endfunction
endclass
class test2 extends base_test;
virtual function void end_of_elaboration_phase(uvm_phase phase);
set_registerA(....);
set_registerB(....);
endfunction
endclass
现在我意识到 end_of_elaboration 阶段可能不是设置寄存器的最佳位置。我的编译器给了我警告,上面写着“警告:在任务“end_of_elaboration”中调用任务“set_registerA”。所以我将其更改为在我的run_phase中执行:
class test1 extends base_test;
virtual task run_phase(uvm_phase phase);
super.run_phase(phase);
set_registerA(....);
set_registerB(....);
endfunction
endclass
class test2 extends base_test;
virtual task run_phase(uvm_phase phase);
super.run_phase(phase);
set_registerA(....);
set_registerB(....);
endfunction
endclass
我不确定这是否是我想要做的正确方法?调用 super.run_phase 会导致问题吗?我没有看到其他地方这样做过。