时间:2023-05-08 10:45
人气:
作者:admin
分享一个近期项目中遇到的函数调用问题。
略去定位过程和具体的业务细节,原问题的模型可以抽象为如下的demo:
importuvm_pkg::*;
`include"uvm_macros.svh"
classtestextendsuvm_test;
`uvm_component_utils(test)
virtualtaskrun();
bit[3:0]run_cnt;
run_cnt++;
$display("run_cnt=%0d,enterrun@%t",run_cnt,$time);
//othercode
endtask
virtualtaskmain_phase(uvm_phasephase);
super.main_phase(phase);
phase.raise_objection(this);
run();
phase.drop_objection(this);
endtask
functionnew(stringname="test",uvm_componentparent=null);
super.new(name,parent);
endfunction
endclass
programtb_top;
initialbegin
run_test("test");
end
endprogram
设计一个run函数用于处理某些业务逻辑,并在UVC的main_phase中调用。看似简单的逻辑,运行仿真后得到如下的信息:

run被调用了两次!
.........................
.........................
如果你也一时间想不到原因,可以参考下面的原因分析。
原因如下:


因此从uvm_component扩展的UVC中,尽量不要使用run函数,使用其他命名方式。
审核编辑 :李倩