在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4324|回复: 5

[求助] 请教一个UVM中关于report的问题

[复制链接]
发表于 2014-7-18 22:17:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 重装大米 于 2014-7-18 23:00 编辑

在UVM中我们可以使用set_report_*_action和set_report_*_file对report的行为和输出进行设置,现在我在测试平台中我希望能够对测试平台中的report进行统一设置,但我发现如果我在environment中进行设置那只能对environment中的report起作用。我想问如何能够在一个地方对整个测试平台的所有report进行设置?
比如使用set_report_verbosity_level_hier就可以进行全局设置,不知道
set_report_*_action和set_report_*_file有没有类似的
发表于 2014-7-20 15:15:34 | 显示全部楼层
UVM的设计者已经考虑到这个问题了...
UVM中一共可以通过如下方式来实现输出信息的控制:
1.        通过控制ID来实现不同的输出控制。
2.        通过设置不同ID的信息报告冗余级别。
3.        通过设置不同ID的action。
4.        从uvm_report_catcher派生一个类,然后将这个callback加入到callback池中。
UVM能够实现下面的动作:
1.        设置一个全局的属性来决定该testbench所属的消息是否输出。两种方法。
2.        设置一个组件(compoment)的属性来决定该组件所属的消息是否输出。用uvm_compoment组件的成员函数set_report_ verbosity_level_hier ()来定义该组件的冗余属性。
3.        设置一个消息的属性来决定该消息是否输出。
4.        设置一个组件中不同属性和不同ID的消息出现之后testbench的行为。
在UVM中的消息有三种属性,分别是:严重度(severity)、冗余度(verbosity)、以及消息的关联行为,此外还有消息的标签ID。UVM的消息机制基于该三种属性和标签ID,实现对消息的处理。
冗余控制主要通过设置全局的冗余度、组件的冗余度来调整消息的输出。
全局控制
为了能够给testbench全局的设置一个冗余等级,函数set_report_verbosity_ level_hier()可以实现该功能。
方法1:
function void set_report_verbosity_level_hier(int verbosity);
当一个testbench模型调用该函数时,能够设置整个UVM testbench的冗余等级。
方法2:
一个更简单的不需要重新编译代码的方法是使用UVM命令行处理器处理 +UVM_VERBOSITY plusarg参数,如下所示:
vsim testbench +UVM_VERBOSITY=UVM_HIGH
细粒度控制
除了全局控制之外,UVM允许在组件层面甚至在ID的层面单独设置冗余水平。
方法1:
函数set_report_verbosity_level()能够实现设置个别组件的最大冗余水平。
function void set_report_verbosity_level (int verbosity_level);
uvm_report_object类和uvm_component类的成员函数包括该函数,用于设置该组件中消息的冗余等级的最大值。
这个函数还有一个分等级的版本,用来设置一个组件和其子组件的冗余等级。
function void set_report_verbosity_level_hier ( int verbosity );
该函数为继承自uvm_report_object类的uvm_component子类下的一个函数,该函数递归的设置了自身和其之下的组件的报告的最大冗余等级。从该组件发出的超出该冗余度的消息都将被忽略。
方法2:
通过+uvm_set_verbosity plusarg,UVM命令行处理器也提供了更多细粒度的控制,该plusarg也用于组件层面和ID等级冗余控制。
+uvm_set_verbosity=<comp>,<id>,<verbosity>,<phase>
+uvm_set_verbosity=<comp>,<id>,<verbosity>,time,<time>
这两个参数允许用户在仿真阶段巧妙的设置特定组件在特定时间段(在run期间的时间)的冗余情况。参数id可以是ALL(对应所有ID)或者一个特定消息的ID。因为性能的原因,对于ID不支持通配符。在非“run”期间的设置是在命令行中按次序执行,在run期间的设置是按照事件排序,然后按照在同一时间的设置执行。(这里存在一个问题没有搞明白:在run期间如何设置?难道是暂停仿真之后再设置?)
方法3:
function void set_report_severity_id_verbosity (uvm_severity severity,string id,int verbosity)
函数set_report_severity_id_verbosity可以将给定严重度(severity)和给定ID的消息报告和指定的冗余度关联起来,和severity/id都关联的优先级高于仅和id关联的优先级,其又高于仅和severity关联的优先级。
uvm_report_object类和uvm_component类的成员函数包括该函数,因此在继承自这两个类的的component和transaction中都可以使用。

来自我写的一个文档,希望能帮助到你.......
 楼主| 发表于 2014-7-20 20:32:37 | 显示全部楼层
回复 2# guolehaohao
是这样,我知道可以通过你提到的种种设置来设定report是否输出,我现在想问的是,是否能够通过某种方法设置测试平台全局的report的行为(action)和输出位置(file)
发表于 2014-7-21 09:16:48 | 显示全部楼层
回复 3# 重装大米

全局的action可以设置的,上文中有提到,至于输出的file的话,我没有见到UVM中提到这一点...我建议如果要用到这个的话,可以用宏来解决...不知道能否解决你的问题...
发表于 2014-7-21 09:18:39 | 显示全部楼层
回复 3# 重装大米

每个report都有自己的ID,因此可以根据不同的ID设置不同的action....
 楼主| 发表于 2014-7-21 09:56:53 | 显示全部楼层
回复 4# guolehaohao
目前看来宏是唯一可以想到的解决方法了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-21 00:27 , Processed in 0.034579 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表