RM新时代网站-首页

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

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

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

我眼中UVM啟動(dòng)sequence的幾種常見(jiàn)方式

冬至子 ? 來(lái)源:不二魚(yú) ? 作者:不二魚(yú) ? 2023-06-16 11:31 ? 次閱讀

第一種:start啟動(dòng)

最簡(jiǎn)單粗暴的一種方式,只需要在某個(gè)component,如my_sequencer、my_env甚至base_test的main_phase中啟動(dòng)。

task fish_env::main_phase(uvm_phase phase);
   fish_sequence seq;  //創(chuàng)建seq實(shí)例
   phase.raise_objection(this);
   seq = fish_sequence::type_id::create("seq");
   seq.start(fish_agt.sqr);  //將seq發(fā)送給對(duì)應(yīng)的sequencer
   phase.drop_objection(this);
endtask

注:

  • 如果在sequencer中啟動(dòng),唯一的區(qū)別就是start的參數(shù)變?yōu)閠his,即seq.start(this);
  • 通常sequence不會(huì)直接發(fā)送給sequencer,而是通過(guò)virtual_sequence和virtual_sequencer;
  • raise_objection和drop_objection往往伴隨sequence的啟動(dòng);

第二種:default_sequence

采用default_sequence啟動(dòng),實(shí)際上還是調(diào)用了start任務(wù),

uvm_config_db#(uvm_object_wrapper)::set(this,
                                        "env.fish_agt.sqr.main_phase",
                                        "default_sequence",
                                         case0_sequence::type_id::get());
)

或者先例化,再采用default_sequence啟動(dòng):

function void fish_case0::build_phase(uvm_phase phase);
  case0_sequence cseq;
    super.build_phase(phase);
      cseq = new("cseq");
      uvm_config_db#(uvm_sequence_base)::set(this,
                                             "env.fish_agt.sqr.main_phase",
                                             "default_sequence",
                                              cseq);
endfunction

