這份白皮書說明在 Questa 驗證 IP 中實作的回呼如何使用 PCIe 協定在設計中進行斷言驗證。
在 Questa 驗證 IP 中,首先定義回呼方法和政策,以便它們在所有協定中都通用。對於每個特定的協定,回呼方法隨後會從這些基底類別中擴充而來。
其中一個基底類別叫做 cb_policy,是從 uvm_object 擴充而來。它定義暫存器、取得及放回回呼等方法。這些方法被宣告為純虛擬任務或函數,這樣派生類別就可以覆寫基底類別定義。
第二個基底類別從 uvm_component 擴充而來,叫做 cb_manager。這個類別的 run_phase() 是一個無窮迴路,首先我們從 BFM 取得序列,接著再將改變的序列項目放回 BFM。在 cb_manager 類別定義的個別外部任務中會加入回呼序列項目並從回呼佇列刪除,暫存器回呼方法會依據佇列大小啟動。
對於每個協定的回呼實作,協定特有的序列項目會從上述基底類別自行擴充。分配的名稱:擴充自 cb_manager 的類別是 _ cb_manager,擴充自 cb_policy 的類別則是 _cb_policy。
在 _cb_policy 類別中,依據各個協定的特性會填充暫存器、取得及放回等回呼方法。為特定序列項目啟動回呼的流程從啟動測試 build_phase 的代理程式設定開始(擴充自 uvm_test 的類別),這是 _cb_manager 的實例。在測試的 run_phase,呼叫附加回呼任務(在 cb_manager 內定義)會啟動暫存器回呼方法。
暫存器回呼方法的主要目的是開始進行 BFM 內回呼的相關任務,以設定狀態變數。BFM 內的狀態變數一設定完成,就會呼叫取得回呼方法,以透過 DPI 呼叫從 BFM 取得序列項目。控制序列項目欄位的所有邏輯位在 _cb_manager 內定義的 do_callback。改動的序列項目接著會透過 DPI 呼叫被放回 BFM,最後會驅動到匯流排上。