功能覆盖率
随着各种设计变得越来越复杂,采用受约束的随机测试方法(CRT)是对它们进行全面验证的唯一有效途径。无论是随机的还是定向的激励,都要使用覆盖率来度量测试进行的程度。
覆盖率的类型
覆盖率是衡量设计验证完成程度的一个通用词。随着测试逐步覆盖各种合理的组合,仿真过程会慢慢勾画出你的设计情况,覆盖率工具会在仿真过程中收集信息,然后进行后续处理并得倒覆盖率报告。通过覆盖率报告找出覆盖率盲区,然后修改现有测试或者创建新测试来填补这些盲区。这个过程一直迭代进行,直到你对覆盖率满意为止。
代码覆盖率
衡量验证进展的最简易的方式是使用代码覆盖率。这种方式衡量的是多少行代码已经被执行过。代码覆盖率衡量的是测试对于设计规范的“实现”究竟测试得有多彻底,而非针对验证计划。
功能覆盖率
验证的目的就是确保设计在实际环境中的行为正确。设计规范里详细说明了设备应该如何运行,而验证计划里则列出了相应的功能应该如何激励、验证和测量。
功能覆盖率是和设计意图紧密相连的,有时也称为”规范覆盖率“,而代码覆盖率则是衡量设计的实现情况。
漏洞率
衡量覆盖率的一个间接的方式是查看新漏洞出现的比率。
断言覆盖率
断言是用于一次性地或一段时间内核对两个设计信号之间关系的声明性代码。它可以跟随设计和测试平台一起仿真。
功能覆盖率策略
在动手写测试代码之前,你需要预先弄清楚相关设计的关键特性、边界情形和可能故障模型。这其实就是验证计划的内容。
(1) 收集信息而非数据
(2) 只测量你将会使用到的内容
(3) 测量的完备性
参考文献:
[1] Chris Spear. SystemVerilog验证测试平台编写指南. 科学出版社. 2009,09.