资料来源
(1) UVM实战-张强;
(2) UVM source code;
(3) (10条消息) 阻塞wait(0)等于无限阻塞_Stroller-CSDN博客_java wait(0)
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),相当于该线程无限阻塞;
1.2通过仿真命令行进行设置