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 2022-02-06 18:31  知北游。。  阅读(1234)  评论(0编辑  收藏  举报

导航