3-phase的超时退出(timeout,仅限于run_phase,内含wait(0)以及phase.get_name())

资料来源

(1) UVM实战-张强;

(2) UVM source code;

注意:wait(expression)会一直阻塞,直到expression为真; wait(0)表示永远阻塞,这种用法会在UVM source code中遇到;

1.phase的超时退出

(1)背景: 验证平台运行时,有可能会出现挂起的情况; 这种情况下,仿真时间一直往前走,但是driver或monitor并没有发出或收到transaction;

(2): 一个测试用例的运行时间可以预计,超过这个时间,通常出错,可以使用UVM的set_timeout方法设置超时时间;

1.1通过uvm_root的set_timeout函数可以设置超时时间;

(1) set_timeout的第一个参数为要设置的时间,第二个参数表示此设置是否可以被其后的其他set_timeout语句覆盖;

注1:默认的超时时间是通过宏UVM_DEFAULT_TIMEOUT来指定的;

注2:在uvm_phase的execute_phase task中,存在fork join_any线程,其中一个线程会判断当前phase是否为run_phase,如果是run_phase,则会delay top.phase_timeout,并退出线程;如果当前phase不是run_phase,则不会delay top.phase_timeout,而是执行wait(0),相当于该线程无限阻塞;

注3:phase.get_name()可以获取当前phase的名字,如build,main,run,connect等,详见uvm_common_phases.svh注释部分;

1.2通过仿真命令行进行设置

 

posted on   知北游。。  阅读(1308)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示