在我们平常的验证过程中,有这样的一种问题存在:一个测试激励根本没有测试到我们期望的测试点,但是在仿真的过程中也没有出现严重的错误,从头到尾仿真正常的结束,那么我们一般会认为它仿真通过了,在我们收集覆盖率之前我们一般不会发现它其实根本什么都没有做,只是假装仿真通过,今天我们介绍一种克服这种问题的办法,利用SV的断言API接口链接上UVM的测试平台来动态监测我们测试激励的实际仿真情况,如果没有打到测试点,就结束仿真,让这个测试激励不通过,这样不仅可以减少仿真时间的浪费,还可以减少不必要的覆盖点的增加
一般我们都是利用SV断言来检测设计代码的执行质量,但在这篇文章中我们来介绍怎么利用SV断言检测测试代码的质量,我们会通过一个例子来介绍怎么去写监测测试激励的代码并且把它和我们的UVM测试平台链接起来,我们利用断言来检测测试代码质量的目的是为了检验测试激励仿真过程中有没有测试到我们期望的那些点,这和我们的断言覆盖率分析报告很像,只不过我们针对的是单个的测试激励,当然利用SV断言来进行测试激励的检测技术不仅可以让我们挑出那些无作为的测试激励,还可以根据SV断言的反馈情况来调整我们测试激励的输入,以达到比较高的覆盖率
下面我们具体看看它怎么实现,在这个例子中,我们假设要测试的设计模块是一个仲裁模块,它有三个输入,三个输出如下图:
为了帮助验证这个模块,可能验证工程师已经已经有针对性的写了以下断言,如下图:
这些断言的用处在于如果仲裁模块发生了不合法的行为,它就会让我们的测试激励仿真失败,但它却
并不能指出测试激励是否正确的测试了仲裁模块,也就是说我们对于仲裁模块的使用合理不合理,如果你的测试激励的测试点是同时拉高三个req信号,那么上面的断言并不能告诉你,你的测试激励在仿真过程中到底有没有测试到这一点,为了验证有没有测试到你还需要加上下面的断言: