一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲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)不再提示

UVM手把手教程系列(二)Phase機(jī)制簡(jiǎn)單介紹

傅里葉的貓 ? 來源:傅里葉的貓 ? 2024-02-29 09:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

phase機(jī)制介紹

UVM中的phase,按照其是否消耗仿真時(shí)間($time打印出的時(shí)間)的特性,可以分成兩大類,一類是function phase,如 build_phase、connect_phase等,這些phase都不耗費(fèi)仿真時(shí)間,通過函數(shù)來實(shí)現(xiàn);另外一類是task phase,如run_phase等,它們耗費(fèi) 仿真時(shí)間,通過任務(wù)來實(shí)現(xiàn)。給DUT施加激勵(lì)、監(jiān)測(cè)DUT的輸出都是在這些phase中完成的。在下圖中,灰色背景所示的是task phase,其他為function phase。

4d570c7a-d69a-11ee-a297-92fbcf53809c.pngimage-20240228151228432

上面的所有phase都是按順序自上而下自動(dòng)執(zhí)行。

class my_case0 extends base_test; 
string tID = get_type_name();

virtual function void build_phase(uvm_phase phase);
    super.build_phase(phase);
    `uvm_info(tID, "build_phase is executed", UVM_LOW)
endfunction

virtual function void start_of_simulation_phase(uvm_phase phase);
    super.start_of_simulation_phase(phase);
    `uvm_info(tID, "start_of_simulation_phase is executed", UVM_LOW)
endfunction

virtual task run_phase(uvm_phase phase);
    `uvm_info(tID, "run_phase is executed", UVM_LOW)
endtask

virtual task pre_reset_phase(uvm_phase phase);
    `uvm_info(tID, "pre_reset_phase is executed", UVM_LOW)
endtask

virtual task post_shutdown_phase(uvm_phase phase);
    `uvm_info(tID, "post_shutdown_phase is executed", UVM_LOW)
endtask

virtual function void extract_phase(uvm_phase phase);
    super.extract_phase(phase);
`uvm_info(tID, "extract_phase is executed", UVM_LOW)

