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

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

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

如何在定義后啟動(dòng)一個(gè)sequence

我快閉嘴 ? 來源:FPGA學(xué)姐 ? 作者:FPGA學(xué)姐 ? 2022-09-09 09:41 ? 次閱讀

Q:激勵(lì)最初產(chǎn)生在driver中,后來產(chǎn)生在sequence中。為什么會(huì)有這個(gè)過程呢?

Q:當(dāng)一個(gè)激勵(lì)在driver中產(chǎn)生,當(dāng)要對(duì)DUT施加不同的激勵(lì)時(shí),那應(yīng)該怎么辦呢?

Q:如何在定義后啟動(dòng)一個(gè)sequence

//當(dāng)完成一個(gè)sequence的定義后,可以使用start任務(wù)將其啟動(dòng)my_sequence my_seq;my_seq = my_sequence::create("my_seq");my_seq.start(sequencer);//除了直接啟動(dòng)之外,還可以使用default_sequence啟動(dòng)uvm_config_db#(uvm_object_wrapper)::set(this,"env.i_agt.sqr.main_phase","default_sequence",case0_sequence::get());

A:使用sequence機(jī)制之后,在不同的測(cè)試用例中,將不同的sequence設(shè)置成sequencer的main_phase的default_sequence。當(dāng)sequencer執(zhí)行到main_phase時(shí),發(fā)現(xiàn)有default_sequence,那么它就啟動(dòng)sequence。

A:當(dāng)一個(gè)sequence啟動(dòng)后會(huì)自動(dòng)執(zhí)行sequence的body任務(wù)。其實(shí),除了body外,還會(huì)自動(dòng)調(diào)用sequence的pre_body與post_body

文件:src/my_case0.sv3 class case0_sequence extends uvm_sequence #(my_transaction);virtual task pre_body();`uvm_info("sequence0", "pre_body is called!!!", UVM_LOW)endtaskvirtual task post_body();`uvm_info("sequence0", "post_body is called!!!", UVM_LOW)endtaskvirtual task body();#100;`uvm_info("sequence0", "body is called!!!", UVM_LOW) endtask `uvm_object_utils(case0_sequence)endclass

Q:UVM支持同一時(shí)刻在同一sequencer上啟動(dòng)多個(gè)sequence,那同時(shí)啟動(dòng)多個(gè)sequence時(shí),哪個(gè)先執(zhí)行呢?

Q:sequencer根據(jù)什么選擇使用哪個(gè)sequence的transaction呢?這是UVM的sequence機(jī)制中的仲裁問題

//例如如下啟動(dòng)了seq0和seq1文件:src/no_pri/my_case0.svtask my_case0::main_phase(uvm_phase phase);   sequence0 seq0;   sequence1 seq1;   seq0 = new("seq0");   seq0.starting_phase = phase;   seq1 = new("seq1");   seq1.starting_phase = phase;fork   seq0.start(env.i_agt.sqr);   seq1.start(env.i_agt.sqr);joinendtask

A:對(duì)于transaction來說,存在優(yōu)先級(jí)的概念,通常來說,優(yōu)先級(jí)越高越容易被選中。當(dāng)使用uvm_do或者uvm_do_with宏時(shí),產(chǎn)生的transaction的優(yōu)先級(jí)是默認(rèn)的優(yōu)先級(jí),即-1??梢酝ㄟ^uvm_do_pri及uvm_do_pri_with改變所產(chǎn)生的transaction的優(yōu)先級(jí)

文件:src/item_pri/my_case0.sv3 class sequence0 extends uvm_sequence #(my_transaction);virtual task body();repeat (5) begin   `uvm_do_pri(m_trans, 100)   `uvm_info("sequence0", "send one transaction", UVM_MEDIUM)end#100;endtaskendclassclass sequence1 extends uvm_sequence #(my_transaction);virtual task body();repeat (5) begin   `uvm_do_pri_with(m_trans, 200, {m_trans.pload.size < 500;})   `uvm_info("sequence1", "send one transaction", UVM_MEDIUM)endendtaskendclass

uvm_do_pri與uvm_do_pri_with的第二個(gè)參數(shù)是優(yōu)先級(jí),這個(gè)數(shù)值必須是一個(gè)大于等于-1的整數(shù)。數(shù)字越大,優(yōu)先級(jí)越高。

A:除transaction有優(yōu)先級(jí)外,sequence也有優(yōu)先級(jí)的概念

文件:src/sequence_pri/my_case0.svtask my_case0::main_phase(uvm_phase phase);env.i_agt.sqr.set_arbitration(SEQ_ARB_STRICT_FIFO);fork    seq0.start(env.i_agt.sqr, null, 100);    seq1.start(env.i_agt.sqr, null, 200);joinendtask

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

    關(guān)注

    0

    文章

    526

    瀏覽量

    66611
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    182

    瀏覽量

    19171
  • sequence
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    2848

原文標(biāo)題:UVM之sequence機(jī)制

