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

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

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

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

芯片驗(yàn)證日記 ? 來(lái)源:芯片驗(yàn)證日記 ? 作者:芯片驗(yàn)證日記 ? 2022-12-17 11:23 ? 次閱讀

1. 前言

眾所周知,在傳統(tǒng)的測(cè)試平臺(tái)中,通常在完成復(fù)位、配置、數(shù)據(jù)傳輸和自動(dòng)檢查等所有步驟后,通過(guò)調(diào)用verilog的系統(tǒng)函數(shù)$finish來(lái)結(jié)束仿真

但相對(duì)于傳統(tǒng)的測(cè)試平臺(tái),UVM在Testbench架構(gòu)的幾乎每個(gè)方面都做了創(chuàng)新,當(dāng)然結(jié)束仿真的控制也發(fā)生了很大變化。在UVM驗(yàn)證環(huán)境中結(jié)束仿真最常用的就是drop_objection機(jī)制,當(dāng)然所有phase都結(jié)束后,還是調(diào)用系統(tǒng)函數(shù)$finish來(lái)結(jié)束仿真。

下面,分享一下在UVM驗(yàn)證環(huán)境中,結(jié)束仿真的幾種方式,這些結(jié)束方式,適用于不同的應(yīng)用場(chǎng)景。我的表達(dá)能力不強(qiáng),大家重點(diǎn)看代碼。

2. 本文的內(nèi)容目錄

poYBAGOdNEiAfn2wAAOe6MAtDt0572.png

3. Raising & Droping Objection機(jī)制

3.1 drop_objection的函數(shù)原型

下圖是uvm1.1d源碼中關(guān)于drop_objection函數(shù)的定義,如下圖所示。

poYBAGOdNGaAKN2eAAFbYfqfbmU984.png

3.2 在seq中使用drop_objection

下圖是在sequence中調(diào)用drop_objection的示例,如下圖所示,同樣來(lái)自于uvm源碼。

pYYBAGOdNJqAPNWZAAJFCKzvWno024.png

3.3 在scoreboard中使用drop_objection

poYBAGOdNMqAJC2yAAFaKB6Hi5I742.png

3.4 在test中使用drop_objection

pYYBAGOdNOWAbKM_AANHPedUyeY723.png

3.5 使用drop_objection總結(jié)

結(jié)合上面的例子,強(qiáng)調(diào)兩點(diǎn):

一是:drop_objection可以用在任何一個(gè)component中;當(dāng)然也可以用在sequence中,但不可以用在其他uvm_object類里面,因?yàn)閡vm_object里面沒(méi)有phase的概念,那sequence其實(shí)也沒(méi)有phase的概念,為什么可以?這也是一個(gè)小知識(shí)點(diǎn),有的面試官問(wèn)的仔細(xì)了,也可能問(wèn)到,我就不展開(kāi)了。

二是:在實(shí)際項(xiàng)目中的整個(gè)驗(yàn)證環(huán)境中,最好只用一對(duì)raise_objection/drop_objection,不要在很多組件中都使用它,否則很容易造成死鎖,而且很難debug,盡管uvm的語(yǔ)法也允許這么做。

4. phase_ready_to_end(微信公眾號(hào)《芯片驗(yàn)證日記》)

4.1 phase_ready_to_end的官方解釋

pYYBAGOdNQWAXAc6AAUfPlx5xnI936.png

4.2 phase_ready_to_end的理解

phase_ready_to_end(uvm_phase phase)是組件類的回調(diào)方法(函數(shù)),當(dāng)相應(yīng)phase的所有objection均被放下并且該phase將要結(jié)束時(shí),會(huì)調(diào)用該方法。組件類可以使用此回調(diào)方法來(lái)定義phase即將結(jié)束時(shí)需要執(zhí)行的任何功能。例如,如果某個(gè)組件希望將phase結(jié)束延遲到某個(gè)條件,甚至在所有objections均被放下之后,也可以使用此回調(diào)方法來(lái)完成。再比如,如果一個(gè)激勵(lì)或應(yīng)答sequence正在運(yùn)行,在主sequence結(jié)束之前,則可以使用main_phase()中的phase_ready_to_end()回調(diào)方法來(lái)停止那些激勵(lì)或應(yīng)答sequence。再比如一個(gè)component想要延遲某個(gè)run-time phase的生命周期,那么可以在所有的objection都被dropped之后使用這個(gè)回調(diào)方法。

