1
前言
在隨機驗證環(huán)境中,如果出現(xiàn)回歸錯誤,那么這個錯誤是否可以復(fù)現(xiàn)是非常關(guān)鍵的。在回歸時,我們通常利用UVM的+UVM_VERBOSITY參數(shù)來設(shè)置驗證環(huán)境的全局打印等級為UVM_NONE,這樣減少打印log,進而加快仿真速度。另一方面,回歸通常也默認(rèn)不dump波形,減少內(nèi)存占用和加快仿真速度。但是如果出現(xiàn)驗證用例掛掉了,我們通常需要借助于仿真log和波形來定位問題,因此+UVM_VERBOSITY參數(shù)會設(shè)置更高打印等級,來打印更多的信息。
有些人遇到使用+UVM_VERBOSITY傳遞不同打印等級時,問題會無法復(fù)現(xiàn)。這可能和驗證環(huán)境中用戶直接使用了uvm_report_enabled()函數(shù)有關(guān)系,它可能會導(dǎo)致驗證環(huán)境的隨機狀態(tài)發(fā)生改變,進而影響仿真結(jié)果。
2
問題解釋
uvm_report_enabled()函數(shù)定義如下:
function?int?uvm_report_enabled(int?verbosity, uvm_severity severity = UVM_INFO,?string?id =?"");
? ??if?(get_report_verbosity_level(severity, id) < verbosity)
? ? ? ??return?0;
? ??return?1;
endfunction
uvm_report_enabled()函數(shù)比較關(guān)鍵的參數(shù)是verbosity,如果當(dāng)前組件配置的打印等級大于等于verbosity的值,那么uvm_report_enabled()函數(shù)返回1;反之,則返回0。
根據(jù)uvm_report_enabled()函數(shù)返回1還是0,有些用戶把uvm_report_enabled()函數(shù)用作判斷條件,例如:
if ( uvm_report_enabled(UVM_MEDIUM) )?begin
? ??//?execute?randomization block_A
end
else?begin
? ??//?execute?randomization block_B
end
代碼解釋:如果組件的打印等級大于等于UVM_MEDIUM,則執(zhí)行randomization block_A;反之,則執(zhí)行randomization block_B。
這里就涉及到不同打印等級情況下,仿真會執(zhí)行不同的語句,一旦這些不同的語句所產(chǎn)生的隨機狀態(tài)不一致,就會破壞原先的隨機狀態(tài),進而影響后續(xù)所有代碼的隨機狀態(tài),所以仿真可能會無法復(fù)現(xiàn)問題。