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通過仿真命令行進行設置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM