电子说
分享一个近期项目中遇到的函数调用问题。
略去定位过程和具体的业务细节,原问题的模型可以抽象为如下的demo:
import uvm_pkg::*;
`include "uvm_macros.svh"
class test extends uvm_test;
`uvm_component_utils(test)
virtual task run();
bit[3:0] run_cnt;
run_cnt++;
$display("run_cnt=%0d, enter run @%t",run_cnt,$time);
//other code
endtask
virtual task main_phase(uvm_phase phase);
super.main_phase(phase);
phase.raise_objection(this);
run();
phase.drop_objection(this);
endtask
function new(string name="test",uvm_component parent = null);
super.new(name,parent);
endfunction
endclass
program tb_top;
initial begin
run_test("test");
end
endprogram
设计一个run函数用于处理某些业务逻辑,并在UVC的main_phase中调用。看似简单的逻辑,运行仿真后得到如下的信息:
run被调用了两次!
.........................
.........................
如果你也一时间想不到原因,可以参考下面的原因分析。
原因如下:
因此从uvm_component扩展的UVC中,尽量不要使用run函数,使用其他命名方式。
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !