UVM 中的四種消息屬性
時(shí)間:2021-11-05 13:45:45
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]?UVM中的消息有三種屬性,分別是:嚴(yán)重度(severity)、冗余度(verbosity)、以及消息的關(guān)聯(lián)行為,此外還有消息的標(biāo)簽ID。UVM的消息機(jī)制基于該三種屬性和標(biāo)簽ID,實(shí)現(xiàn)對(duì)消息的處理。a.嚴(yán)重度(severity):在調(diào)試和仿真的過(guò)程中,我們需要輸出消息,那么如何區(qū)...
?UVM 中的消息有三種屬性,分別是:嚴(yán)重度(severity)、冗余度(verbosity)、以及消息的關(guān)聯(lián)行為,此外還有消息的標(biāo)簽 ID。UVM 的消息機(jī)制基于該三種屬性和標(biāo)簽 ID, 實(shí)現(xiàn)對(duì)消息的處理。
a. 嚴(yán)重度(severity):
在調(diào)試和仿真的過(guò)程中,我們需要輸出消息,那么如何區(qū)分消息的嚴(yán)重度?UVM 中用對(duì)應(yīng)的枚舉值來(lái)標(biāo)識(shí),更具體來(lái)說(shuō)是用消息宏來(lái)標(biāo)識(shí)。不同嚴(yán)重度的枚舉值及其缺省的關(guān)聯(lián)操作:
b. 冗余度(verbosity)
UVM 定義了一些枚舉值表示預(yù)定義的消息冗余(消息的冗余就是該條消息是否被打印出來(lái)的敏感閾值,敏感閾值越小,則越容易被打印出來(lái))。這些值被用在兩個(gè)地方。一個(gè)是消息自身有一個(gè)冗余度,另一個(gè)是發(fā)出消息的uvm_compoment 也有一個(gè)冗余度。這些枚舉值為:
UVM_NONE 閾值最低,為 0;UVM_DEBUG的閾值最高,為 500。對(duì)于UVM 來(lái)說(shuō),閾值越高,則越不容易被打印出來(lái),這里是和我們平常的思維是相反的。
在 UVM 中,一個(gè)有著低冗余等級(jí)的消息會(huì)更容易打印出來(lái)。一個(gè)有著UVM_NONE 冗余等級(jí)的消息總會(huì)打印出來(lái)。
對(duì)于一條消息來(lái)說(shuō),這條消息本身有一個(gè)冗余等級(jí),此外,發(fā)出該消息的組件也會(huì)有一個(gè)冗余等級(jí),當(dāng)這兩個(gè)冗余等級(jí)發(fā)生沖突時(shí),將如何處理?對(duì)于 UVM來(lái)說(shuō),發(fā)出該消息組件的冗余等級(jí)的優(yōu)先級(jí)高于消息本身的冗余等級(jí)的。即當(dāng)一個(gè)冗余等級(jí)為 UVM_DEBUG 的 compoment 發(fā)出所有等級(jí)的消息時(shí),該消息總是會(huì)被打印出來(lái)的;而一個(gè)冗余等級(jí)為 UVM_NONE 的 compoment 發(fā)出一條所有等級(jí)的消息時(shí),只有等級(jí)為 UVM_NONE 的消息才會(huì)被打印出來(lái)。
這里說(shuō)明:給一個(gè)組件設(shè)置更高的冗余等級(jí)將會(huì)暴露該組件更多的細(xì)節(jié)。組件和消息缺省的冗余等級(jí)是 UVM_MEDIUM。
在缺省情況下運(yùn)行這段代碼只有 Checkpoint 1 和 Checkpoint 2 消息打印出來(lái)。
c. 關(guān)聯(lián)行為(action)
關(guān)聯(lián)行為是指仿真平臺(tái)執(zhí)行到該消息時(shí)執(zhí)行的動(dòng)作。關(guān)聯(lián)行為對(duì)應(yīng)的枚舉值
如下:
在仿真過(guò)程中 UVM 對(duì)消息嚴(yán)重度為 warning、 error、 fatal 的條目自動(dòng)進(jìn)行計(jì)數(shù),不需要另外配置。(這個(gè)特性可以用于用例的仿真pass/error控制)
d. 關(guān)聯(lián) ID
每一個(gè)打印出來(lái)的消息都包括一個(gè)和該消息相關(guān)的 ID。該 ID 字段可以用來(lái)完成用戶指定的、甚至在仿真之外的任何鑒別或者過(guò)濾工作。在仿真中,該 ID能夠指示嚴(yán)重度、等級(jí)等消息的屬性或者做其他修改或者廢止該報(bào)告的決定。因?yàn)槿哂嗟燃?jí)能夠處理一個(gè) ID 的粒度級(jí)別,一般建議將 get_type_name()和第 二 個(gè) 字 符 串 連 接 在 一 起 的 模 式 。 這 個(gè) get_type_name() 函 數(shù) ( 由`uvm_component/object_utils() 宏生成)能夠通知用戶該字符串來(lái)自哪個(gè)類。第二個(gè)字符串被用于表示消息來(lái)自那個(gè)函數(shù)/任務(wù)或用于進(jìn)一步需要的粒度。
我的理解:關(guān)聯(lián) ID 類似于一個(gè)標(biāo)簽,消息之所以有關(guān)聯(lián) ID 是為了標(biāo)識(shí)同一類型的消息,這樣通過(guò) ID 和其他屬性就可以對(duì)該類型的消息進(jìn)行處理。比如可以設(shè)置具有該 ID 的消息不輸出、冗余度為 UVM_HIGH、對(duì)其進(jìn)行計(jì)數(shù)等等。
a. 嚴(yán)重度(severity):
在調(diào)試和仿真的過(guò)程中,我們需要輸出消息,那么如何區(qū)分消息的嚴(yán)重度?UVM 中用對(duì)應(yīng)的枚舉值來(lái)標(biāo)識(shí),更具體來(lái)說(shuō)是用消息宏來(lái)標(biāo)識(shí)。不同嚴(yán)重度的枚舉值及其缺省的關(guān)聯(lián)操作:
枚舉值 | 屬性 | 缺省操作 |
UVM_INFO | 有用的消息 | UVM_DISPLAY |
UVM_WARNING | 顯示一個(gè)潛在的問(wèn)題 | UVM_DISPLAY |
UVM_ERROR | 顯示一個(gè)問(wèn)題,仿真將繼續(xù),并且計(jì)數(shù)ERROR CNT | UVM_DISPLAY| UVM_COUNT |
UVM_FATAL | 顯示一個(gè)導(dǎo)致仿真無(wú)法恢復(fù)的問(wèn)題,仿真將退出 | UVM_DISPLAY| UVM_EXIT |
b. 冗余度(verbosity)
UVM 定義了一些枚舉值表示預(yù)定義的消息冗余(消息的冗余就是該條消息是否被打印出來(lái)的敏感閾值,敏感閾值越小,則越容易被打印出來(lái))。這些值被用在兩個(gè)地方。一個(gè)是消息自身有一個(gè)冗余度,另一個(gè)是發(fā)出消息的uvm_compoment 也有一個(gè)冗余度。這些枚舉值為:
枚舉值 | 屬性 |
UVM_NONE | 值為 0,不可屏蔽的關(guān)鍵消息 |
UVM_LOW | 值為 100,可屏蔽消息,在仿真過(guò)程中極少輸出 |
UVM_MEDIUM | 值為 200,對(duì)每個(gè)數(shù)據(jù)項(xiàng)或者序列(sequence)僅僅發(fā)生一次的消息 |
UVM_HIGH | 值為 300,更詳細(xì)的數(shù)據(jù)項(xiàng)信息,包括打印封包的值 |
UVM_FULL | 值為 400,剩余的部分,包括特定方法的消息打印 |
UVM_DEBUG* | 值為 500,調(diào)試模式下的調(diào)試信息 |
UVM_NONE 閾值最低,為 0;UVM_DEBUG的閾值最高,為 500。對(duì)于UVM 來(lái)說(shuō),閾值越高,則越不容易被打印出來(lái),這里是和我們平常的思維是相反的。
在 UVM 中,一個(gè)有著低冗余等級(jí)的消息會(huì)更容易打印出來(lái)。一個(gè)有著UVM_NONE 冗余等級(jí)的消息總會(huì)打印出來(lái)。
對(duì)于一條消息來(lái)說(shuō),這條消息本身有一個(gè)冗余等級(jí),此外,發(fā)出該消息的組件也會(huì)有一個(gè)冗余等級(jí),當(dāng)這兩個(gè)冗余等級(jí)發(fā)生沖突時(shí),將如何處理?對(duì)于 UVM來(lái)說(shuō),發(fā)出該消息組件的冗余等級(jí)的優(yōu)先級(jí)高于消息本身的冗余等級(jí)的。即當(dāng)一個(gè)冗余等級(jí)為 UVM_DEBUG 的 compoment 發(fā)出所有等級(jí)的消息時(shí),該消息總是會(huì)被打印出來(lái)的;而一個(gè)冗余等級(jí)為 UVM_NONE 的 compoment 發(fā)出一條所有等級(jí)的消息時(shí),只有等級(jí)為 UVM_NONE 的消息才會(huì)被打印出來(lái)。
這里說(shuō)明:給一個(gè)組件設(shè)置更高的冗余等級(jí)將會(huì)暴露該組件更多的細(xì)節(jié)。組件和消息缺省的冗余等級(jí)是 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
在缺省情況下運(yùn)行這段代碼只有 Checkpoint 1 和 Checkpoint 2 消息打印出來(lái)。
c. 關(guān)聯(lián)行為(action)
關(guān)聯(lián)行為是指仿真平臺(tái)執(zhí)行到該消息時(shí)執(zhí)行的動(dòng)作。關(guān)聯(lián)行為對(duì)應(yīng)的枚舉值
如下:
枚舉值 | 屬性 |
UVM_NO_ACTION | 不采取任何行動(dòng) |
UVM_DISPLAY | 發(fā)送該報(bào)告到標(biāo)準(zhǔn)輸出 |
UVM_LOG | 發(fā)送該報(bào)告到該冗余等級(jí)和 id(severity, id)對(duì)應(yīng)的文件 |
UVM_COUNT | 對(duì)該屬性的報(bào)告進(jìn)行計(jì)數(shù),當(dāng)計(jì)數(shù)值到達(dá)最大 quit 數(shù)量時(shí),仿真終止 |
UVM_STOP | 執(zhí)行$stop 指令,使仿真進(jìn)入交互模式 |
UVM_EXIT | 立即終止仿真 |
UVM_CALL_BACK | 回調(diào)報(bào)告 hook 方法 |
d. 關(guān)聯(lián) ID
每一個(gè)打印出來(lái)的消息都包括一個(gè)和該消息相關(guān)的 ID。該 ID 字段可以用來(lái)完成用戶指定的、甚至在仿真之外的任何鑒別或者過(guò)濾工作。在仿真中,該 ID能夠指示嚴(yán)重度、等級(jí)等消息的屬性或者做其他修改或者廢止該報(bào)告的決定。因?yàn)槿哂嗟燃?jí)能夠處理一個(gè) ID 的粒度級(jí)別,一般建議將 get_type_name()和第 二 個(gè) 字 符 串 連 接 在 一 起 的 模 式 。 這 個(gè) get_type_name() 函 數(shù) ( 由`uvm_component/object_utils() 宏生成)能夠通知用戶該字符串來(lái)自哪個(gè)類。第二個(gè)字符串被用于表示消息來(lái)自那個(gè)函數(shù)/任務(wù)或用于進(jìn)一步需要的粒度。
我的理解:關(guān)聯(lián) ID 類似于一個(gè)標(biāo)簽,消息之所以有關(guān)聯(lián) ID 是為了標(biāo)識(shí)同一類型的消息,這樣通過(guò) ID 和其他屬性就可以對(duì)該類型的消息進(jìn)行處理。比如可以設(shè)置具有該 ID 的消息不輸出、冗余度為 UVM_HIGH、對(duì)其進(jìn)行計(jì)數(shù)等等。