第三種:`uvm_do系列宏啟動(dòng)

`uvm_do(SEQ_OR_ITEM)o
`uvm_do_pri(SEQ_OR_ITEM, PRIORITY)
`uvm_do_with(SEQ_OR_ITEM, CONSTRAINTS)
`uvm_do_pri_with(SEQ_OR_ITEM, PRIORITY, CONSTRAINTS)
`uvm_do_on(SEQ_OR_ITEM, SEQR)
`uvm_do_on_pri(SEQ_OR_ITEM, SEQR, PRIORITY)
`uvm_do_on_with(SEQ_OR_ITEM, SEQR, CONSTRAINTS)
`uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, PRIORITY, CONSTRAINTS)

uvm_do的宏有多種,根據(jù)實(shí)際情況選擇合適的宏。實(shí)際工作當(dāng)中,使用較多的就是uvm_do_on(SEQ_OR_ITEM, SEQR),第一個(gè)參數(shù)表示要發(fā)送的sequence或者item,第二個(gè)參數(shù)表示要將此sequence或者item發(fā)送給哪個(gè)sequencer。工作中有多個(gè)seq,為了實(shí)現(xiàn)seq的統(tǒng)一調(diào)度,就會(huì)使用virtual_sequence/sequencer,在vitrual_sequence 的body中例化多個(gè)sequence,使用uvm_do_on將sequencer掛載到指定sequencer上。

`uvm_declare_p_sequencer(fish_virtual_sequencer)
task fish_virtal_seq::body();
    fish_sequence_1   fish_seq_1;
    fish_sequence_2   fish_seq_2;
    ...
    fish_sequence_n   fish_seq_n
    `uvm_do_on(fish_seq_1, p_sequencer.sqr_1);
    `uvm_do_on(fish_seq_2, p_sequencer.sqr_2);
    ...
    `uvm_do_on(fish_seq_n,p_sequencer.sqr_n);
end_task:body

如此一來(lái),fish_seq就掛載到了fish_virtual_sequencer中某個(gè)具體的sequencer上,這是最通用的做法。但UVM的用法太靈活了,最近在工作中,我遇到,seq不會(huì)掛載到某個(gè)具體的sqr的情況,也疑惑了很久,下次和你們分享。歡迎持續(xù)關(guān)注。

第四種:uvm_create和uvm_send

class case0_sequence extends uvm_sequence #(fish_transaction)
...
  task case0_sequence::body()
    `uvm_create(f_trans)
    ...//對(duì)transaction做處理
    `uvm_send(f_trans)
   endtask

uvm_create宏的作用就是實(shí)例化transaction,實(shí)例化之后,可以對(duì)其做更多的處理,處理完畢再使用`uvm_send宏發(fā)送出去。

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

    關(guān)注

    0

    文章

    182

    瀏覽量

    19167
  • sequence
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    2840
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    UVM sequence分層有哪幾種方式

    驗(yàn)證環(huán)境需要對(duì)數(shù)據(jù)進(jìn)行分層。例如,將32比特的寄存器讀寫(xiě)封裝成數(shù)據(jù)讀寫(xiě)和狀態(tài)讀寫(xiě)等實(shí)際業(yè)務(wù)操作等或者對(duì)底層sequence進(jìn)行一些隨機(jī)控制等。實(shí)現(xiàn)這種分層可以有兩種方式:1、Sequence
    發(fā)表于 04-11 16:37

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

    驗(yàn)證環(huán)境需要對(duì)數(shù)據(jù)進(jìn)行分層。例如,將32比特的寄存器讀寫(xiě)封裝成數(shù)據(jù)讀寫(xiě)和狀態(tài)讀寫(xiě)等實(shí)際業(yè)務(wù)操作等或者對(duì)底層sequence進(jìn)行一些隨機(jī)控制等。實(shí)現(xiàn)這種分層可以有兩種方式:1、Sequence
    發(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è)總線(xiàn)master口上的不同類(lèi)型的數(shù)據(jù)流時(shí),可以將
    發(fā)表于 09-23 14:35

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

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

    淺談UVMsequence/item見(jiàn)解(上)

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

    UVMsequence/item見(jiàn)解 sequencer特性及應(yīng)用(下)

    本文將接著分享sequencer的相關(guān)知識(shí),對(duì)于sequencer的仲裁特性有幾種可選,UVM_SEQ_ARB_FIFO ;UVM
    的頭像 發(fā)表于 02-19 10:14 ?4796次閱讀
    談<b class='flag-5'>UVM</b>之<b class='flag-5'>sequence</b>/item見(jiàn)解 sequencer特性及應(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é)議將
    的頭像 發(fā)表于 09-22 09:26 ?2397次閱讀

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

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

    UVMsequence的那些事兒

    將 生成測(cè)試case的語(yǔ)句 從 main_phase 中獨(dú)立出來(lái),使得使用不同測(cè)試用例時(shí),只需要修改sequence部分即可,而不用關(guān)注 UVM剩余部分。
    的頭像 發(fā)表于 05-26 15:17 ?1061次閱讀
    <b class='flag-5'>UVM</b>中<b class='flag-5'>sequence</b>的那些事兒

    在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)
    的頭像 發(fā)表于 06-10 09:10 ?807次閱讀
    在Sequencer上<b class='flag-5'>啟動(dòng)</b>一個(gè)<b class='flag-5'>Sequence</b>

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

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

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

    uvm_sequence_library是從uvm_sequence擴(kuò)展而來(lái)的,它是一個(gè)容納了一系列其它sequences類(lèi)型的容器,在啟動(dòng)時(shí),它會(huì)根據(jù)模式從這系列sequences中選擇并執(zhí)行它們。
    的頭像 發(fā)表于 09-08 15:06 ?638次閱讀
    如何將sequences類(lèi)型添加或注冊(cè)到<b class='flag-5'>sequence</b> library里呢?

    電氣工程師進(jìn)階知識(shí)匯總:電機(jī)啟動(dòng)的五種常見(jiàn)方式

    1.電機(jī)啟動(dòng)的五種常見(jiàn)方式 ①.星三角降壓啟動(dòng):正常運(yùn)行為三角形接法的電動(dòng)機(jī),在啟動(dòng)時(shí)將定子繞組接成星形,可以降低啟動(dòng)電流。
    發(fā)表于 09-14 11:28 ?3516次閱讀
    電氣工程師進(jìn)階知識(shí)匯總:電機(jī)<b class='flag-5'>啟動(dòng)</b>的五種<b class='flag-5'>常見(jiàn)方式</b>

    MCU批量生產(chǎn)下載程序的幾種常見(jiàn)方

    MCU批量生產(chǎn)下載程序的幾種常見(jiàn)方
    的頭像 發(fā)表于 10-24 17:22 ?1603次閱讀
    MCU批量生產(chǎn)下載程序的<b class='flag-5'>幾種</b><b class='flag-5'>常見(jiàn)方</b>法

    運(yùn)行Python程序的幾種常見(jiàn)方

    Python是一種高級(jí)編程語(yǔ)言,具有簡(jiǎn)單易學(xué),易于閱讀和調(diào)試的特點(diǎn)。當(dāng)你完成了一個(gè)Python程序之后,你需要運(yùn)行它以檢查程序是否按照預(yù)期工作。下面是運(yùn)行Python程序的幾種常見(jiàn)方
    的頭像 發(fā)表于 11-28 15:32 ?2529次閱讀
    RM新时代网站-首页