當(dāng)前位置:首頁 > 公眾號精選 > 芯片驗證工程師
[導(dǎo)讀]?UVM中的消息有三種屬性,分別是:嚴(yán)重度(severity)、冗余度(verbosity)、以及消息的關(guān)聯(lián)行為,此外還有消息的標(biāo)簽ID。UVM的消息機制基于該三種屬性和標(biāo)簽ID,實現(xiàn)對消息的處理。a.嚴(yán)重度(severity):在調(diào)試和仿真的過程中,我們需要輸出消息,那么如何區(qū)...

?UVM 中的消息有三種屬性,分別是:嚴(yán)重度(severity)、冗余度(verbosity)、以及消息的關(guān)聯(lián)行為,此外還有消息的標(biāo)簽 ID。UVM 的消息機制基于該三種屬性和標(biāo)簽 ID, 實現(xiàn)對消息的處理。


a. 嚴(yán)重度(severity):
在調(diào)試和仿真的過程中,我們需要輸出消息,那么如何區(qū)分消息的嚴(yán)重度?UVM 中用對應(yīng)的枚舉值來標(biāo)識,更具體來說是用消息宏來標(biāo)識。不同嚴(yán)重度的枚舉值及其缺省的關(guān)聯(lián)操作:

枚舉值 屬性 缺省操作
UVM_INFO 有用的消息 UVM_DISPLAY
UVM_WARNING 顯示一個潛在的問題 UVM_DISPLAY
UVM_ERROR 顯示一個問題,仿真將繼續(xù),并且計數(shù)ERROR CNTUVM_DISPLAY|
UVM_COUNT
UVM_FATAL 顯示一個導(dǎo)致仿真無法恢復(fù)的問題,仿真將退出 UVM_DISPLAY|
UVM_EXIT

b. 冗余度(verbosity)
UVM 定義了一些枚舉值表示預(yù)定義的消息冗余(消息的冗余就是該條消息是否被打印出來的敏感閾值,敏感閾值越小,則越容易被打印出來)。這些值被用在兩個地方。一個是消息自身有一個冗余度,另一個是發(fā)出消息的uvm_compoment 也有一個冗余度。這些枚舉值為:

枚舉值 屬性
UVM_NONE 值為 0,不可屏蔽的關(guān)鍵消息
UVM_LOW 值為 100,可屏蔽消息,在仿真過程中極少輸出
UVM_MEDIUM 值為 200,對每個數(shù)據(jù)項或者序列(sequence)僅僅發(fā)生一次的消息
UVM_HIGH 值為 300,更詳細(xì)的數(shù)據(jù)項信息,包括打印封包的值
UVM_FULL 值為 400,剩余的部分,包括特定方法的消息打印
UVM_DEBUG* 值為 500,調(diào)試模式下的調(diào)試信息

UVM_NONE 閾值最低,為 0;UVM_DEBUG的閾值最高,為 500。對于UVM 來說,閾值越高,則越不容易被打印出來,這里是和我們平常的思維是相反的。


在 UVM 中,一個有著低冗余等級的消息會更容易打印出來。一個有著UVM_NONE 冗余等級的消息總會打印出來。

對于一條消息來說,這條消息本身有一個冗余等級,此外,發(fā)出該消息的組件也會有一個冗余等級,當(dāng)這兩個冗余等級發(fā)生沖突時,將如何處理?對于 UVM來說,發(fā)出該消息組件的冗余等級的優(yōu)先級高于消息本身的冗余等級的。即當(dāng)一個冗余等級為 UVM_DEBUG 的 compoment 發(fā)出所有等級的消息時,該消息總是會被打印出來的;而一個冗余等級為 UVM_NONE 的 compoment 發(fā)出一條所有等級的消息時,只有等級為 UVM_NONE 的消息才會被打印出來。


這里說明:給一個組件設(shè)置更高的冗余等級將會暴露該組件更多的細(xì)節(jié)。組件和消息缺省的冗余等級是 UVM_MEDIUM。

task run_phase(uvm_phase phase);`uvm_info({get_type_name(),”::run_phase”},”starting run_phase”,UVM_HIGH)...`uvm_info({get_type_name(),”::run_phase”},”checkpoint?1?of run_phase”,UVM_MEDIUM)...`uvm_info({get_type_name(),”::run_phase”},”checkpoint 2 of run_phase”,UVM_LOW)...`uvm_info({get_type_name(),”::run_phase”},”Ending run_phase”,UVM_HIGH)endtask :run_phase

在缺省情況下運行這段代碼只有 Checkpoint 1 Checkpoint 2 消息打印出來。


c. 關(guān)聯(lián)行為(action)
關(guān)聯(lián)行為是指仿真平臺執(zhí)行到該消息時執(zhí)行的動作。關(guān)聯(lián)行為對應(yīng)的枚舉值
如下:

枚舉值 屬性
UVM_NO_ACTION 不采取任何行動
UVM_DISPLAY 發(fā)送該報告到標(biāo)準(zhǔn)輸出

UVM_LOG 發(fā)送該報告到該冗余等級和 id(severity, id)對應(yīng)的文件
UVM_COUNT 對該屬性的報告進(jìn)行計數(shù),當(dāng)計數(shù)值到達(dá)最大 quit 數(shù)量時,仿真終止
UVM_STOP 執(zhí)行$stop 指令,使仿真進(jìn)入交互模式
UVM_EXIT 立即終止仿真
UVM_CALL_BACK 回調(diào)報告 hook 方法
在仿真過程中 UVM 對消息嚴(yán)重度為 warning、 error、 fatal 的條目自動進(jìn)行計數(shù),不需要另外配置。(這個特性可以用于用例的仿真pass/error控制)


d. 關(guān)聯(lián) ID
每一個打印出來的消息都包括一個和該消息相關(guān)的 ID。該 ID 字段可以用來完成用戶指定的、甚至在仿真之外的任何鑒別或者過濾工作。在仿真中,該 ID能夠指示嚴(yán)重度、等級等消息的屬性或者做其他修改或者廢止該報告的決定。因為冗余等級能夠處理一個 ID 的粒度級別,一般建議將 get_type_name()和第 二 個 字 符 串 連 接 在 一 起 的 模 式 。 這 個 get_type_name() 函 數(shù) ( 由`uvm_component/object_utils() 宏生成)能夠通知用戶該字符串來自哪個類。第二個字符串被用于表示消息來自那個函數(shù)/任務(wù)或用于進(jìn)一步需要的粒度。

我的理解:關(guān)聯(lián) ID 類似于一個標(biāo)簽,消息之所以有關(guān)聯(lián) ID 是為了標(biāo)識同一類型的消息,這樣通過 ID 和其他屬性就可以對該類型的消息進(jìn)行處理。比如可以設(shè)置具有該 ID 的消息不輸出、冗余度為 UVM_HIGH、對其進(jìn)行計數(shù)等等。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