UVM 中的四種消息屬性
時間:2021-11-05 13:45:45
手機看文章
掃描二維碼
隨時隨地手機看文章
[導(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)操作:
b. 冗余度(verbosity)
UVM 定義了一些枚舉值表示預(yù)定義的消息冗余(消息的冗余就是該條消息是否被打印出來的敏感閾值,敏感閾值越小,則越容易被打印出來)。這些值被用在兩個地方。一個是消息自身有一個冗余度,另一個是發(fā)出消息的uvm_compoment 也有一個冗余度。這些枚舉值為:
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。
在缺省情況下運行這段代碼只有 Checkpoint 1 和 Checkpoint 2 消息打印出來。
c. 關(guān)聯(lián)行為(action)
關(guān)聯(lián)行為是指仿真平臺執(zhí)行到該消息時執(zhí)行的動作。關(guān)聯(lián)行為對應(yīng)的枚舉值
如下:
在仿真過程中 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ù)等等。
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 CNT | UVM_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 方法 |
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ù)等等。