資料來源
(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通過仿真命令行進行設置


