一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

管理test case結(jié)束機(jī)制介紹

芯片驗(yàn)證工程師 ? 來源:芯片驗(yàn)證工程師 ? 2023-06-11 09:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

UVM中每個(gè)phase都有一個(gè)內(nèi)置的objection,為components和objects提供了同步方法,指示何時(shí)可以安全地結(jié)束這個(gè)phase,最終結(jié)束整個(gè)test case。

一般來說,由一個(gè)components或sequence在激勵(lì)開始時(shí)raise phase objection,激勵(lì)處理完畢之后drop objection。一旦所有提起的objections被dropped,該phase就終止了。

仿真中,一個(gè)master agent可能需要在runphase停止之前完成所有的讀寫操作,一個(gè)reactive slave agent不會(huì)drop objection,因?yàn)樗皇且恢北粍?dòng)地處理事務(wù)。對(duì)于sequence來說,有三種可能的方式可以處理phase objection。

a)

class test extends ovm_test;
task run_phase(uvm_phase phase);
    phase.raise_objection(this);
    seq.start(seqr);
    phase.drop_objection(this);
  endtask
endclass

b)

class test extends ovm_test;
task run_phase (uvm_phase phase);
    seq.set_starting_phase(phase);
    seq.start(seqr);
  endtask
endclass


class seq extends uvm_sequence #(data_item);
task body();
    uvm_phase p = get_starting_phase();
    if(p) p.raise_objection(this); 
//some critical logic
if(p)p.drop_objection(this);
  endtask
endclass

c)

class test extends ovm_test;
task run_phase (uvm_phase phase);
    seq.set_starting_phase(phase);
    seq.start(seqr);
  endtask
endclass


class seq extends uvm_sequence #(data_item);
function new(string name = "seq");
super.new(name);
    set_automatic_phase_objection(1);
endfunction
  task body();
// Sequence logic with no objection
// as it is already handled in the base class
endtask
endclass

上面的三種方式只需要實(shí)現(xiàn)其中一種即可。

當(dāng)所有objections都被dropped,當(dāng)前運(yùn)行的phase就結(jié)束了。在仿真過程中,可能需要一些額外的cycle來向scoreboard傳輸最后一筆transaction。

為了適配這種情況,可以使用phase_ready_to_end()方法在必要時(shí)刻重新提出phase objection。

另外,也可以設(shè)置一個(gè)drain time,在組件所有objections都被dropped之后注入一個(gè)延遲。一般是在env或者test級(jí)設(shè)置drain time。




審核編輯:劉清

聲明:本文內(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)投訴
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1037

    瀏覽量

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

    關(guān)注

    0

    文章

    182

    瀏覽量

    19548

原文標(biāo)題:管理test case結(jié)束機(jī)制

