在一個(gè)系統(tǒng)級(jí)的驗(yàn)證環(huán)境中,多個(gè)驗(yàn)證組件并行地產(chǎn)生激勵(lì)。測(cè)試用例開(kāi)發(fā)者可能希望協(xié)調(diào)多個(gè)通道激勵(lì)之間的時(shí)序和數(shù)據(jù)。
Virtual sequences與virtual sequencer相關(guān)聯(lián),用于協(xié)調(diào)測(cè)試平臺(tái)中的激勵(lì)生成。一般來(lái)說(shuō),一個(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è)試期間開(kāi)發(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è)試用例開(kāi)發(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類(lèi)派生出一個(gè)virtual sequencer類(lèi)。
在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類(lèi)。
定義一個(gè)body()方法。
使用`uvm_ do_on(或` uvm_do_on_with)宏來(lái)調(diào)用subsequencers的sequences。
使用`uvm_do(或`uvm_do_with)宏來(lái)調(diào)用當(dāng)前virtual sequencer中的其他virtual sequences。
一個(gè)virtual sequence不能使用`uvm_do或`uvm_do_with來(lái)執(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)注
104文章
16138瀏覽量
147014 -
UVM
+關(guān)注
關(guān)注
0文章
183瀏覽量
20013 -
sequence
+關(guān)注
關(guān)注
0文章
23瀏覽量
3263
原文標(biāo)題:UVM中的Virtual Sequences
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
SystemVerilog中的Virtual Methods
IC驗(yàn)證"UVM驗(yàn)證平臺(tái)加入factory機(jī)制"(六)
IC驗(yàn)證“UVM驗(yàn)證平臺(tái)加入objection機(jī)制和virtual interface機(jī)制“(七)
數(shù)字IC驗(yàn)證之“什么是UVM”“UVM的特點(diǎn)”“UVM提供哪些資源”(2)連載中...
什么是uvm?uvm的特點(diǎn)有哪些呢
UVM sequence分層有哪幾種方式呢
請(qǐng)問(wèn)一下在UVM中的UVMsequences是什么意思啊
談?wù)?b class='flag-5'>UVM中的uvm_info打印
virtual sequence和virtual sequencer的操作步驟
為什么需要使用virtual,不用可不可以?
UVM中uvm_config_db機(jī)制背后的大功臣
如何用Verdi查看UVM環(huán)境中的變量?
UVM中uvm_config_db機(jī)制背后的大功臣
UVM設(shè)計(jì)中的sequence啟動(dòng)方式有哪幾種呢?
如何將sequences類(lèi)型添加或注冊(cè)到sequence library里呢?
淺析UVM中的Virtual Sequences
評(píng)論