篇5-testcase pass的判断


资料来源:

(1) 公众号-杰瑞IC验证

1.统计UVM_FATALUVM_ERROR数目

(1) 在uvm_testenvfinal_phase里面,检查UVM_ERRORUVM_FATAL的个数,如果不为0,打印CASE FAIL;否则,打印CASE PASS;

(2) 示例中,之所以采用$display,而不是uvm_fataluvm_info,是因为二者可能会被屏蔽掉(比如冗余度的改变),会影响后期检索;

(3) 之所以不直接排查仿真log里的UVM_ERRORUVM_FATAL,是因为仿真可能在没有uvm_erroruvm_fatal的情况下异常结束,比如超时或磁盘满了,或者提交到服务器的任务被管理员kill;

2.注意排查SVA assertion错误

(1) SVA assertion错误的格式是***Offending***;

3.注意排查随机约束错误

(1) 有些仿真器并不会因为随机失败而提前结束仿真;对于显式的随机约束,最好在randomize前加上assert,并提供合适的display信息;

(2) 对于`uvm_do_with, `uvm_rand_send等内嵌的隐式随机约束,不能直接加assert,需要在仿真log内对随机约束失败进行排查(这种情况下,错误格式会因仿真工具而异);

4.排查参考模型错误

(1) 参考模型里面的打印信息可能没有记录到仿真log,需要在调用参考模型时,将打印信息记录到log,并对log检查;

5.排查类型转换错误

(1) 常见问题是将int变量直接复制给一个枚举变量,类型转换失败;

(2) 解决办法:对不同类型赋值时,尽量使用$cast转换;

6.预防DUT空转

(1) 检查激励有效性;

(2) monitorscoreboard内的关键信号或数据检查进行计数,final_phase里判断这些计数器是否为0;

相关