virtual function void final_phase(uvm_phase phase);
    super.final_phase(phase);
    `uvm_info(tID, "final_phase is executed", UVM_LOW)
endfunction

endclass

運(yùn)行上述代碼,可以看到各phase被依次執(zhí)行。

需要注意的一點(diǎn)是就是run_phase和右邊的12個(gè)phase,是并列關(guān)系,而不是說run_phase包含右邊的12個(gè)phase,它們是并行運(yùn)行的,它們的順序大致如下:

fork
    begin
        run_phase();
    end
    begin
        pre_reset_phase();
        reset_phase();
        post_reset_phase();
        pre_configure_phase();
        configure_phase();
        post_configure_phase();
        pre_main_phase();
        main_phase();
        post_main_phase();
        pre_shutdown_phase();
        shutdown_phase();
        post_shutdown_phase();
    end
join

UVM提供了如此多的phase,在一般的應(yīng)用中,無論是function phase還是task phase都不會(huì)將它們?nèi)坑蒙?。使用頻率最高的 是build_phase、connect_phase和main_phase。這么多phase除了方便驗(yàn)證人員將不同的代碼寫在不同的phase外,還有利于其他驗(yàn)證 方法學(xué)向UVM遷移。一般的驗(yàn)證方法學(xué)都會(huì)把仿真分成不同的階段,但是這些階段的劃分通常沒有UVM分得這么多、這么細(xì) 致。所以一般來說,當(dāng)其他驗(yàn)證方法學(xué)向UVM遷移的時(shí)候,總能找到一個(gè)phase來對(duì)應(yīng)原來方法學(xué)中的仿真階段,這為遷移提供 了便利。

Phase的執(zhí)行順序

build_phase是按照自上而下的順序執(zhí)行的,在下圖中,先執(zhí)行uvm_test_top的build_phase,再執(zhí)行env的build_phase。

除了build_phase,所有不耗費(fèi)仿真時(shí)間的phase都是自下而上執(zhí)行的,對(duì)于connect_phase即先執(zhí)行driver和monitor的connect_phase,再執(zhí)行agent的connect_phase。

4d76608e-d69a-11ee-a297-92fbcf53809c.pngimage-20240228151306612

看到這里,很多同學(xué)可能就有三個(gè)疑惑。

對(duì)于i_agt、mdl、scb、o_agt這幾個(gè)兄弟關(guān)系的component,執(zhí)行順序是什么樣的?

每個(gè)component里面都有build_phase和main_phase,是按component執(zhí)行還是按phase的順序執(zhí)行?

那幾個(gè)task phase,是會(huì)消耗仿真時(shí)間的,是按照什么樣的順序執(zhí)行的?

Answer:

無論是自上而下還是自下而上,都只適應(yīng)于UVM樹中有直系關(guān)系的component。對(duì)于同一層次的、具有兄弟關(guān)系的 component,如driver與monitor,它們是按照字典的順序執(zhí)行的,這里的字典序的排序 依據(jù)new時(shí)指定的名字。假如monitor在new時(shí)指定的名字為aaa,而driver的名字為bbb,那么將會(huì)先執(zhí)行monitor的build_phase。反之 若monitor為mon,driver為drv,那么將會(huì)先執(zhí)行driver的build_phase。

我們本節(jié)提到的bulid_phase、connect_phase、run_phase這些都是時(shí)間的概念,而上面這個(gè)圖中各個(gè)component的關(guān)系是空間的概念。在執(zhí)行時(shí),先把各個(gè)component中的build_phase執(zhí)行完,再執(zhí)行各個(gè)component的connect_phase,再執(zhí)行各個(gè)component的run_phase。

類似run_phase、main_phase等task_phase也都是按照自下而上的順序執(zhí)行的。但是與前面function phase自下而上執(zhí)行不同的是,這種task phase是耗費(fèi)時(shí)間的,所以它并不是等到“下面”的phase(如driver的run_phase)執(zhí)行完才執(zhí)行“上面”的phase(如agent 的run_phase),而是將這些run_phase通過fork…join_none的形式全部啟動(dòng)。所以,更準(zhǔn)確的說法是自下而上的啟動(dòng),同時(shí)在運(yùn)行。

但一般我們的環(huán)境中,只有driver和monitor里面會(huì)有run_phase或者main_phase的定義,像agent這種封裝類的component,不會(huì)定義task_phase。

對(duì)于同一component來說,其12個(gè)run-time的phase是順序執(zhí)行的,但是它們也僅僅是順序執(zhí)行,并不是說前面一個(gè)phase執(zhí)行完 就立即執(zhí)行后一個(gè)phase。以main_phase和post_main_phase為例,對(duì)于A component來說,其main_phase在0時(shí)刻開始執(zhí)行,100時(shí)刻 執(zhí)行完畢;對(duì)于B component來說,其main_phase在0時(shí)刻開始執(zhí)行,200時(shí)刻執(zhí)行完畢;此時(shí)整個(gè)驗(yàn)證平臺(tái)的main_phase才執(zhí)行完畢,接下來執(zhí)行post_main_phase,即A和B的post_main_phase都是在200時(shí)刻開始執(zhí) 行。假設(shè)A的post_main_phase執(zhí)行完畢需要300個(gè)時(shí)間單位,而B只需要200個(gè)時(shí)間單位,無論是A或者B,其后續(xù)都沒有其他耗時(shí) 間的phase了,整個(gè)驗(yàn)證平臺(tái)會(huì)在500時(shí)刻關(guān)閉。

可以看到對(duì)于A來說,main_phase在100時(shí)刻結(jié)束,其post_main_phase在200時(shí)刻開始執(zhí)行。在100~200時(shí)刻,A處于等待B的 狀態(tài),除了等待不做任何事情。B的post_main_phase在400時(shí)刻結(jié)束,之后就處于等待A的狀態(tài)。

這個(gè)過程如下圖所示:

4d862bc2-d69a-11ee-a297-92fbcf53809c.pngimage-20240228151317829

無論從A還是B的角度來看,都存在一段空白等待時(shí)間。但是從整個(gè)驗(yàn)證平臺(tái)的角度來看,各個(gè)task phase之間是沒有任何空白的。

除了兄弟關(guān)系的component,還有一種叔侄關(guān)系的component,如my_scoreboard與my_driver,從樹的層次結(jié)構(gòu)上 來說,scoreboard級(jí)別是高于driver的,但是,這兩者build_phase的執(zhí)行順序其實(shí)也是不確定的。這兩者的執(zhí)行順序除了上節(jié)提到的 字典序外,還用到了圖論中樹的遍歷方式:廣度優(yōu)先或是深度優(yōu)先。

UVM中采用的是深度優(yōu)先的原則,在UVM的樹形圖中,scoreboard及driver的build_phase的執(zhí)行順序,i_agt實(shí)例化時(shí)名字為“i_agt”, 而scb為“scb”,那么i_agt的build_phase先執(zhí)行,在執(zhí)行完畢后,接下來執(zhí)行driver、monitor及sequencer的build_phase。當(dāng)全部執(zhí)行完 畢后再執(zhí)行scoreboard的build_phase。

常用的三個(gè)phase

我們上面也講過bulid_phase、connect_phase和run_phase是三個(gè)最常用的phase,那這三個(gè)phase的具體作用是什么?應(yīng)該如何使用?

run_phase也經(jīng)常會(huì)用main_phase代替。

build_phase

主要用來實(shí)例化組件,即創(chuàng)建對(duì)象。uvm_component對(duì)其做的最重要的事情就是自動(dòng)獲取通過config_db::set設(shè)置的參數(shù)。

connect_phase

TLM端口連接,實(shí)現(xiàn)數(shù)據(jù)通信。TLM通信我們后面再講。

run_phase

所有的數(shù)據(jù)處理,都在run_phase中。





審核編輯:劉清

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

    關(guān)注

    0

    文章

    182

    瀏覽量

    19548
  • TLM
    TLM
    +關(guān)注

    關(guān)注

    1

    文章

    33

    瀏覽量

    24971
  • DUT
    DUT
    +關(guān)注

    關(guān)注

    0

    文章

    191

    瀏覽量

    12954

原文標(biāo)題:UVM手把手教程系列(二)Phase機(jī)制介紹

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    【原創(chuàng)】小草手把手教你LabVIEW視頻系列匯總帖(12.22更新)

    為了讓大家更好的查找小草手把手教你LabVIEW視頻教學(xué)系列,小編特為大家匯總?cè)缦拢骸疽曨l教學(xué)】小草手把手LabVIEW編程—LED滾動(dòng)屏【視頻教學(xué)】小草手把手教你LabVIEW狀態(tài)機(jī)
    發(fā)表于 12-08 10:10

    手把手配套資料

    手把手配套資料
    發(fā)表于 01-04 11:14

    手把手教你學(xué)stm32

    很多家:現(xiàn)在市面上還比較火的基本就只剩前4家了,從這4家中選擇一家買開發(fā)板。正好這4家的教程我都基本上都有看過一遍,下面簡(jiǎn)單介紹一下它們各自的特點(diǎn):1、正點(diǎn)原子正點(diǎn)原子的教程特點(diǎn)的關(guān)鍵詞:手把手
    發(fā)表于 08-09 07:44

    手把手教你構(gòu)建一個(gè)完整的工程

    手把手教你構(gòu)建一個(gè)完整的工程
    發(fā)表于 08-03 09:54 ?33次下載
    <b class='flag-5'>手把手</b>教你構(gòu)建一個(gè)完整的工程

    手把手教你寫批處理-批處理的介紹

    手把手教你寫批處理-批處理的介紹
    發(fā)表于 10-25 15:02 ?69次下載

    美女手把手教你如何裝機(jī)(中)

    美女手把手教你如何裝機(jī)(中) 再來是硬碟的部份,這款機(jī)殼還不錯(cuò),可以旋轉(zhuǎn)支架~
    發(fā)表于 01-27 11:14 ?1527次閱讀

    美女手把手教你如何裝機(jī)(下)

    美女手把手教你如何裝機(jī)(下) 接著下來就是今天的重頭戲,開核蘿!~
    發(fā)表于 01-27 11:16 ?3026次閱讀

    手把手教你安裝Quartus II

    本章手把手把地教你如何安裝 Quartus II 軟件 ,并將它激活 。此外 還有USB -Blaster下載器的驅(qū)動(dòng)安裝步驟 。
    發(fā)表于 09-18 14:55 ?9次下載

    手把手教你在家搭建監(jiān)控系統(tǒng)

    手把手教你在家搭建監(jiān)控系統(tǒng)
    發(fā)表于 01-17 19:47 ?28次下載

    手把手教你做電子時(shí)鐘---前言

    手把手教你做彩鈴電子時(shí)鐘
    發(fā)表于 11-14 16:53 ?11次下載

    手把手教你如何開始DSP編程

    手把手教你如何開始DSP編程。
    發(fā)表于 04-09 11:54 ?13次下載
    <b class='flag-5'>手把手</b>教你如何開始DSP編程

    手把手教你如何安裝機(jī)械硬盤和分區(qū)

    手把手教你如何安裝機(jī)械硬盤與分區(qū),看了你就知道這是多么簡(jiǎn)單!一起來試試看吧~
    的頭像 發(fā)表于 03-05 17:19 ?14.5w次閱讀

    手把手教你學(xué)LabVIEW視覺設(shè)計(jì)

    手把手教你學(xué)LabVIEW視覺設(shè)計(jì)手把手教你學(xué)LabVIEW視覺設(shè)計(jì)手把手教你學(xué)LabVIEW視覺設(shè)計(jì)手把手教你學(xué)LabVIEW視覺設(shè)計(jì)手把手
    發(fā)表于 03-06 01:41 ?3327次閱讀

    手把手教你開關(guān)電源PCB排板

    手把手教你開關(guān)電源PCB排板(新型電源技術(shù))-分享一下開關(guān)電源PCB排板的基本要點(diǎn)及分析,以及例子講解。絕對(duì)的手把手
    發(fā)表于 09-18 12:27 ?61次下載
    <b class='flag-5'>手把手</b>教你開關(guān)電源PCB排板

    手把手教你學(xué)FPGA仿真

    電子發(fā)燒友網(wǎng)站提供《手把手教你學(xué)FPGA仿真.pdf》資料免費(fèi)下載
    發(fā)表于 10-19 09:17 ?2次下載
    <b class='flag-5'>手把手</b>教你學(xué)FPGA仿真