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

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

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

看看這個(gè)"UVM陷阱",你是不是也遇到過

sanyue7758 ? 來源:處芯積律 ? 2023-05-08 10:45 ? 次閱讀

分享一個(gè)近期項(xiàng)目中遇到的函數(shù)調(diào)用問題。

略去定位過程和具體的業(yè)務(wù)細(xì)節(jié),原問題的模型可以抽象為如下的demo:

importuvm_pkg::*;
`include"uvm_macros.svh"

classtestextendsuvm_test;
`uvm_component_utils(test)

virtualtaskrun();
bit[3:0]run_cnt;
run_cnt++;
$display("run_cnt=%0d,enterrun@%t",run_cnt,$time);
//othercode
endtask

virtualtaskmain_phase(uvm_phasephase);
super.main_phase(phase);
phase.raise_objection(this);
run();
phase.drop_objection(this);
endtask

functionnew(stringname="test",uvm_componentparent=null);
super.new(name,parent);
endfunction
endclass

programtb_top;
initialbegin
run_test("test");
end
endprogram

設(shè)計(jì)一個(gè)run函數(shù)用于處理某些業(yè)務(wù)邏輯,并在UVC的main_phase中調(diào)用。看似簡單的邏輯,運(yùn)行仿真后得到如下的信息

ec20df3a-ed42-11ed-90ce-dac502259ad0.png

run被調(diào)用了兩次!

.........................

.........................

如果你也一時(shí)間想不到原因,可以參考下面的原因分析。

原因如下:

  1. 翻閱UVM源碼就會(huì)發(fā)現(xiàn),在uvm_component中,存在一個(gè)默認(rèn)的run函數(shù)。

    ec3cdfaa-ed42-11ed-90ce-dac502259ad0.png

  2. UVM的phase機(jī)制,run_phase和main_phase,reset_phase等其余耗時(shí)的phase是并行運(yùn)行的。而默認(rèn)的run_phase會(huì)調(diào)用run函數(shù)。

    ec65f20a-ed42-11ed-90ce-dac502259ad0.png

  3. 在上述代碼的0時(shí)刻,默認(rèn)的run_phase調(diào)用一次run函數(shù),而main_phase也調(diào)用了一次run函數(shù)。

因此從uvm_component擴(kuò)展的UVC中,盡量不要使用run函數(shù),使用其他命名方式。


審核編輯 :李倩


聲明:本文內(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)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4332

    瀏覽量

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

    關(guān)注

    0

    文章

    182

    瀏覽量

    19181

