item指的是uvm_sequence_item, Sequence Item具備UVM核心基類(lèi)所必要的數(shù)據(jù)操作方法,對(duì)于激勵(lì)的生成和場(chǎng)景控制,是由sequence來(lái)編織的,item應(yīng)該有什么用途的數(shù)據(jù)成員被定義在item中呢?文章進(jìn)行了劃分。
無(wú)論是自駕item,穿過(guò)sequencer交通站,通往終點(diǎn)driver,還是坐上sequence的大巴,一路沿途觀光,最終跟隨導(dǎo)游??康斤L(fēng)景點(diǎn)driver,在介紹如何駕駛item和sequence,遵守什么交規(guī),最終可以有序地穿過(guò)sequencer抵達(dá)driver之前,讀者又必要首先認(rèn)識(shí)sequence與item之間的關(guān)系。這里的sequence值的是類(lèi)uvm_sequence,而item指的是uvm_sequence_item,為了文章的簡(jiǎn)潔,我們稱之為sequence和item。對(duì)于激勵(lì)的生成和場(chǎng)景控制,是由sequence來(lái)編織的,而對(duì)于激勵(lì)所需要的具體數(shù)據(jù)和控制要求,則是從item中的成員數(shù)據(jù)得來(lái)的。
Sequence Item
我們已經(jīng)提出item是基于uvm_object,這表明了它具備UVM核心基類(lèi)所必要的數(shù)據(jù)操作方法,例如copy、clone、compare、record等,這里我們不再做贅述。讀者需要了解到的是,通常對(duì)于一個(gè)item,應(yīng)該有什么用途的數(shù)據(jù)成員被定義在item中呢?我們可以將它們劃分下如下幾類(lèi):
控制類(lèi)。譬如總線協(xié)議上的讀寫(xiě)類(lèi)型、數(shù)據(jù)長(zhǎng)度、傳送模式等。
負(fù)載類(lèi)。一般即數(shù)據(jù)總線上的數(shù)據(jù)包。
配置類(lèi)。這往往是用來(lái)控制driver的驅(qū)動(dòng)行為,例如命令driver的發(fā)送間隔或者有無(wú)錯(cuò)誤插入。
調(diào)試類(lèi)。用來(lái)標(biāo)記一些額外的信息,用來(lái)方便調(diào)試,例如該對(duì)象的實(shí)例序號(hào)、創(chuàng)建時(shí)間、被driver解析的時(shí)間始末等。
下面的例碼是一段item的定義,從這段代碼中讀者可以看到上面提到的各種用途的數(shù)據(jù)使用情況:
輸出結(jié)果:
上面的這段代碼中,不但給出了一個(gè)較為典型的item定義,同時(shí)也伴有一些item使用時(shí)的特點(diǎn):
如果數(shù)據(jù)域?qū)儆趯?lái)需要用來(lái)做驅(qū)動(dòng),那么用戶應(yīng)考慮定義為rand類(lèi)型,同時(shí)按照驅(qū)動(dòng)協(xié)議給出合適的constraint。
由于item本身的數(shù)據(jù)屬性,為了充分利用UVM域聲明的特性,我們建議將必要的數(shù)據(jù)成員都通過(guò)`uvm_field_xxx宏來(lái)聲明,以便日后的基本函數(shù)操作,例如上面的print()函數(shù)。
讀者也注意到了一點(diǎn),上面的例子中,t1沒(méi)有隨機(jī)化而t2隨機(jī)化了,這種差別在item通往sequencer之前是很明顯的。因?yàn)閁VM要求item的創(chuàng)建和隨機(jī)化都應(yīng)該發(fā)生在sequence的body()任務(wù)中,而不是在sequencer或者driver中。
如果按照item對(duì)象的生命周期來(lái)區(qū)分,它的生命應(yīng)該開(kāi)始于sequence中的創(chuàng)建,而后經(jīng)歷了隨機(jī)化和穿越sequencer最終到達(dá)driver,直到被driver消化之后,它的生命周期一般來(lái)講才算壽終正寢。之所以要突出這一點(diǎn),是因?yàn)橐恍┯脩粼趯?shí)際中,會(huì)不恰當(dāng)?shù)刂苯硬僮鱥tem對(duì)象,直接修改其中的數(shù)據(jù),或者將它的句柄發(fā)送給其它組件使用,這就無(wú)形中修改了item的基因,或者延長(zhǎng)了一個(gè)item對(duì)象的壽命。這種不合適的對(duì)象操作方式是用戶需要注意的,可以取代的方式則是合理利用copy和clone等方法。
接下來(lái)我們需要理清item和sequence,以及sequence群落之間的關(guān)系。從簡(jiǎn)而言,一個(gè)sequence包含了一些有序組織起來(lái)的item實(shí)例,考慮到item在創(chuàng)建后需要被隨機(jī)化,sequence在聲明時(shí)也需要預(yù)留一些可供外部隨機(jī)化的變量,這些隨機(jī)變量一部分是用來(lái)通過(guò)層級(jí)傳遞來(lái)控制item對(duì)象中的變量的,一部分也是用來(lái)對(duì)item對(duì)象之間加以組織和時(shí)序控制的。為了加以區(qū)分幾種常見(jiàn)的sequence定義方式,我們?cè)诮榻B后續(xù)的sequence之前,首先將sequence可以分類(lèi)為:
扁平類(lèi)(flat sequence)。這一類(lèi)中往往只用來(lái)組織更細(xì)小的粒度,即item示例的組織。
層次類(lèi)(hierarchical sequence)。這一類(lèi)則是由更高層的sequence用來(lái)組織底層的sequence,進(jìn)而讓這些sequence或者按照順序的方式,或者按照并行的方式,掛載到同一個(gè)sequencer上。
虛擬類(lèi)(virtual sequence)。這一類(lèi)則是最終控制整個(gè)測(cè)試場(chǎng)景的方式,鑒于整個(gè)環(huán)境中往往存在不同種類(lèi)的sequencer和其對(duì)應(yīng)的sequence,我們需要一個(gè)虛擬的sequence來(lái)協(xié)調(diào)頂層的測(cè)試場(chǎng)景。之所以稱這個(gè)方式為virtual sequence,是因?yàn)樵撔蛄斜臼〔⒉还潭⊕燧d于某一種sequencer類(lèi)型上,而是它會(huì)將其內(nèi)部的各種不同類(lèi)型的sequence最終掛載到不同的目標(biāo)sequencer上面。這也是最大的不同于hierarchical sequence的一點(diǎn)。
-
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19234 -
sequence
+關(guān)注
關(guān)注
0文章
23瀏覽量
2864
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論