0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

UVM中sequence的那些事兒

冬至子 ? 來源:多讀點(diǎn)書 ? 作者:夕文x ? 2023-05-26 15:17 ? 次閱讀

引入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。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    181

    瀏覽量

    19121
  • sequence
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    2828
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)字IC驗(yàn)證之“搭建一個(gè)可以運(yùn)行的uvm測試平臺(tái)”(5)連載...

    的transaction,以及創(chuàng)建用于產(chǎn)生事物的事物發(fā)生器sequence。  在uvm驗(yàn)證平臺(tái)中穿梭各個(gè)組件之間的基本信息單元是一個(gè)被稱為transaction的數(shù)據(jù)對(duì)象,也就是我們前面所說的事物
    發(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)問一下在UVM的UVMsequences是什么意思啊

    UVM方法學(xué),UVMsequences 是壽命有限的對(duì)象。UVM sequences從uvm_sequence_item基類擴(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)。這種測試場景在實(shí)際是存在的,比如在模擬同一個(gè)總線master口上的不同類型的數(shù)
    發(fā)表于 09-23 14:35

    sequence item實(shí)際應(yīng)用應(yīng)該包含哪些東西

    展開。Sequence item是游走在Sequence-Sequencer-Driver這一基本結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)類型,在有些地方也直接叫transaction,可以說是UVM的必用品
    發(fā)表于 09-23 14:42

    UVMseq.start()和default_sequence執(zhí)行順序

      1. 問題  假如用以下兩種方式啟動(dòng)sequence,方法1用sequence的start()方法啟動(dòng)seq1,方法2用UVM的default_sequence機(jī)制啟動(dòng)seq2。那
    發(fā)表于 04-04 17:15

    電源選型的那些事兒

    電路教程相關(guān)知識(shí)的資料,關(guān)于電源選型的那些事兒
    發(fā)表于 10-10 14:34 ?0次下載

    Linux的那些事兒之我是Block層

    Linux的那些事兒之我是Block層
    發(fā)表于 10-29 09:43 ?9次下載
    Linux的<b class='flag-5'>那些</b><b class='flag-5'>事兒</b>之我是Block層

    淺談UVMsequence/item見解(上)

    item指的是uvm_sequence_item, Sequence Item具備UVM核心基類所必要的數(shù)據(jù)操作方法,對(duì)于激勵(lì)的生成和場景控制,是由sequence來編織的,item應(yīng)
    的頭像 發(fā)表于 02-19 15:52 ?4996次閱讀
    淺談<b class='flag-5'>UVM</b>之<b class='flag-5'>sequence</b>/item見解(上)

    UVM sequence機(jī)制response的簡單使用

    sequence作為UVM幾個(gè)核心機(jī)制之一,它有效地將transaction的產(chǎn)生從driver剝離出來,并且通過和sequencer相互配合,成功地將driver的負(fù)擔(dān)降低至僅聚焦于根據(jù)協(xié)議將
    的頭像 發(fā)表于 09-22 09:26 ?2321次閱讀

    UVMadd_typewide_sequence和add_sequence的區(qū)別

    第2和第3種方式類似,第3種是一下子添加多個(gè)sequence,它內(nèi)部原理就是調(diào)用第2種的函數(shù),因此在本質(zhì)上,只有第1和第2種這兩類區(qū)別。
    的頭像 發(fā)表于 05-24 15:21 ?611次閱讀

    UVMuvm_do宏簡析

    uvm_do宏及其變體提供了創(chuàng)建、隨機(jī)化和發(fā)送transaction items或者sequence的方法。
    的頭像 發(fā)表于 06-09 09:36 ?4766次閱讀
    <b class='flag-5'>UVM</b><b class='flag-5'>中</b>的<b class='flag-5'>uvm</b>_do宏簡析

    在Sequencer上啟動(dòng)一個(gè)Sequence

    Sequencer默認(rèn)不執(zhí)行任何Sequence。驗(yàn)證工程師可以通過調(diào)用start()啟動(dòng)一個(gè)Sequence,也可以通過uvm_config_db指定一個(gè)自動(dòng)啟動(dòng)的Sequence
    的頭像 發(fā)表于 06-10 09:10 ?768次閱讀
    在Sequencer上啟動(dòng)一個(gè)<b class='flag-5'>Sequence</b>

    UVM設(shè)計(jì)sequence啟動(dòng)方式有哪幾種呢?

    本篇介紹UVMsequence,這是UVM中最基礎(chǔ)的部分。對(duì)于前面介紹的uvm_callback,
    的頭像 發(fā)表于 08-17 10:07 ?3898次閱讀
    <b class='flag-5'>UVM</b>設(shè)計(jì)<b class='flag-5'>中</b>的<b class='flag-5'>sequence</b>啟動(dòng)方式有哪幾種呢?