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