引入sequence的原因:
- 將 生成測試case的語句 從 main_phase 中獨(dú)立出來,使得使用不同測試用例時(shí),只需要修改sequence部分即可,而不用關(guān)注 UVM剩余部分。(提高剩余部分的可復(fù)用性)。
引入sequence的仲裁機(jī)制的原因:
- 一個(gè)sequencer上通過fork...join可以啟動(dòng)多個(gè)sequence,而多個(gè)sequence按照什么順序啟動(dòng)需要一定的仲裁機(jī)制來控制,具體而言主要從兩個(gè)角度控制
- sequence角度:自身的優(yōu)先級(jí)、原子性、有效性
- sequencer角度:對(duì)多個(gè)sequence的仲裁算法
引入sequence相關(guān)宏的原因:
- 更方便地控制transaction的產(chǎn)生過程,主要有:
- 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ù))
不同類型sequence共用sequencer的方法(一個(gè)driver):
- transaction類型例化的一個(gè)sequencer 對(duì)應(yīng) 多個(gè)不同約束的transaction包
- 可以通過一個(gè)sequence啟動(dòng)其他sequence(即嵌套的sequence),然后間接生成多個(gè)不同約束的transaction包 —— 注意:這里使用了cseq. start ( m_sequencer );這樣的語句
- 也可以通過一個(gè)sequence直接生成多個(gè)不同約束的transaction包
- 通過類型轉(zhuǎn)換,實(shí)現(xiàn)同一個(gè)sequencer處理不同兩個(gè)截然不同的transaction,步驟如下
- 將sequencer和driver能夠接受的數(shù)據(jù)類型設(shè)置為uvm_sequence_item
- driver中使用時(shí),使用cast將uvm_sequence_item轉(zhuǎn)換為各自transaction的類型
補(bǔ)充:start任務(wù)參數(shù)說明 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句柄,其類型是uvm_sequencer_base。
sequencer向sequence傳遞變量(約束)的方法:
- 方法一:通過cast轉(zhuǎn)換將sequence內(nèi)置變量m_sequencer(類型為uvm_sequencer_base)轉(zhuǎn)換成my_sequencer類型, 然后引用uvm_sequencer中的成員變量作為約束
- 方法二:在sequence中使用`uvm_declare_p_sequencer(my_sequencer),然后通過宏默認(rèn)生成的變量p_sequencer來引用uvm_sequencer中的成員變量作為約束
補(bǔ)充:uvm_declare_p_sequence的實(shí)質(zhì)是在base_sequence中聲明了一個(gè)成員變量p_sequencer,并將其指向啟動(dòng)本sequence的sequencer。
發(fā)往不同driver的sequence之間的同步的方法:
- 方法一:通過全局事件進(jìn)行簡單同步:在drv0_seq中觸發(fā)事件,在drv1_seq中等待這個(gè)全局事件。
- 方法二:使用 virtual sequence+virtual sequencer,可以實(shí)現(xiàn)類似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。
-
UVM
+關(guān)注
關(guān)注
0文章
181瀏覽量
19121 -
sequence
+關(guān)注
關(guān)注
0文章
23瀏覽量
2828
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論