SystemVerilog验证-验证导论-2
当考虑对一个设计的激励进行随机化时,可能第一个就会想到是数据字段,这种激励最容易创建——只需要调用$random()即可。问题是这种随机数据在找漏洞方面的回报很小,能够使用随机数据找到的漏洞类型基本上都是在数据路径上,很可能都是比特级的错误,需要找出控制逻辑上的漏洞。此外,需要广泛地考虑所有的设计输入:
- 设备配置
- 环境配置
- 输入数据
- 协议异常
- 错误和违例
- 时延
在对RTL设计进行测试的过程中,察觉不到漏洞的最常见的原因是因为没有尝试足够多的不同配置。很多测试只使用了仅仅经过复位的设计,或者施加固定的初始化向量集把设计引向一个已知的状态。这就好比是在个人电脑上刚刚安装完操作系统,还没有安装任何应用程序的时候就对操作系统进行测试。测试结果当然会根号,但是没有挖掘出实际的问题。
在一个实际的应用环境中,随着待测试设计使用时间的增加,其配置会变得越来越随机。设备所在的环境会包含其他的部件,当对待测试设计进行验证时,实际上就是把测试平台连接起来模仿这个环境。所以应该对整个环境的配置进行随机化,包括仿真的时长、设备的数量,以及它们的配置方式,并且创建约束以确保配置的合法性。
设备死机最有可能的原因是产品内部的一部分逻辑遇到错误后无法恢复过来,所以要尽量尝试去仿真在实际的硬件中可能出现的错误。使用断言去确保在出错的地方停止仿真。
使用受约束的随机时延有助于捕捉协议上的漏洞,