网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

看看这个"UVM陷阱",你是不是也遇到过

时间:2023-05-08 10:45

人气:

作者:admin

标签: UVM  函数 

导读:设计一个run函数用于处理某些业务逻辑,并在UVC的main_phase中调用。看似简单的逻辑,运行仿真后得到如下的信息:...

分享一个近期项目中遇到的函数调用问题。

略去定位过程和具体的业务细节,原问题的模型可以抽象为如下的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中调用。看似简单的逻辑,运行仿真后得到如下的信息:

ec20df3a-ed42-11ed-90ce-dac502259ad0.png

run被调用了两次!

.........................

.........................

如果你也一时间想不到原因,可以参考下面的原因分析。

原因如下:

  1. 翻阅UVM源码就会发现,在uvm_component中,存在一个默认的run函数。

    ec3cdfaa-ed42-11ed-90ce-dac502259ad0.png

  2. UVM的phase机制,run_phase和main_phase,reset_phase等其余耗时的phase是并行运行的。而默认的run_phase会调用run函数。

    ec65f20a-ed42-11ed-90ce-dac502259ad0.png

  3. 在上述代码的0时刻,默认的run_phase调用一次run函数,而main_phase也调用了一次run函数。

因此从uvm_component扩展的UVC中,尽量不要使用run函数,使用其他命名方式。


审核编辑 :李倩


温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信