www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 芯片驗(yàn)證工程師
[導(dǎo)讀]a.輸出方式和屬性賦值UVM提供了四個函數(shù)來完成uvm框架內(nèi)不同嚴(yán)重度消息的輸出,同時(shí)通過函數(shù)定義了消息的冗余度、關(guān)聯(lián)ID和關(guān)聯(lián)行為。uvm_report_info(stringid,stringmessage,intverbosity=UVM_MEDIUM,stringfile...

a. 輸出方式和屬性賦值
UVM 提供了四個函數(shù)來完成uvm框架內(nèi)不同嚴(yán)重度消息的輸出,同時(shí)通過函數(shù)定義了消息的冗余度、關(guān)聯(lián) ID和關(guān)聯(lián)行為。

uvm_report_info(string id, string message, int verbosity = UVM_MEDIUM, string filename =“”, int line = 0);uvm_report_warning(string id, string message, int verbosity = UVM_MEDIUM, stringfilename = “”, int line = 0);uvm_report_error(string id, string message, int verbosity = UVM_LOW, string filename = “”,int line = 0);uvm_report_fatal(string id, string message, int verbosity = UVM_NONE, string filename = “”,int line = 0);上面四個函數(shù)都是 uvm_report_object 類和 uvm_sequence_item 類的成員函數(shù),因此在繼承自這兩個類的的 component 和 transaction 中都可以使用以下四個宏對應(yīng)上面的四個函數(shù):

`uvm_info(string id, string message, int verbosity)`uvm_warning(string id, string message)`uvm_error(string id, string message)`uvm_fatal(string id, string message)上面宏在全局環(huán)境中都可以使用。注意:只有“info”消息能被等級設(shè)置屏蔽,“warning”,“error”和“fatal”消息將一直會打印出來,或者只能通過設(shè)置消息關(guān)聯(lián)的行為來關(guān)閉其輸出。


b. 冗余控制
冗余控制主要通過設(shè)置全局的冗余度、組件的冗余度來調(diào)整消息的輸出。
全局控制:為了能夠給 testbench 全局的設(shè)置一個冗余等級,函數(shù) set_report_verbosity_level_hier()可以實(shí)現(xiàn)該功能。

function?void?set_report_verbosity_level_hier(int?verbosity);當(dāng)一個 testbench 模型調(diào)用該函數(shù)時(shí),能夠設(shè)置整個 UVM testbench 的冗余等級。


一個更簡單的不需要重新編譯代碼的方法是使用 UVM 命令行處理器處理 UVM_VERBOSITY plusarg 參數(shù),如下所示:

vsim?testbench? UVM_VERBOSITY=UVM_HIGH細(xì)粒度控制:除了全局控制之外, UVM 允許在組件層面甚至在 ID 的層面單獨(dú)設(shè)置冗余水平。


函數(shù) set_report_verbosity_level()能夠?qū)崿F(xiàn)設(shè)置個別組件的最大冗余水平。

function?void?set_report_verbosity_level?(int?verbosity_level);uvm_report_object 類和 uvm_component 類的成員函數(shù)包括該函數(shù),用于
設(shè)置該組件中消息的冗余等級的最大值。這個函數(shù)還有一個分等級的版本,用來設(shè)置一個組件和其子組件的冗余等級。


通過 uvm_set_verbosity plusarg, UVM 命令行處理器也提供了更多細(xì)粒度的控制,該 plusarg 也用于組件層面和 ID 等級冗余控制。

uvm_set_verbosity=<comp>,<id>,<verbosity>,<phase> uvm_set_verbosity=<comp>,<id>,<verbosity>,time,<time>這兩個參數(shù)允許用戶在仿真階段巧妙的設(shè)置特定組件在特定時(shí)間段(在 run
期間的時(shí)間)的冗余情況。


c. 關(guān)聯(lián)行為控制
UVM 中能夠設(shè)置指定消息相關(guān)聯(lián)的行為,即可以設(shè)置該消息出現(xiàn)后testbench 的動作。指定消息的類型有以下幾類:

