[UVM]你的case真的pass了吗?

299 阅读1分钟

动态仿真是芯片前端验证最常见的手段,通过给DUT施加激励,然后检查输出结果或者内部行为,确保DUT功能和性能的正确性。验证新手经常犯的一个错误是,看到所有case都PASS就觉得万事大吉。
事实上,这个case是真的PASS了吗?
有没有可能是出错了没及时报告?
或者测试激励根本就没有成功注入,DUT根本就没有动起来或者一直在空转?
那么,如何判定一个case是真的PASS了呢?
除了人工查看log和确认波形等手段,Q哥今天主要聊一聊如何根据仿真log自动排查各种假PASS的情况。

1 TestBench错误自检

通常大家会在TestBench里检查到异常行为或者数据比对出错的时候,打印一条错误信息。
尤其是在UVM环境里,使用uvm_error、uvm_fatal、uvm_warning非常方便。
根据这些错误信息,就可以判定Cass PASS或FAIL。
单独跑一个Case的时候,人工查看没有问题。
但是大批量测试的时候,就需要使用脚本来汇总错误,生成测试报告,以及后续处理:比如Case PASS就删除仿真产生的临时文件以便节约磁盘空间,Case FAIL就删除当前case的覆盖率数据,等等。
为了便于脚本自动识别case是否PASS,Q哥比较推荐的做法是如代码片段1所示:在这里插入图片描述
代码片段1 TB错误自检

在uvm_test或者env的final_phase里面,检查UVM_ERROR和UVM_FATAL的个数,如果不