前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >uvm_info高级技巧(2)--- 对uvm_error 能睁一只眼闭一只眼吗?

uvm_info高级技巧(2)--- 对uvm_error 能睁一只眼闭一只眼吗?

作者头像
IC验证
发布2020-06-30 14:21:32
5K0
发布2020-06-30 14:21:32
举报
文章被收录于专栏:杰瑞IC验证

来源| 杰瑞IC验证(ID:Jerry_IC)

|原创作者| Q哥

Q哥在上一篇文章uvm_info高级技巧(1)中,跟大家聊了如何屏蔽那些刷屏的uvm_info信息。

今天继续深挖调试语句的高级用法。

1

warning/error/fatal调试语句

调试语句除了uvm_info,UVM内部根据问题的严重性(severity)由低到高,还引入了uvm_warning/uvm_error/uvm_fatal。

它们也是UVM预定义的宏,格式跟umv_info很像,只是不再需要设定啰嗦程度了;因此不能通过调整啰嗦容忍等级来忽略。

uvm_warning是打印一些警告信息,用来提醒仿真中的潜在问题。虽然这些问题暂时可能没什么错,但还不能完全忽视。

uvm_error用来记录仿真中的错误,达到一定数量,仿真就提前结束。

uvm_fatal是严重错误,一旦执行到了,仿真就立即提前终结。

那么问题来了:

当我们专门进行异常测试的时候,由于施加的激励本身就是错误的,这时候难免会触发TB里面原先的uvm_error或者uvm_fatal;导致测试提前终结。

这些uvm_error或uvm_fatal如果是自己写的,倒是可以通过打补丁让它们对异常测试case网开一面。但如果是其他人写的或者用的VIP,那就有点棘手了。

好在UVM调试信息机制已经考虑到这个问题了。

在仿真过程中,UVM内部会记录每条调试语句的严重程度。

默认情况下,uvm_info语句的严重程度就是UVM_INFO,uvm_error的严重程度就是UVM_ERROR,以此类推。

2

修改调试语句的严重程度

类似于调整啰嗦容忍等级,我们可以通过下面这个命令行plusargs来修改调试语句的严重程度。

这里<comp>和<id>的设置方法跟uvm_set_verbostity一样,不再赘述。

<current severity>是当前的严重程度,<new severity>是想要改成的严重程度。

例如下面这个仿真参数,就是把uvm_test_top.env0下面所有子子孙孙组件里msg id为BAD_CRC的uvm_error语句,改成uvm_warning。

对于msg id是BAD_CRC的uvm_fatal语句,并不受影响。

这个plusargs不单能把UVM_ERROR变成UVM_INFO,反过来也可以把UVM_INFO变成UVM_ERROR,就看大家实际的需求了。

如果将UVM_ERROR改成UVM_INFO,那么这时候它的啰嗦程度是什么呢?

答案是UVM_NONE,也就是啰嗦程度最低。

除了命令行plusargs参数,也可以在TB中,通过component对象调用API来动态修改严重程度(如下图所示),用法类似于上一篇提到的修改verbosity的API。

下面这两个API的区分在于是否按msg id进行过滤,不再赘述。

3

调试语句引发的调试行为

设置容忍等级虽然可以屏蔽啰嗦程度高的uvm_info语句,但是如果想屏蔽啰嗦程度为UVM_NONE的语句呢?

又或者,当我们把uvm_fatal/uvm_error改成了uvm_warning/uvm_info以后,仿真虽然没有终结,但是这些信息仍在刷屏怎么办?

别急,听Q哥给大家慢慢道来。

除了啰嗦程度(verbosity)和严重程度(severity),UVM内部为每个调试语句都记录了一个调试行为(action),它是一个多比特的变量,每一比特都代表一种行为,如下图所示。

action如果有多个比特为1,就同时执行多项调试行为;

如果全部为0,就什么都不干,记为UVM_NO_ACTION。

默认情况下,调试语句对应的行为是根据严重程度决定的,如下图所示。

4

修改调试语句的调试行为

UVM提供了下面的命令行plusargs参数,可以修改调试语句对应的调试行为。

这里的<comp>和<id>用法和uvm_set_verbosity及uvm_set_severity一样。

<severity>是代表调试语句的严重程度。如果通过uvm_set_severity修改过严重程度,那么uvm_set_action会根据修改后的严重程度进行过滤。

<action>是执行到当前调试语句时采取的调试行为。

例如配置下面这个命令行参数,就可以无视uvm_test_top.env0下面所有子子孙孙组件中严重程度为UVM_ERROR的所有调试语句;

也就是说,既不会打印信息到屏幕,也不会计入错误个数。

相比之前提到的uvm_set_verbosity,uvm_set_action简直是大杀器啊!

完全可以通过修改调试行为,更直接的屏蔽调试信息,不必再管什么啰嗦程度和容忍等级。

uvm_set_action也可以在TB中通过component对象调用API来实现(如下图所示),用法类似于verbosity对应的API,这里不赘述。

总结

通过修改调试语句的严重性和对应的调试行为,可以避免仿真提前结束,或者更为直接的屏蔽调试信息。

但是Q哥需要给大家特别强调下,修改调试语句的严重性和调试行为,属于掩耳盗铃颠倒黑白的做法,一定要慎之又慎,避免操作不当,掩盖了原本应该报出的错误。

美好的时光总是短暂的,今天就跟大家聊到这里。接下来,Q哥将给大家献上如何定制uvm调试信息的结构,如何打印彩色信息到屏幕上,等等进阶的uvm调试技巧使用心得。

敬请期待!

日积月累,进步从一点一滴开始,加油!!

——The End——

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杰瑞IC验证 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档