同一組件下指定的 ID、

同一組件下指定的嚴(yán)重度、

同一組件下指定的嚴(yán)重度和 ID。


方法 1:

通過下面的函數(shù)來將某一類型的消息和特定的行為關(guān)聯(lián)起來。

function?void?set_report_severity_id_override(uvm_severity?cur_severity,?string id,uvm_severity?new_severity?)function void set_report_severity_action (uvm_severity severity, uvm_action action)function void set_report_id_action (string id,uvm_action action)function?void?set_report_severity_id_action?(uvm_severity?severity,?string?id,uvm_action action)

function?void?set_report_severity_id_verbosity_hier(uvm_severity?severity,string?id,int verbosity)function void set_report_severity_action_hier ( uvm_severity severity,uvm_action action)function void set_report_id_action_hier (string id,uvm_action action)function?void?set_report_severity_id_action_hier(uvm_severity?severity,string?id,uvm_action action)上述的函數(shù)中 action 參數(shù)可以是 7 種關(guān)聯(lián)行為的一種或者其中幾種的組合。比如為了關(guān)閉組件 mycomp 中 id 為“MYTAG”,冗余級別為 UVM_ERROR的這類消息的輸出,可以添加如下命令:

mycomp.set_report_severity_id_action(UVM_ERROR, “MYTAG”,UVM_NO_ACTION);或者為了打印該消息同時(shí)退出仿真,則可以添加如下命令:

mycomp.set_report_severity_id_action(UVM_ERROR,?“MYTAG”,UVM_DISPLAY|UVM_EXIT);

方法 2:
通過 uvm_set_action plusarg, UVM 命令行處理器也提供了更多細(xì)粒度的控
制,該 plusarg 也用于組件層面和 ID 等級冗余控制。用 uvm_set_action 也可以設(shè)置相應(yīng) component 的屬性。

uvm_set_action=<comp>,<id>,<severity>,<action>關(guān)于性能的問題
推薦使用`uvm_*()系列宏來處理報(bào)告的原因中最重要的是,當(dāng)一個等級設(shè)置為消息無需被打印出來時(shí),`uvm_info 宏在做任何字符串處理之前進(jìn)行冗余等級檢查,這樣能夠提高仿真效率。
下面看一個簡單的`uvm_info()語句:

`uvm_info("Message_ID",?$sformatf("%s,data[ ]=0xx",name,ii,data[ii]),UVM_HIGH)在該語句中包含一個相對復(fù)雜的語句$sforment,當(dāng)$sformat()語句被重復(fù)調(diào)用時(shí),需要占據(jù)足夠的仿真時(shí)間。當(dāng)冗余等級被設(shè)置為 UVM_HIGH 時(shí),大多數(shù)情

況下該$sformat()消息將不會打印。因?yàn)楹甑氖褂茫?dāng)該條消息不被打印時(shí),將
不會執(zhí)行該條語句,從而不會浪費(fèi)時(shí)間去進(jìn)入$sformat()生成結(jié)果字符串。

`uvm_info 宏下面用 uvm_report_object::uvm_report_enabled()?API來做一個冗余等級的檢查,然后在調(diào)用和該宏使用同樣的參數(shù)的uvm_report_info()之前決定一個消息是否被打印。

if (uvm_report_enabled(UVM_HIGH, UVM_INFO, "Message_ID"))uvm_report_info("Message_ID",?$sformatf("%s,?data[ ]?=?0xx",?name,?ii,data[ii]),?UVM_HIGH);如果直接使用 uvm_report_info(),

uvm_report_info("Message_ID", $sformatf("%s, data[ ] = 0xx", name, ii, data[ii]),UVM_HIGH);即使最終該字符串在 UVM_HIGH 冗余設(shè)置下根本不會打印, $sformat()字符串仍將在整個 uvm_report_info()函數(shù)之前進(jìn)行處理,這樣會降低仿真效率。

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