慎用UVM中的uvm_report_enabled()函数

1. 前言

在随机验证环境中,如果出现回归错误,那么这个错误是否可以复现是非常关键的。在回归时,我们通常利用UVM的+UVM_VERBOSITY参数来设置验证环境的全局打印等级为UVM_NONE,这样减少打印log,进而加快仿真速度。另一方面,回归通常也默认不dump波形,减少内存占用和加快仿真速度。但是如果出现验证用例挂掉了,我们通常需要借助于仿真log和波形来定位问题,因此+UVM_VERBOSITY参数会设置更高打印等级,来打印更多的信息。

有些人遇到使用+UVM_VERBOSITY传递不同打印等级时,问题会无法复现。这可能和验证环境中用户直接使用了uvm_report_enabled()函数有关系,它可能会导致验证环境的随机状态发生改变,进而影响仿真结果。

2. 问题解释

uvm_report_enabled()函数定义如下:

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()函数比较关键的参数是verbosity,如果当前组件配置的打印等级大于等于verbosity的值,那么uvm_report_enabled()函数返回1;反之,则返回0。

根据uvm_report_enabled()函数返回1还是0,有些用户把uvm_report_enabled()函数用作判断条件,例如:

if ( uvm_report_enabled(UVM_MEDIUM) ) begin
    // execute randomization block_A
end
else begin
    // execute randomization block_B
end

代码解释:如果组件的打印等级大于等于UVM_MEDIUM,则执行randomization block_A;反之,则执行randomization block_B。

这里就涉及到不同打印等级情况下,仿真会执行不同的语句,一旦这些不同的语句所产生的随机状态不一致,就会破坏原先的随机状态,进而影响后续所有代码的随机状态,所以仿真可能会无法复现问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷公子的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值