篇2-uvm tb的運轉&run_test


參考資料:

(1) uvm中run_test | 駿的世界 (lujun.org.cn)

(2) 從run_test淺談Test Bench的啟動 (qq.com)

 

1. run_test

(1) run_test是uvm_globals.svh中定義的一個task,用於啟動UVM.

2. 調用uvm_root.run_test

(1)在run_test內,會先獲取uvm_root的實例,然后調用其run_test函數,傳入test_name的名字.

3. class uvm_coreservice_t

4. uvm_root

5.uvm_root.run_test

(1) 初始化objection;

(2) 設置testcase的name,從cmdline獲取+UVM_TESTNAME參數.如果有,將來使用第一個參數設置的值.如果cmdline沒有設置UVM_TESTNAME,使用傳入的testname.

(3) 根據test_name,調用工廠函數create_component_by_name,創建testcase的實例,並且賦值給uvm_test_top,因此對於UVM環境,頂層的testcase將來都會變成uvm_test_top;

(4) m_children是uvm_component中內建的變量,保存該類包含哪些子類;當一個子類,通過UVM的工廠機制創建類實例后,會往其父類的m_children中加入該類對象;而testcase的父類就是uvm_root,因testcase被工廠機制創建實例之后,會將往uvm_root的m_children中加入該testcase的類對象,此時m_children的個數就不為0。

(5) 判斷創建的實例是否成功;

(6) 通過process類,保存進程號,啟動uvm phase。此處用fork join_none,父進程就不必等子進程結束,就可以退出。#0,父進程休眠,其他進程得到調度,使其他phase的runner得到運行。

(7) 最后等待uvm的phase結束.結束之后.將創建的所有子進程殺掉.調用report.打印(l_rs.report_summarize,格式可以見仿真log末尾部分).最后調用$finish結束仿真。

 


免責聲明!

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



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