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