對(duì)于sequences, tests和許多完整的測(cè)試平臺(tái),在phase的正常壽命期間phase objections的提起和撤銷是足夠的。但是,有時(shí)某個(gè)組件不希望在phase的正常生命周期內(nèi)主動(dòng)提起和撤銷objections,但確實(shí)希望延遲從一個(gè)phase到下一類phase的過(guò)渡。這在事務(wù)中經(jīng)常出現(xiàn)這種情況,出于性能原因,不能針對(duì)每筆事務(wù)提出objection,并且通常情況下是端到端的記分板。為了在所有其他組件同意該phase應(yīng)該結(jié)束之后延遲phase結(jié)束,該組件應(yīng)該在phase_ready_to_end方法中提出objections。然后它負(fù)責(zé)在組件的主體中或在phase_ready_end_method的任務(wù)fork / join none中撤銷這些objections。

4.3 在env中使用的一個(gè)示例

注意,phase_ready_to_end是一個(gè)function,但用fork/join_none將wait_for_ok_to_finish和drop_objection進(jìn)行了處理,這允許function立即返回。

poYBAGOdNSiAfmMUAAM51dfE5Uc973.png

4.4 在scoreboard中使用的一個(gè)示例

poYBAGOdNUaAFK_mAAOmz44csMs988.png

4.5 在scoreboard中使用的另一個(gè)示例

pYYBAGOdNWeARDaJAALV90F4FJU540.png

5. set_drain_time

5.1 set_drain_time的解釋

下圖是官方對(duì)set_drain_time的解釋,以及函數(shù)原型的定義。

pYYBAGOdNYSAdYcVAAM0DOY2s3o766.png

5.2 set_drain_time的使用示例

set_drain_time的使用方法,同樣來(lái)自最權(quán)威的source code.

poYBAGOdNZ2AVrUeAAHgoDdHvmQ904.png

5.3 set_drain_time的另一個(gè)示例

poYBAGOdNb6AOof6AALIzE0n7Tc684.png

