在一個系統級的驗證環境中,多個驗證組件并行地產生激勵。測試用例開發者可能希望協調多個通道激勵之間的時序和數據。
Virtual sequences與virtual sequencer相關聯,用于協調測試平臺中的激勵生成。一般來說,一個virtual sequencer包含對其子sequencer的引用,即driver sequencers或其他virtual sequencers。
Virtual sequences可以調用其他virtual sequences,以及每個子sequencer中的sequences(driversequences)。
在下圖中,virtual sequencer在ethernet和cpu驗證組件上調用配置sequences。這些配置sequences是在模塊級測試期間開發的,可以在系統級測試時復用。
有三種方式可以讓virtual sequencer與它的subsequencers交互:
Virtual sequencers和subsequencers同時發送激勵。
禁用subsequencers。Virtualsequencers是唯一的驅動。
使用grab()和ungrab()--Virtualsequencers在有限的時間內控制激勵發送。
當使用virtual sequences時,大多數測試用例開發用戶都會只從virtual sequences中調用sequences。要調用sequences,需要執行以下操作之一:
使用'uvm_do宏 。
使用sequence start()方法。
創建一個Virtual Sequencer
為了從一個sequencer中對多個sequencers進行控制,可以使用一個不附屬于driver的sequencer,這就是virtual sequencer。要創建一個virtual sequencer,需要:
從uvm_sequencer類派生出一個virtual sequencer類。
在virtual sequencer中添加對其他subsequencer的指針(在更高層次的驗證組件(通常是top-level environment)中)。
下面的例子聲明了一個有兩個subsequencers的virtual sequencer。
Subsequencers可以是driver sequencers或其他virtual sequencers。
創建一個Virtual Sequence
要創建一個virtual sequence:
從uvm_sequence派生出一個sequence類。
定義一個body()方法。
使用`uvm_ do_on(或` uvm_do_on_with)宏來調用subsequencers的sequences。
使用`uvm_do(或`uvm_do_with)宏來調用當前virtual sequencer中的其他virtual sequences。
一個virtual sequence不能使用`uvm_do或`uvm_do_with來執行數據項的發送,只能執行sequences。
下面的例子顯示了一個簡單的virtual sequence控制兩個subsequencers:cpu sequencer和ethernet sequencer。假設cpu sequencer有 一 個 cpu_config_seq sequence,ethernet sequencer有一個 eth_large_payload_seq序列。
控制其他Sequencers
當使用virtual sequencer時,需要考慮subsequencers和virtualsequence之間的關系。有三種典型的可能性:
virtual sequencer和subsequencers同時產生激勵。subsequencers產生的數據項和virtual sequencer產生的數據項被混合在一起,并由driver以任意順序執行。
禁用subsequencers。使用uvm_config_db::set將subsequencers的default_sequence屬性設置為null。
使用grab()/lock()和ungrab()/unlock()。在這種情況下,一個virtual sequence可以在有限的時間內實現對其subsequencers的完全控制,然后讓原始sequences繼續工作。grab和lock防止其他sequence在被鎖定的sequencer上被執行。
grab()方法將lock request放在sequencer仲裁隊列的頭部,允許調用者阻止當前等待授予的數據項被處理,而lock()方法將lock request放在隊列的末端,允許數據項在授予lock之前被處理。
將Virtual Sequencer連接到Subsequencers上
要連接一個virtual sequencer和它的subsequencers,需要在驗證環境的connect()phase將sequencer的實例賦值給virtual sequencer中指定的sequencer指針。
v_sequencer.cpu_seqr = cpu_seqr; v_sequencer.eth_seqr = eth_seqr;
下面這個例子顯示了一個top-level environment,它實例化了ethernet和cpu驗證組件以及控制這兩個組件的virtual sequencer。
在top-level environment中,各個組件內部的sequencers的路徑是已知的,可以根據該路徑將sequencers連接到virtual sequencer上。
?
審核編輯:劉清
-
連接器
+關注
關注
98文章
14585瀏覽量
136792 -
UVM
+關注
關注
0文章
182瀏覽量
19193 -
sequence
+關注
關注
0文章
23瀏覽量
2852
原文標題:UVM中的Virtual Sequences
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論