文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于base test如何來構(gòu)造測試用例

    在設(shè)計(jì)仿真用例時(shí),有限制條件的激勵(lì)相比漫無目的的仿真更加有效的找出RTL的bug。因此,同一份測試方案,不同的sequence往往代表著不同的test_case。真正的測試用例都是基于base_test派生的一個(gè)類。
    的頭像 發(fā)表于 09-19 09:16 ?2705次閱讀

    條件(Case)結(jié)構(gòu)的運(yùn)用細(xì)節(jié)

    )輸入10~99,顯示0010~0099; 3)輸入100~999,顯示0100~0999; 4)輸入1000~9999,顯示1000~9999。我的作業(yè)完成狀態(tài)如上圖。問題點(diǎn):不會(huì)結(jié)束Case循環(huán)。求助:怎么結(jié)束
    發(fā)表于 05-13 00:14

    Linux Shell系列教程之(十三)Shell分支語句case … esac教程

    stopped!  $./test.sh begin  I am started!  $/test.sh hello  Other command!  接下來給大家演示一個(gè)通過case…esac語句
    發(fā)表于 09-07 16:31

    如何解決vhdl代碼中的case語句問題?

    如果clk'event和clk ='1'那么情況1讀塊ram data1在case2和stop中啟用第一個(gè)條件結(jié)束案例1案例2在特殊操作中使用data1在case2中啟用第一個(gè)條件來讀取data2
    發(fā)表于 06-26 11:47

    工作流管理系統(tǒng)柔性機(jī)制

    隨著工作流管理系統(tǒng)在各個(gè)領(lǐng)域的應(yīng)用,系統(tǒng)的柔性機(jī)制引起人們的極大關(guān)注。該文介紹柔性化工作流管理系統(tǒng)的基本概念及架構(gòu),描述從多個(gè)方面對(duì)工作流管理
    發(fā)表于 04-06 08:51 ?8次下載

    linux內(nèi)存管理機(jī)制淺析

    本內(nèi)容介紹了arm linux內(nèi)存管理機(jī)制,詳細(xì)說明了linux內(nèi)核內(nèi)存管理,linux虛擬內(nèi)存管理,arm linux內(nèi)存管理等方面的知識(shí)
    發(fā)表于 12-19 14:09 ?73次下載
    linux內(nèi)存<b class='flag-5'>管理機(jī)制</b>淺析

    最全SPARK內(nèi)存管理機(jī)制

    最全SPARK內(nèi)存管理機(jī)制
    發(fā)表于 09-08 14:17 ?5次下載
    最全SPARK內(nèi)存<b class='flag-5'>管理機(jī)制</b>

    淺析物理內(nèi)存與虛擬內(nèi)存的關(guān)系及其管理機(jī)制

    本文主要介紹內(nèi)存管理機(jī)制:物理內(nèi)存與虛擬內(nèi)存的關(guān)系,Linux內(nèi)存管理機(jī)制,Python內(nèi)存管理機(jī)制,Nginx內(nèi)存管理機(jī)制,環(huán)形緩沖區(qū)
    的頭像 發(fā)表于 04-12 09:55 ?6022次閱讀
    淺析物理內(nèi)存與虛擬內(nèi)存的關(guān)系及其<b class='flag-5'>管理機(jī)制</b>

    如何優(yōu)雅地結(jié)束UVM Test

    分享一下在UVM驗(yàn)證環(huán)境中,結(jié)束仿真的幾種方式,不同結(jié)束仿真的方式適合不同的應(yīng)用場景。
    的頭像 發(fā)表于 12-17 11:23 ?3270次閱讀
    如何優(yōu)雅地<b class='flag-5'>結(jié)束</b>UVM <b class='flag-5'>Test</b>

    JavaScript定時(shí)器與執(zhí)行機(jī)制介紹

    瀏覽器(或者說JS引擎)執(zhí)行JS的機(jī)制是基于事件循環(huán)。 由于JS是單線程,所以同一時(shí)間只能執(zhí)行一個(gè)任務(wù),其他任務(wù)就得排隊(duì),后續(xù)任務(wù)必須等到前一個(gè)任務(wù)結(jié)束才能開始執(zhí)行。 為了避免因?yàn)槟承╅L時(shí)間任務(wù)造成的無意義等待,JS引入了異步的概念,用另一個(gè)線程來
    的頭像 發(fā)表于 04-21 14:31 ?1243次閱讀

    聊一聊所謂的Objection機(jī)制

    Objection是UVM框架中用來同步不同組件的相同phase,以及決定當(dāng)前測試用例什么時(shí)候結(jié)束(end-of-test)的機(jī)制,這也是用戶在拿到UVM之后最直白的使用場景。
    的頭像 發(fā)表于 06-09 11:16 ?2587次閱讀
    聊一聊所謂的Objection<b class='flag-5'>機(jī)制</b>

    CASE:創(chuàng)建多路分支

    CASE:創(chuàng)建多路分支 說明 使用“創(chuàng)建多路分支”指令,可以根據(jù)表達(dá)式的值執(zhí)行多個(gè)指令序列中的一個(gè)。 表達(dá)式的值必須為整數(shù)或位字符串。執(zhí)行 CASE 指令時(shí),會(huì)將表達(dá)式(變量)的值與多個(gè)常數(shù)的值進(jìn)行
    的頭像 發(fā)表于 06-27 11:46 ?1177次閱讀
    <b class='flag-5'>CASE</b>:創(chuàng)建多路分支

    Switch case中的case順序

    Switch case中的case順序 Switch 可能轉(zhuǎn)化成多種不同算法的代碼。其中最常見的是跳轉(zhuǎn)表和比較鏈/樹。當(dāng)switch用比較鏈的方式轉(zhuǎn)化時(shí),編譯器會(huì)產(chǎn)生if-else-if的嵌套代碼
    的頭像 發(fā)表于 11-20 18:16 ?1173次閱讀

    java switch case的語法規(guī)則

    在Java中,switch case語句是一種用于多分支選擇的控制流語句。它允許根據(jù)某個(gè)表達(dá)式的值來執(zhí)行不同的代碼塊。下面是關(guān)于switch case語法規(guī)則的詳細(xì)解釋。 基本語法 switch語句
    的頭像 發(fā)表于 11-30 14:40 ?3198次閱讀

    oracle case when 語法介紹

    Oracle的CASE WHEN語法是一種在數(shù)據(jù)庫查詢中使用的條件語句,它提供了一種在SELECT語句中根據(jù)條件對(duì)結(jié)果進(jìn)行轉(zhuǎn)換或篩選的方法。在本文中,我們將詳細(xì)介紹Oracle的CASE WHEN
    的頭像 發(fā)表于 12-06 10:21 ?2905次閱讀