什么是 UVM transaction?
UVM 中的事務(wù)是一個(gè)具有信號(hào)屬性(例如地址和數(shù)據(jù))以及錯(cuò)誤、延遲等額外信息的類??傊@個(gè)所謂事務(wù)封裝了所有和DUT激勵(lì)項(xiàng)相關(guān)的信息. 但是,我們無(wú)法僅通過(guò)單個(gè)事務(wù)去驗(yàn)證設(shè)計(jì),我們需要一組相關(guān)的事務(wù)。
注意:這里的“相關(guān)”也正體現(xiàn)了驗(yàn)證工程師的經(jīng)驗(yàn),試想如果全依賴隨機(jī)如何能夠沖擊到DUT 的corner case呢?
這里就引入了uvm sequence。
UVM中的一組相關(guān)事務(wù)稱為uvm sequence,單個(gè)事務(wù)稱為sequence items。當(dāng)你開發(fā)一個(gè)事務(wù)項(xiàng)類時(shí),需要擴(kuò)展自u(píng)vm_sequence_item,而不是 uvm_transaction。
上面是事務(wù)項(xiàng)類的層次結(jié)構(gòu),其中tx_item就是我們施加給DUT的單個(gè)事務(wù)。
使用uvm_sequence_item而不是uvm_transaction 的優(yōu)勢(shì)
uvm_transaction 類是遺留下來(lái)的驗(yàn)證方案中的一部分,它的缺點(diǎn)是不知道上下文,即不知道自己是否屬于一組事務(wù)中的一部分。
而uvm_sequence_item類中除了前面提到的接口屬性之外,還加入了幾個(gè)連接到外部世界的屬性。
舉個(gè)例子,像內(nèi)存讀寫這樣的事情,一般都會(huì)有一個(gè)“響應(yīng)”,它會(huì)告訴上游模塊是否已經(jīng)完成了讀寫操作以及讀取的值。
uvm驗(yàn)證環(huán)境中的driver也可能同時(shí)處理多個(gè)sequence,所以同樣需要將響應(yīng)路由到正確的sequence。所以,uvm_sequence_item類帶有一個(gè)sequence ID 屬性,因此響應(yīng)能夠被返回到正確的位置(sequence)。
UVM sequencer就像是一個(gè)交通路口紅綠燈,因?yàn)槎鄠€(gè)sequence可能會(huì)通過(guò)同一個(gè)driver激勵(lì)DUT,其中sequencer會(huì)在sequence之間進(jìn)行仲裁。
uvm_sequence_item中有一個(gè)uvm_sequencer的句柄(通過(guò)sequence的start方法傳遞),如下所示:
my_sequence.start(env.agt.sqr);sequence是可以分層的,一個(gè)sequence可以啟動(dòng)其他sequence,這種情況下每個(gè) uvm_sequence_item 都有一個(gè)指向parent sequence的句柄。
結(jié)論
當(dāng)開發(fā)UVM 測(cè)試平臺(tái)時(shí),事務(wù)類一定需要從 uvm_sequence_item 擴(kuò)展,而不是uvm_transaction。
審核編輯:劉清
-
UVM
+關(guān)注
關(guān)注
0文章
181瀏覽量
19112 -
DUT
+關(guān)注
關(guān)注
0文章
189瀏覽量
12274
原文標(biāo)題:為什么使用 uvm_sequence_item 而不是uvm_transaction構(gòu)建 UVM 事務(wù)?
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論