1-phase機制的必要性,phase自動執行的原理,phases及執行順序(內含process知識點)


參考資料:

(1) uvm啟動過程及phase機制實現原理介紹_HelloQili的博客-CSDN博客

(2) UVM1.1應用指南及源代碼分析-張強

1.phase機制簡介

1.1. phase機制的必要性

在不同的時間做不同的事情;

1.2. phase的自動執行(原理)

(1) uvm_root的run_test task中,調用uvm_phase的一個static task m_run_phases,開始了uvm_phases的啟動;

 

注1:上段code中通過process得到進程的句柄;其中process是sv中內建類;

注2: 進程類型的對象在進程產生的時候在內部產生 ,用戶不能通過調用new產生進程類型的對象;

注3: 進程類process不能被擴展;

注4: 進程類的self()函數返回當前進程的句柄;上述code中通過self函數得到了fork...join_none這個進程的句柄;

注5:得到進程的句柄后,可以通過控制句柄對進程進行控制,比如通過調用process.kill()函數可以殺死該進程;

(2) m_run_phases中啟動forever進程不斷get phase,get成功就執行phase的execute_phase task.

(3) uvm_phase的execute_phase task會通過調用traverse task對uvm_components tree上的所有component進行遍歷.

(4) ...

2. uvm_phase簡介及分類

注1:uvm_phase分為function phase(不耗費仿真時間)和task phase(耗費仿真時間),具體詳見下表;

 

3. uvm_phase的執行順序

注1:run_time phase中的reset_phase, configure_phase, main_phase, shutdown_phase都有與之對應的pre_*_phase和post_*_phase;

注2:run_phase與run-time phase並行運行;

注3:引入run_time phase是為了實現更加精細化的控制;

注4:只有當所有組件均執行完當前phase時,才會接着執行下一個phase(尤其是對於task phase而言);如下圖所示,雖然對於A和B而言,都存在一段空白等待事件,但是從整個驗證平台的角度來看,各個task phase之間是沒有空白的,這可以稱作phase間的同步;

注5:phase間的同步不止適用於不同component的各個run-time phase之間,還適用於不同component的run_phase與run_phase之間,以及同一component的run_phase與post_shutdown_phase之間;

3.1. 時間角度:

(1) uvm_phase按照上圖所示從上到下的順序執行,其中run_phase與其他12個run_time phase並行執行.

3.2. 空間角度:

3.2.1. UVM樹中有直系關系的component(function phase)

(1) build_phase與finial_phase從上到下執行,其他function phase(如connect_phase)都是自下而上執行.

(2) UVM在build_phase做uvm_component的實例化工作,這也是build_phase從上到下執行的原因;只有parent uvm_component組件例化后,才能進行child uvm_component組件的例化;

3.2.2. UVM樹中具有兄弟關系的component(function phase)

(1) 如driver與monitor:執行順序按照字典序(這里的字典序的排序依據new時指定的名字).

3.2.3. UVM樹中叔侄關系的component(function phase)

(1) 如my_scoreboard與my_driver:UVM樹采用深度優先的原則,如果i_agt的build_phase執行完畢,接下來執行的是其孩子的build_phase,一直到整棵以i_agt為樹根的UVM子樹的build_phase執行完畢,之后再執行i_agt的兄弟的build_phase; 

3.2.4. UVM中task phase執行順序

(1) run_phase, main_phase等task_phase也是按照自下而上的順序執行. 確切的說,是自下而上的啟動(先啟動driver的run_phase,然后啟動agent的run_phase),同時在運行,並不是說driver的run_phase執行完畢才開始執行agent的run_phase.


免責聲明!

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



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