引入sequence的原因:
- 將 生成測(cè)試case的語(yǔ)句 從 main_phase 中獨(dú)立出來(lái),使得使用不同測(cè)試用例時(shí),只需要修改sequence部分即可,而不用關(guān)注 UVM剩余部分。(提高剩余部分的可復(fù)用性)。
引入sequence的仲裁機(jī)制的原因:
- 一個(gè)sequencer上通過(guò)fork...join可以啟動(dòng)多個(gè)sequence,而多個(gè)sequence按照什么順序啟動(dòng)需要一定的仲裁機(jī)制來(lái)控制,具體而言主要從兩個(gè)角度控制
- sequence角度:自身的優(yōu)先級(jí)、原子性、有效性
- sequencer角度:對(duì)多個(gè)sequence的仲裁算法
引入sequence相關(guān)宏的原因:
- 更方便地控制transaction的產(chǎn)生過(guò)程,主要有:
- uvm_do系列宏:實(shí)例化transaction+將transaction交給sequencer(對(duì)應(yīng)start_item與finish_item任務(wù))
- uvm_create宏:實(shí)例化transaction,可用new代替
- uvm_send宏:將transaction交給sequencer(對(duì)應(yīng)start_item與finish_item任務(wù))
- uvm_rand_send系列宏:對(duì)transaction進(jìn)行隨機(jī)化+將transaction交給sequencer(對(duì)應(yīng)start_item與finish_item任務(wù))
不同類(lèi)型sequence共用sequencer的方法(一個(gè)driver):
- transaction類(lèi)型例化的一個(gè)sequencer 對(duì)應(yīng) 多個(gè)不同約束的transaction包
- 可以通過(guò)一個(gè)sequence啟動(dòng)其他sequence(即嵌套的sequence),然后間接生成多個(gè)不同約束的transaction包 —— 注意:這里使用了cseq. start ( m_sequencer );這樣的語(yǔ)句
- 也可以通過(guò)一個(gè)sequence直接生成多個(gè)不同約束的transaction包
- 通過(guò)類(lèi)型轉(zhuǎn)換,實(shí)現(xiàn)同一個(gè)sequencer處理不同兩個(gè)截然不同的transaction,步驟如下
- 將sequencer和driver能夠接受的數(shù)據(jù)類(lèi)型設(shè)置為uvm_sequence_item
- driver中使用時(shí),使用cast將uvm_sequence_item轉(zhuǎn)換為各自transaction的類(lèi)型
補(bǔ)充:start任務(wù)參數(shù)說(shuō)明 seq0.start(env.i_agt.sqr, null, 100);
- 第一個(gè)參數(shù):sequencer的位置,指明seq0由哪個(gè)sequencer啟動(dòng)
- 第二個(gè)參數(shù):parent sequence
- 第三個(gè)參數(shù):seq0的優(yōu)先級(jí)
補(bǔ)充:m_sequencer是一個(gè)屬于每個(gè)sequence的成員變量,它指向執(zhí)行當(dāng)前sequence的sequencer句柄,其類(lèi)型是uvm_sequencer_base。
sequencer向sequence傳遞變量(約束)的方法:
- 方法一:通過(guò)cast轉(zhuǎn)換將sequence內(nèi)置變量m_sequencer(類(lèi)型為uvm_sequencer_base)轉(zhuǎn)換成my_sequencer類(lèi)型, 然后引用uvm_sequencer中的成員變量作為約束
- 方法二:在sequence中使用`uvm_declare_p_sequencer(my_sequencer),然后通過(guò)宏默認(rèn)生成的變量p_sequencer來(lái)引用uvm_sequencer中的成員變量作為約束
補(bǔ)充:uvm_declare_p_sequence的實(shí)質(zhì)是在base_sequence中聲明了一個(gè)成員變量p_sequencer,并將其指向啟動(dòng)本sequence的sequencer。
發(fā)往不同driver的sequence之間的同步的方法:
- 方法一:通過(guò)全局事件進(jìn)行簡(jiǎn)單同步:在drv0_seq中觸發(fā)事件,在drv1_seq中等待這個(gè)全局事件。
- 方法二:使用 virtual sequence+virtual sequencer,可以實(shí)現(xiàn)類(lèi)似crossbar的連接,且因?yàn)関irtual sequence的body是順序執(zhí)行,所以可以輕松實(shí)現(xiàn)整體順序(同步),局部并行的效果。

補(bǔ)充:verilog中事件的基本使用
- event變量聲明為:
- event var;
- event觸發(fā)為:
- ->var;
- 捕獲觸發(fā)為:
- @(var);
sequence library的概念:
- 派生自u(píng)vm_sequence,就是一系列sequence的集合,它會(huì)根據(jù)特定的算法隨機(jī)選擇注冊(cè)在其中的一些sequence, 并在body中執(zhí)行這些sequence。
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
UVM
+關(guān)注
關(guān)注
0文章
183瀏覽量
20093 -
sequence
+關(guān)注
關(guān)注
0文章
23瀏覽量
3293
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
數(shù)字IC驗(yàn)證之“搭建一個(gè)可以運(yùn)行的uvm測(cè)試平臺(tái)”(5)連載中...
的transaction,以及創(chuàng)建用于產(chǎn)生事物的事物發(fā)生器sequence?! ≡?b class='flag-5'>uvm驗(yàn)證平臺(tái)中穿梭各個(gè)組件之間的基本信息單元是一個(gè)被稱(chēng)為transaction的數(shù)據(jù)對(duì)象,也就是我們前面所說(shuō)的事物
發(fā)表于 01-26 10:05
UVM sequence分層有哪幾種方式呢
種請(qǐng)求下可以使用第一種分層方式,在high-layer sequence中依然使用low-layer sequencer進(jìn)行驅(qū)動(dòng),同時(shí)對(duì)low-layer sequence進(jìn)行更加精細(xì)化的控制
發(fā)表于 04-11 16:37
請(qǐng)問(wèn)一下在UVM中的UVMsequences是什么意思啊
在UVM方法學(xué)中,UVMsequences 是壽命有限的對(duì)象。UVM sequences從uvm_sequence_item基類(lèi)擴(kuò)展得到,uvm_s
發(fā)表于 04-11 16:43
UVM sequence分層的幾種體現(xiàn)
種請(qǐng)求下可以使用第一種分層方式,在high-layer sequence中依然使用low-layer sequencer進(jìn)行驅(qū)動(dòng),同時(shí)對(duì)low-layer sequence進(jìn)行更加精細(xì)化的控制。在上面
發(fā)表于 04-14 11:08
如何配置sequence的仲裁算法和優(yōu)先級(jí)及中斷sequence的執(zhí)行
01 Arbitrary在UVM中,多個(gè)sequence可以同時(shí)被綁定到相同的sequencer并啟動(dòng)。這種測(cè)試場(chǎng)景在實(shí)際中是存在的,比如在模擬同一個(gè)總線master口上的不同類(lèi)型的數(shù)
發(fā)表于 09-23 14:35
sequence item實(shí)際應(yīng)用中應(yīng)該包含哪些東西
展開(kāi)。Sequence item是游走在Sequence-Sequencer-Driver這一基本結(jié)構(gòu)中的數(shù)據(jù)結(jié)構(gòu)類(lèi)型,在有些地方也直接叫transaction,可以說(shuō)是UVM的必用品
發(fā)表于 09-23 14:42
UVM中seq.start()和default_sequence執(zhí)行順序
1. 問(wèn)題 假如用以下兩種方式啟動(dòng)sequence,方法1用sequence的start()方法啟動(dòng)seq1,方法2用UVM的default_sequence機(jī)制啟動(dòng)seq2。那
發(fā)表于 04-04 17:15
淺談UVM之sequence/item見(jiàn)解(上)
item指的是uvm_sequence_item, Sequence Item具備UVM核心基類(lèi)所必要的數(shù)據(jù)操作方法,對(duì)于激勵(lì)的生成和場(chǎng)景控制,是由sequence來(lái)編織的,item應(yīng)
UVM sequence機(jī)制中response的簡(jiǎn)單使用
sequence作為UVM幾個(gè)核心機(jī)制之一,它有效地將transaction的產(chǎn)生從driver中剝離出來(lái),并且通過(guò)和sequencer相互配合,成功地將driver的負(fù)擔(dān)降低至僅聚焦于根據(jù)協(xié)議將
UVM中add_typewide_sequence和add_sequence的區(qū)別
第2和第3種方式類(lèi)似,第3種是一下子添加多個(gè)sequence,它內(nèi)部原理就是調(diào)用第2種的函數(shù),因此在本質(zhì)上,只有第1和第2種這兩類(lèi)區(qū)別。
在Sequencer上啟動(dòng)一個(gè)Sequence
Sequencer默認(rèn)不執(zhí)行任何Sequence。驗(yàn)證工程師可以通過(guò)調(diào)用start()啟動(dòng)一個(gè)Sequence,也可以通過(guò)uvm_config_db指定一個(gè)自動(dòng)啟動(dòng)的Sequence。
UVM設(shè)計(jì)中的sequence啟動(dòng)方式有哪幾種呢?
本篇介紹UVM中的sequence,這是UVM中最基礎(chǔ)的部分。對(duì)于前面介紹的uvm_callback,
UVM中sequence的那些事兒
評(píng)論