UVM中每個phase都有一個內置的objection,為components和objects提供了同步方法,指示何時可以安全地結束這個phase,最終結束整個test case。
一般來說,由一個components或sequence在激勵開始時raise phase objection,激勵處理完畢之后drop objection。一旦所有提起的objections被dropped,該phase就終止了。
在仿真中,一個master agent可能需要在runphase停止之前完成所有的讀寫操作,一個reactive slave agent不會drop objection,因為它只是一直被動地處理事務。對于sequence來說,有三種可能的方式可以處理phase objection。
a)
class test extends ovm_test; task run_phase(uvm_phase phase); phase.raise_objection(this); seq.start(seqr); phase.drop_objection(this); endtask endclass
b)
class test extends ovm_test; task run_phase (uvm_phase phase); seq.set_starting_phase(phase); seq.start(seqr); endtask endclass class seq extends uvm_sequence #(data_item); task body(); uvm_phase p = get_starting_phase(); if(p) p.raise_objection(this); //some critical logic if(p)p.drop_objection(this); endtask endclass
c)
class test extends ovm_test; task run_phase (uvm_phase phase); seq.set_starting_phase(phase); seq.start(seqr); endtask endclass class seq extends uvm_sequence #(data_item); function new(string name = "seq"); super.new(name); set_automatic_phase_objection(1); endfunction task body(); // Sequence logic with no objection // as it is already handled in the base class endtask endclass
上面的三種方式只需要實現其中一種即可。
當所有objections都被dropped,當前運行的phase就結束了。在仿真過程中,可能需要一些額外的cycle來向scoreboard傳輸最后一筆transaction。
為了適配這種情況,可以使用phase_ready_to_end()方法在必要時刻重新提出phase objection。
另外,也可以設置一個drain time,在組件所有objections都被dropped之后注入一個延遲。一般是在env或者test級設置drain time。
審核編輯:劉清
-
仿真器
+關注
關注
14文章
1019瀏覽量
83936 -
UVM
+關注
關注
0文章
182瀏覽量
19228
原文標題:管理test case結束機制
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
基于base test如何來構造測試用例
條件(Case)結構的運用細節
Linux Shell系列教程之(十三)Shell分支語句case … esac教程
如何解決vhdl代碼中的case語句問題?
工作流管理系統柔性機制
linux內存管理機制淺析
![linux內存<b class='flag-5'>管理機制</b>淺析](https://file.elecfans.com/web2/M00/49/3E/pYYBAGKhtEGANysiAAAVqXJNgOs964.jpg)
JavaScript定時器與執行機制介紹
聊一聊所謂的Objection機制
![聊一聊所謂的Objection<b class='flag-5'>機制</b>](https://file1.elecfans.com/web2/M00/89/66/wKgZomSCmeSADpJkAABL5IgMCFs624.png)
CASE:創建多路分支
![<b class='flag-5'>CASE</b>:創建多路分支](https://file1.elecfans.com/web2/M00/8B/80/wKgaomSaW5uAQthVAAAOXO7mUh0029.png)
評論