寫文章不易,如果覺(jué)得對(duì)您有幫助,麻煩一鍵三連,或者賞個(gè)雞腿也行!

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎ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

    文章

    181

    瀏覽量

    19121
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    IC驗(yàn)證“UVM驗(yàn)證平臺(tái)加入objection機(jī)制和virtual interface機(jī)制“(七)

    機(jī)制來(lái)控制驗(yàn)證平臺(tái)的關(guān)閉。細(xì)心的讀者可能發(fā)現(xiàn),在上節(jié)的例子中,并沒(méi)有如**《IC驗(yàn)證"一個(gè)簡(jiǎn)單的UVM驗(yàn)證平臺(tái)"是如何搭建的(五)》**所示顯式地調(diào)用 finish語(yǔ)句來(lái)結(jié)束仿真
    發(fā)表于 12-09 18:28

    數(shù)字IC驗(yàn)證之“什么是UVM”“UVM的特點(diǎn)”“UVM提供哪些資源”(2)連載中...

    原文鏈接:https://zhuanlan.zhihu.com/p/345775995大家好,我是一哥,上章內(nèi)容主要講述兩個(gè)內(nèi)容,芯片驗(yàn)證以及驗(yàn)證計(jì)劃。那本章我們主要講述的內(nèi)容有介紹什么是uvm
    發(fā)表于 01-21 16:00

    什么是uvm?uvm的特點(diǎn)有哪些呢

    大家好,我是一哥,上章內(nèi)容我們介紹什么是uvmuvm的特點(diǎn)以及uvm為用戶提供了哪些資源?本章內(nèi)容我們來(lái)看一看一個(gè)典型的uvm驗(yàn)證平臺(tái)應(yīng)該是什么樣子的,來(lái)看一個(gè)典型的
    發(fā)表于 02-14 06:46

    談?wù)?b class='flag-5'>UVM中的uvm_info打印

      uvm_info宏的定義如下:  `define uvm_info(ID,MSG,VERBOSITY) \  begin \  if (uvm_report_enabled(VERBOSITY
    發(fā)表于 03-17 16:41

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

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

    我的第一個(gè)UVM代碼——Hello world

    run_test調(diào)用了uvm_test派生出來(lái)的testcase(hello_world)。 為什么run_test能夠通過(guò)字符串\"hello_world\"找到testcase?與宏定義
    發(fā)表于 11-03 10:18

    UVM實(shí)戰(zhàn)教材資料分享

    UVM實(shí)戰(zhàn)教材資料分享。
    發(fā)表于 05-05 15:51 ?17次下載

    什么是UVM environment?

    UVM environment**包含多個(gè)可重用的驗(yàn)證組件,并根據(jù)test case的需求進(jìn)行相應(yīng)的配置。例如,UVM environment可能具有多個(gè)agent(對(duì)應(yīng)不同的interface)、scoreboard、func
    的頭像 發(fā)表于 03-21 11:35 ?1042次閱讀
    什么是<b class='flag-5'>UVM</b> environment?

    介紹一個(gè)通過(guò)GUI方式自動(dòng)生成UVM環(huán)境的工具

    工具來(lái)源于DVCon US 2022的一篇論文:Novel GUI Based UVM Test Bench Template Builder。
    的頭像 發(fā)表于 05-04 09:23 ?1219次閱讀
    介紹一個(gè)通過(guò)GUI方式自動(dòng)生成<b class='flag-5'>UVM</b>環(huán)境的工具

    UVM學(xué)習(xí)筆記(一)

    driver應(yīng)該派生自uvm_driver,而uvm_driver派生自uvm_component。
    的頭像 發(fā)表于 05-26 14:38 ?1317次閱讀
    <b class='flag-5'>UVM</b>學(xué)習(xí)筆記(一)

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

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

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

    UVM中每個(gè)phase都有一個(gè)內(nèi)置的objection ,為components和objects提供了同步方法,指示何時(shí)可以安全地結(jié)束這個(gè)phase, 最終結(jié)束整個(gè)test case。
    的頭像 發(fā)表于 06-11 09:35 ?589次閱讀

    UVMuvm_config_db機(jī)制背后的大功臣

    本次講一下UVM中的uvm_config_db,在UVM中提供了一個(gè)內(nèi)部數(shù)據(jù)庫(kù),可以在其中存儲(chǔ)給定名稱下的值,之后可以由其它TB組件去檢索。
    的頭像 發(fā)表于 06-20 17:28 ?1319次閱讀

    UVMuvm_config_db機(jī)制背后的大功臣

    本次講一下UVM中的uvm_config_db,在UVM中提供了一個(gè)內(nèi)部數(shù)據(jù)庫(kù),可以在其中存儲(chǔ)給定名稱下的值,之后可以由其它TB組件去檢索。
    的頭像 發(fā)表于 06-29 16:57 ?1202次閱讀

    一文詳解UVM設(shè)計(jì)模式

    本篇是對(duì)UVM設(shè)計(jì)模式 ( 二 ) 參數(shù)化類、靜態(tài)變量/方法/類、單例模式、UVM_ROOT、工廠模式、UVM_FACTORY[1]中單例模式的補(bǔ)充,分析靜態(tài)類的使用,UVM中資源池的
    的頭像 發(fā)表于 08-06 10:38 ?1570次閱讀
    一文詳解<b class='flag-5'>UVM</b>設(shè)計(jì)模式