原文標(biāo)題:看看這個(gè)"UVM陷阱",你是不是也遇到過

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    求助,為什么 \" ld.w \" 導(dǎo)致某些內(nèi)存內(nèi)容被修改?

    ; 指令執(zhí)行后,一些內(nèi)存內(nèi)容被更改。 這很難理解。 有人遇到過類似的問題嗎。 以下是我的情況, 1) 在執(zhí)行 " ld.w 之前 &
    發(fā)表于 01-26 07:35

    想問下大家有沒有遇到過 時(shí)間消息沒又響應(yīng) 便執(zhí)行的 不是不是程序的內(nèi)存管理越界了?

    想問下大家有沒有遇到過 時(shí)間消息沒又響應(yīng) 便執(zhí)行的 不是不是程序的內(nèi)存管理越界了??
    發(fā)表于 05-25 16:29

    IC驗(yàn)證"UVM驗(yàn)證平臺(tái)加入factory機(jī)制"(六)

      加入factory機(jī)制 上一節(jié)《IC驗(yàn)證"一個(gè)簡單的UVM驗(yàn)證平臺(tái)"是如何搭建的(五)》給出了一個(gè)只有driver、使用UVM搭建的驗(yàn)證平臺(tái)。嚴(yán)格來說這根本就不
    發(fā)表于 12-08 12:07

    都知道RK3288編譯遇到過哪些問題嗎

    都知道RK3288編譯遇到過哪些問題嗎?
    發(fā)表于 03-04 07:22

    ymodem_ota下載固件丟失第一個(gè)字節(jié)請(qǐng)問誰遇到過這個(gè)問題嗎?

    00 01 00 4C 7D 5C 56 61 70 70 00 00 BL.....L}\\Vapp..發(fā)現(xiàn)RBL少了個(gè)R,用winhex查看了源文件,文件上有這個(gè)RBL;初步估計(jì)是ymodem_ota程序在傳輸時(shí),丟了第一個(gè)字節(jié);請(qǐng)問,誰
    發(fā)表于 04-03 14:53

    教你如何搭建淺層神經(jīng)網(wǎng)絡(luò)"Hello world"

    作為圖像識(shí)別與機(jī)器視覺界的 "hello world!" ,MNIST ("Modified National Institute of Standards and Technology&
    的頭像 發(fā)表于 12-10 18:35 ?936次閱讀

    幾種IO口模擬串口"硬核"操作

    UART"是作者大一加入學(xué)校創(chuàng)新團(tuán)隊(duì)老師出的第一道題目。畢竟當(dāng)時(shí)專業(yè)知識(shí)不夠,心里想:“實(shí)驗(yàn)室老師怎么這么變tai,有現(xiàn)成的串口不用,非得整個(gè)模擬串口”,接到這個(gè)題目一頭霧水,于是上網(wǎng)各種找資料,最后基本實(shí)現(xiàn)了該功能,實(shí)現(xiàn)辦法算是最初級(jí)的實(shí)現(xiàn)方式,...
    的頭像 發(fā)表于 02-10 11:51 ?4882次閱讀
    幾種IO口模擬串口&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;硬核&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;操作

    &quot;STM32F0 Error: Flash Download failed - &quot;&quot;Cortex-M0&quot;&quot;解決&quot;

    開發(fā)工具CUbemx + Keil uVision5(MDK V5)錯(cuò)誤現(xiàn)象在STM32F0燒錄程序是出現(xiàn)了Error: Flash Download failed - &amp;quot
    發(fā)表于 12-01 12:06 ?31次下載
    &<b class='flag-5'>quot</b>;STM32F0 Error: Flash Download failed  -  &<b class='flag-5'>quot</b>;&<b class='flag-5'>quot</b>;Cortex-M0&<b class='flag-5'>quot</b>;&<b class='flag-5'>quot</b>;解決&<b class='flag-5'>quot</b>;

    這17種焊接陷阱,遇到過多少?

    良好的焊接是保證電路穩(wěn)定持久工作的前提。下面給出了常見到的焊接缺陷。看看遇到過多少種?焊接中的常見問題▲陷阱1:錫珠▲陷阱2:擾動(dòng)的焊接——在焊接點(diǎn)冷卻過程中焊錫移動(dòng),造成焊接表面起
    的頭像 發(fā)表于 04-14 09:39 ?902次閱讀
    這17種焊接<b class='flag-5'>陷阱</b>,<b class='flag-5'>你</b><b class='flag-5'>遇到過</b>多少?

    這17種焊接陷阱遇到過多少?

    良好的焊接是保證電路穩(wěn)定持久工作的前提。下面給出了常見到的焊接缺陷。看看遇到過多少種?焊接中的常見問題▲陷阱1:錫珠▲陷阱2:擾動(dòng)的焊接——在焊接點(diǎn)冷卻過程中焊錫移動(dòng),造成焊接表面起
    的頭像 發(fā)表于 04-14 09:37 ?819次閱讀
    這17種焊接<b class='flag-5'>陷阱</b>,<b class='flag-5'>你</b><b class='flag-5'>遇到過</b>多少?

    【廣凌房產(chǎn)】高校公用房管理中的這些問題,遇到過嗎?

    高校公用房屬于國有資產(chǎn)的一部分,但管理過程中遇到各種困難,以下這些問題遇到過嗎?
    的頭像 發(fā)表于 05-30 11:15 ?516次閱讀
    【廣凌房產(chǎn)】高校公用房管理中的這些問題,<b class='flag-5'>你</b><b class='flag-5'>遇到過</b>嗎?

    【電路設(shè)計(jì)】這17種焊接陷阱遇到過多少?

    良好的焊接是保證電路穩(wěn)定持久工作的前提。下面給出了常見到的焊接缺陷。看看遇到過多少種?焊接中的常見問題▲陷阱1:錫珠▲陷阱2:擾動(dòng)的焊接——在焊接點(diǎn)冷卻過程中焊錫移動(dòng),造成焊接表面起
    的頭像 發(fā)表于 05-24 09:27 ?830次閱讀
    【電路設(shè)計(jì)】這17種焊接<b class='flag-5'>陷阱</b>,<b class='flag-5'>你</b><b class='flag-5'>遇到過</b>多少?

    芯片工藝的&amp;quot;7nm&amp;quot; 、&amp;quot;5nm&amp;quot;到底指什么?

    近幾年,芯片產(chǎn)業(yè)越來越火熱,一些行業(yè)內(nèi)的術(shù)語大家聽得比較多了。那么工藝節(jié)點(diǎn)、制程是什么,&quot;7nm&quot; 、&quot;5nm&qu
    的頭像 發(fā)表于 07-28 17:34 ?8421次閱讀
    芯片工藝的&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;7nm&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>; 、&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;5nm&<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;到底指什么?

    科沃斯掃地機(jī)器人通過TüV萊茵&amp;quot;防纏繞&amp;quot;和&amp;quot;高效邊角清潔&amp;quot;認(rèn)證

    3月15日,在2024中國家電及消費(fèi)電子博覽會(huì)(AWE)上,國際獨(dú)立第三方檢測(cè)、檢驗(yàn)和認(rèn)證機(jī)構(gòu)德國萊茵TüV大中華區(qū)(簡稱&quot;TüV萊茵&quot;)為科沃斯兩款掃地機(jī)器人(型號(hào):DDX14、DDX11)
    的頭像 發(fā)表于 03-17 10:49 ?872次閱讀

    全方位精準(zhǔn)測(cè)量技術(shù)助力:中國經(jīng)濟(jì)加力發(fā)展向前&amp;amp;quot;進(jìn)&amp;amp;quot;

    全方位精準(zhǔn)測(cè)量技術(shù)助力:中國經(jīng)濟(jì)加力發(fā)展向前&quot;進(jìn)&quot;
    的頭像 發(fā)表于 07-15 09:53 ?364次閱讀
    全方位精準(zhǔn)測(cè)量技術(shù)助力:中國經(jīng)濟(jì)加力發(fā)展向前&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;進(jìn)&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>quot</b>;