目錄
5.1 phase機制
1.兩種執行順序和兩種型別phase
2.phase的執行順序(phase核心意義:層次化順序)
1.同一compoent不同phase的執行順序
2.歸屬不同compoent相同phase的執行順序
3.super.phase有什么作用?
4.phase機制的意義
5.2 objection機制
1.run_time phase和run_phase的objection
2.圖5-4的大樓在講什么?
3.phase的引數串列中(uvm_phase phase)的作用
4.objection放在哪里?
5.set_drain_time的引入
5.3 domain的應用
1.domain是什么?
5.1 phase機制
1.兩種執行順序和兩種型別phase
1.兩種執行順序
①不同phase的執行順序
②歸屬不同compoent相同phase的執行順序
2.兩種型別phase
①不消耗仿真時間phase:function phase
②消耗仿真時間phase:task phase,task phase又分為run_phase和run_time phase
2.phase的執行順序(phase核心意義:層次化順序)
建議理解此處時結合實際的情景,否則容易被繞暈
1.同一compoent不同phase的執行順序
1.整體function phase+task phase,自上而下
eg.圖5-1左側整體自上而下
2.單獨task phase中,run_phase和run_time phase并行(兩者全部完成才退出task phase,重新進入function phase),12個run_time phase順序運行
eg.結合圖5-4來看,run_phase和run_time phase會同時啟動且并行,兩者需要全部執行完.而run_time phase內部12個是順序運行
2.歸屬不同compoent相同phase的執行順序
1.依UVM樹parent/child從上到下順序聯系起來的不同comp:
①function phase
a.build_phase--->自上而下依次執行
eg.先build agent 再 build driver
b.其余phase(例如connect_phase)--->自下而上
eg.先連接 driver 再 連接 agent
②task phase
自下而上啟動,同步執行
eg.agent和driver自上而下啟動run_phase,但是同步執行
2.在UVM樹中同層次的不同comp
①function phase
按實體化指定name的字典順序>深度優先
eg.兩個driver實體化是分別命名為a_drv和b_drv,a_drv先于b_drv執行
執行完agent,先執行agent中的drv還是執行和agent同層的scb? 執行drv
②task phase
同步執行
eg.兩個driver某一個phase兩者都執行完才會去下一個phase,圖5-4執行完一層去下一層
3.super.phase有什么作用?
其實就是繼承在uvm_compoent中已經定義好的變數/方法,作者建議有的可以寫有的可不寫,但是我個人建議寫上去,以免后續uvm庫有更新,自己還要更改代碼風格.
4.phase機制的意義
自動生成安全的層次化
建議5.1.8和2.3.4一起加深理解
5.2 objection機制
1.run_time phase和run_phase的objection
1.只要有一個comp中的run_time phase已經raise objection,其余comp就運行
2.run_phase只要run_time phase raise objection,就會運行
2.圖5-4的大樓在講什么?
本質講的就是5.1中1和2以及5,2中的1.
1.run_phase和run_time phase并行
2.某一phase只需要擁有該phase的某一com raise objection便會運行,反之不會運行
3.run_phase可依靠run_time phase的objection運行,且先run_time phase后run_phase
3.phase的引數串列中(uvm_phase phase)的作用
參考我之前寫的blogUVM phase機制中各個phase function/task 的引數串列(uvm_phase phase)怎么理解?_IC-V的博客-CSDN博客
4.objection放在哪里?
objection放在哪里也就意味著哪里控制著整個UVM平臺的運行(可以再結合大樓理解一下).
1.scoreboard(需要改造無線回圈,mon和drv便是因此而不發起objection)
2.在sequence中(詳見2.4.3中代碼2-73),利用uvm_sequence中的staring_phase.
提升一下,放在sequence中,也就意味著sequence和objection緊密連接在一起,類似意思作者在2.4.3引入default_sequence后也提及過.這里體現了UVM的設計哲學,作為驗證平臺資料流發生器sequence,sequence的啟動與結束,也就代表了驗證平臺運行的啟動與結束.
5.set_drain_time的引入
上一個問題已經決定由sequence和objection的聯動來決定UVM平臺phase的運行,但是從seq到sqr再到drv驅動至dut,同時其余comp也捕捉資料,這中間存在時間差.如果seq產生完資料直接drop,進入下一個phase,有可能其余comp該phase還未正常執行,因此需要給其他comp延時,也就是set_drain_time.
需求是: 保證seq在drop objection 時,全部comp執行完畢. 解決是:增加set_drain_time
5.3 domain的應用
1.domain是什么?
用于組織不同組件的概念
在5.1中我們提到,不同comp的function phase/run_phase/run_time phase的同步,引入domain,將不同comp置入不同domain,run_time phase便不再保持同步.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321347.html
標籤:區塊鏈