文章出處:【微信號(hào):FPGA學(xué)姐,微信公眾號(hào):FPGA學(xué)姐】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    何在主從設(shè)備之間創(chuàng)建個(gè)定義的API調(diào)用?

    我只是想知道如何在主從設(shè)備之間創(chuàng)建個(gè)定義的API調(diào)用。我想用主ID和些數(shù)據(jù)發(fā)送
    發(fā)表于 09-19 12:21

    UVM sequence分層有哪幾種方式呢

    sequencer外部進(jìn)行分層,例如使用virtual sequencer。實(shí)際項(xiàng)目中,般兩種分層的手段都會(huì)采用。對(duì)于個(gè)底層的數(shù)據(jù)項(xiàng)lower_env_items定義如下:底層的s
    發(fā)表于 04-11 16:37

    UVM sequence分層的幾種體現(xiàn)

    sequencer外部進(jìn)行分層,例如使用virtual sequencer。實(shí)際項(xiàng)目中,般兩種分層的手段都會(huì)采用。對(duì)于個(gè)底層的數(shù)據(jù)項(xiàng)lower_env_items定義如下:底層的s
    發(fā)表于 04-14 11:08

    何在SpinalHDL里啟動(dòng)個(gè)仿真

    的信號(hào):仿真啟動(dòng),你會(huì)在控制臺(tái)看到仿真的啟動(dòng):可以看到,仿真的啟動(dòng)首先會(huì)將DUT編譯生成Verilog文件,隨后交由Verilator進(jìn)行編譯,隨后選擇
    發(fā)表于 07-26 16:59

    如何配置sequence的仲裁算法和優(yōu)先級(jí)及中斷sequence的執(zhí)行

    01 Arbitrary在UVM中,多個(gè)sequence可以同時(shí)被綁定到相同的sequencer并啟動(dòng)。這種測(cè)試場(chǎng)景在實(shí)際中是存在的,比如在模擬同一個(gè)總線master口上的不同類型的數(shù)據(jù)流時(shí),可以將
    發(fā)表于 09-23 14:35

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

    等。基于以上這些需求,在UVM類庫提供的代碼示例基礎(chǔ)上,整理成以下般框架,可用于指導(dǎo)日常開發(fā)。02 用戶自定義方法在上面定義sequence item框架中,有
    發(fā)表于 09-23 14:42

    何在啟動(dòng)文件中調(diào)用定義為uint32_t getValue(void)的C函數(shù)呢?

    我如何在啟動(dòng)文件中調(diào)用定義為 uint32_t getValue(void) 的 C 函數(shù)(在 Reset_Handler 例程中)?需要什么語法?我嘗試導(dǎo)入它并將其設(shè)置為 extern(其他標(biāo)準(zhǔn)
    發(fā)表于 12-09 07:27

    UVM中seq.start()和default_sequence執(zhí)行順序

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

    對(duì)于啟動(dòng)Linux時(shí)自動(dòng)啟動(dòng) LXD 容器的方法解析

    容器的順序(從最高開始)。你也可以使用 boot.autostart.delay(默認(rèn)值 0)選項(xiàng)定義啟動(dòng)個(gè)容器等待幾秒
    的頭像 發(fā)表于 01-09 17:12 ?2741次閱讀
    對(duì)于<b class='flag-5'>啟動(dòng)</b>Linux時(shí)自動(dòng)<b class='flag-5'>啟動(dòng)</b> LXD 容器的方法解析

    淺談UVM之sequence/item見解(上)

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

    start()如何執(zhí)行uvm_sequence

    要使用start()啟動(dòng)個(gè)sequence,就必須要指定相應(yīng)的sequencer句柄, **另外的幾個(gè)選項(xiàng)般用不上** 。其中
    的頭像 發(fā)表于 03-21 11:37 ?713次閱讀
    start()如何執(zhí)行uvm_<b class='flag-5'>sequence</b>

    如何配置sequence的仲裁算法和優(yōu)先級(jí)?

    在UVM中,多個(gè)sequence可以同時(shí)被綁定到相同的sequencer并啟動(dòng)。這種測(cè)試場(chǎng)景在實(shí)際中是存在的,比如在模擬同一個(gè)總線master口上的不同類型的數(shù)據(jù)流時(shí)
    的頭像 發(fā)表于 04-27 15:20 ?1345次閱讀
    如何配置<b class='flag-5'>sequence</b>的仲裁算法和優(yōu)先級(jí)?

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

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

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

    本篇介紹UVM中的sequence,這是UVM中最基礎(chǔ)的部分。對(duì)于前面介紹的uvm_callback, uvm_visitor等,很少被使用到或者也只有搭建平臺(tái)的人會(huì)使用。
    的頭像 發(fā)表于 08-17 10:07 ?4331次閱讀
    UVM設(shè)計(jì)中的<b class='flag-5'>sequence</b><b class='flag-5'>啟動(dòng)</b>方式有哪幾種呢?

    如何將sequences類型添加或注冊(cè)到sequence library里呢?

    uvm_sequence_library是從uvm_sequence擴(kuò)展而來的,它是個(gè)容納了系列其它sequences類型的容器,在
    的頭像 發(fā)表于 09-08 15:06 ?650次閱讀
    如何將sequences類型添加或注冊(cè)到<b class='flag-5'>sequence</b> library里呢?