一、覆盖率类型
- 覆盖率是衡量设计验证完备性的一个通用词语。
- 随着测试逐步覆盖各种合理的组合,仿真过程过程会慢慢勾画你的设计情况。
- 覆盖率工具会在仿真过程中收集信息,然后进行后续处理并且得到覆盖率报告。
- 通过这个报告找出覆盖之外的盲区,然后修改现有测试或者创建新的测试来填补这些盲区。
- 这个过程可以一直迭代进行,直到你对覆盖率满意为止。
1.1 覆盖率反馈回路
- 可以使用一个反馈回路来分析覆盖率的结果,并决定采取哪种行动来达到100%的覆盖率。
- 首先的选择是使用更多的种子来运行现有的测试程序。
- 当大量种子依然对覆盖率增长没有帮助时,需要建立新的约束。
- 只有在确实需要的时候才会求助于创建定向测试。
1.2 覆盖率类型
1.2.1 代码覆盖率
-
不添加任何额外的HDL代码,工具会通过分析源代码和增加隐藏代码来自动完成代码覆盖率的统计。
-
当运行完所测试,代码覆盖率工具便会创建相应的数据库。
-
仿真器都带有代码覆盖率的工具,覆盖率数据也可被转换为可读格式。
-
行覆盖率:多少行代码已被执行过。
-
路径覆盖率:在穿过代码和表达式的路径中有哪些已经被执行过。
-
翻转覆盖率:哪些单位比特变量的值为0或1。
-
状态机覆盖率:状态机哪些状态和状态转换已经被访问过。
-
代码覆盖率最终的结果用于衡量你执行了设计中的多少行代码。
-
关注点应该放在设计代码的分析上,而不是测试平台。
-
未经测试的设计代码里可能隐藏硬件漏洞,也可能仅仅就是冗余的代码。
-
代码覆盖率衡量的是测试对于硬件设计描述的“实现”究竟测试得有多彻底,而非针对验证计划。
-
代码覆盖率达到100%,并意味着验证得工作已经完成,但代码覆盖率100%是验证工作完备性的必要条件。
1.2.2 断言覆盖率
- 断言是用于一次性地或在一段时间对一个或者多个设计信号在逻辑或者时序上的声明性代码。
- 断言可以跟随设计和测试平台一起仿真,也可以被形式验证工具所证实。
- 断言常用于查找错误,例如两个信号是否应该互斥,或者请求与许可信号之间的时序等。
- 一旦检测到问题,仿真就可以立即停止。
- 有些断言可以用于查找感兴趣的信号值或者设计状态。
- 可以使用cover property来测量这些关心的信号值或者状态是否发生。
- 在仿真结束时,仿真工具可以自动生成断言覆盖率数据。
- 断言覆盖率数据以及其他覆盖率数据都会被集成在同一覆盖率数据库中,verifier可以对其展开分析。
1.2.3 功能覆盖率
- 验证的目的就是确保设计在实际环境中的行为正确。