当前位置:首页 > 公众号精选 > 芯片验证工程师
[导读]a.输出方式和属性赋值UVM提供了四个函数来完成uvm框架内不同严重度消息的输出,同时通过函数定义了消息的冗余度、关联ID和关联行为。uvm_report_info(stringid,stringmessage,intverbosity=UVM_MEDIUM,stringfile...

a. 输出方式和属性赋值
UVM 提供了四个函数来完成uvm框架内不同严重度消息的输出,同时通过函数定义了消息的冗余度、关联 ID和关联行为。

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);上面四个函数都是 uvm_report_object 类和 uvm_sequence_item 类的成员函数,因此在继承自这两个类的的 component 和 transaction 中都可以使用以下四个宏对应上面的四个函数:

`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)上面宏在全局环境中都可以使用。注意:只有“info”消息能被等级设置屏蔽,“warning”,“error”和“fatal”消息将一直会打印出来,或者只能通过设置消息关联的行为来关闭其输出。


b. 冗余控制
冗余控制主要通过设置全局的冗余度、组件的冗余度来调整消息的输出。
全局控制:为了能够给 testbench 全局的设置一个冗余等级,函数 set_report_verbosity_level_hier()可以实现该功能。

function void set_report_verbosity_level_hier(int verbosity);当一个 testbench 模型调用该函数时,能够设置整个 UVM testbench 的冗余等级。


一个更简单的不需要重新编译代码的方法是使用 UVM 命令行处理器处理 UVM_VERBOSITY plusarg 参数,如下所示:

vsim testbench  UVM_VERBOSITY=UVM_HIGH细粒度控制:除了全局控制之外, UVM 允许在组件层面甚至在 ID 的层面单独设置冗余水平。


函数 set_report_verbosity_level()能够实现设置个别组件的最大冗余水平。

function void set_report_verbosity_level (int verbosity_level);uvm_report_object 类和 uvm_component 类的成员函数包括该函数,用于
设置该组件中消息的冗余等级的最大值。这个函数还有一个分等级的版本,用来设置一个组件和其子组件的冗余等级。


通过 uvm_set_verbosity plusarg, UVM 命令行处理器也提供了更多细粒度的控制,该 plusarg 也用于组件层面和 ID 等级冗余控制。

uvm_set_verbosity=<comp>,<id>,<verbosity>,<phase> uvm_set_verbosity=<comp>,<id>,<verbosity>,time,<time>这两个参数允许用户在仿真阶段巧妙的设置特定组件在特定时间段(在 run
期间的时间)的冗余情况。


c. 关联行为控制
UVM 中能够设置指定消息相关联的行为,即可以设置该消息出现后testbench 的动作。指定消息的类型有以下几类:

同一组件下指定的 ID、

同一组件下指定的严重度、

同一组件下指定的严重度和 ID。


方法 1:

通过下面的函数来将某一类型的消息和特定的行为关联起来。

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)上述的函数中 action 参数可以是 7 种关联行为的一种或者其中几种的组合。比如为了关闭组件 mycomp 中 id 为“MYTAG”,冗余级别为 UVM_ERROR的这类消息的输出,可以添加如下命令:

mycomp.set_report_severity_id_action(UVM_ERROR, “MYTAG”,UVM_NO_ACTION);或者为了打印该消息同时退出仿真,则可以添加如下命令:

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

方法 2:
通过 uvm_set_action plusarg, UVM 命令行处理器也提供了更多细粒度的控
制,该 plusarg 也用于组件层面和 ID 等级冗余控制。用 uvm_set_action 也可以设置相应 component 的属性。

uvm_set_action=<comp>,<id>,<severity>,<action>关于性能的问题
推荐使用`uvm_*()系列宏来处理报告的原因中最重要的是,当一个等级设置为消息无需被打印出来时,`uvm_info 宏在做任何字符串处理之前进行冗余等级检查,这样能够提高仿真效率。
下面看一个简单的`uvm_info()语句:

`uvm_info("Message_ID"$sformatf("%s,data[ ]=0xx",name,ii,data[ii]),UVM_HIGH)在该语句中包含一个相对复杂的语句$sforment,当$sformat()语句被重复调用时,需要占据足够的仿真时间。当冗余等级被设置为 UVM_HIGH 时,大多数情

况下该$sformat()消息将不会打印。因为宏的使用,当该条消息不被打印时,将
不会执行该条语句,从而不会浪费时间去进入$sformat()生成结果字符串。

`uvm_info 宏下面用 uvm_report_object::uvm_report_enabled() API来做一个冗余等级的检查,然后在调用和该宏使用同样的参数的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 冗余设置下根本不会打印, $sformat()字符串仍将在整个 uvm_report_info()函数之前进行处理,这样会降低仿真效率。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