UVM中的phase,按照其是否消耗仿真時間($time打印出的時間)的特性,可以分成兩大類,一類是function phase,一類是task phase。就像task和function一樣,task phase消耗仿真時間。
如圖所示灰色的phase是task phase其他均為function phase
上述所有的phase都會按照圖中的順序自上而下自動執行。使用頻率最高的是build_phase、connect_phase和main_phase
-
對于function phase來說,在同一時間只有一個phase在執行;但是task phase中,run_phase和pre_reset_phase等12個小的phase并行運行。后者稱為動態運行(run-time)的phase。
-
run phase可以和其他12個小phase 的關系是可以在run phase里執行12個小phase的功能,也可以在12個小phase中分步進行。run phase和其他12個phse是一個并行關系,而12個phase是順序執行的。
對于task phase,從全局的觀點來看其順序大致如下:
fork
begin
run_phase();
end
begin
pre_reset_phase();
reset_phase();
post_reset_phase();
pre_configure_phase();
configure_phase();
post_configure_phase();
pre_main_phase();
main_phase();
post_main_phase();
pre_shutdown_phase();
shutdown_phase();
post_shutdown_phase();
end
join
-
12個小phase存在意義:分成小的phase是為了實現更加精細化的控制。reset、configure、main、shutdown四個phase是核心,這四個phase通常模擬DUT的正常工作方式,在reset_phase對DUT進行復位、初始化等操作,在configure_phase則進行DUT的配置,DUT的運行主要在main_phase完成,shutdown_phase則是做一些與DUT斷電相關的操作。
假設要在運行過程中對DUT進行一次復位(reset)操作,在沒有這些細分 的phase之前,這種操作要在scoreboard、reference model等加入一些額 外的代碼來保證驗證平臺不會出錯。但是有了這些小的phase之后,那么只 要通過phase的跳轉,就會自動跳轉回reset_phase。
-
bulid phase的執行順序是自上而下,即先執行test case的bulid phase然后執行env,在執行monitor和driver的build phase,而同級的monitor和driver的build phase執行順序是按照字典序的,這里的字典序的排序依據new時指定的名字。
UVM的uvm_component及其派生類變量的實例化在build_phase中做實 例化工作,如果是uvm_object的實例化,可以是任何的phase。
-
除了build_phase之外,所有不耗費仿真時間的phase(即function phase)都是自下而上執行的。connect phase執行順序是自下而上的,如對于connect_phase即先執行driver和monitor的connect_phase,再執行agent的connect_phase。
-
無論是自上而下(build_phase)還是自下而上(connect_phase)的phase,其執行順序都與實例化的順序無關,而是嚴格按照實例化時指定名字的字典序
審核編輯 :李倩
-
UVM
+關注
關注
0文章
182瀏覽量
19196 -
PHASE
+關注
關注
0文章
13瀏覽量
10856
原文標題:UVM里的phase機制
文章出處:【微信號:FPGA學姐,微信公眾號:FPGA學姐】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論