功能覆盖率 是用来衡量哪些设计特征已经被测试程序测试过的一个指标。
使用反馈环路来分析覆盖的结果,并决定采取哪种行动来达到100%的覆盖率。
首要的选择式使用更多的种子来运行现有的测试程序,其次是建立新的约束。只有在确实需要的时候才会创建定向测试。
显式的覆盖率是在测试环境中使用SV特性直接描述的,隐含的覆盖率则是暗藏在测试中。 收集覆盖率数据,可以通过改变随机种子,就可以反复运行同一个随机测试平台来产生新的激励,每一次仿真都会产生一个带有覆盖率信息的数据库,记录随机游走的轨迹。
覆盖率操作流程:
通过分析覆盖率数据可以决定如何修改测试集。
通过仿真器覆盖率数据分析工具你可以:
覆盖率的收集一般只收集设计代码。仿真器都带有代码覆盖率的工具,覆盖率数据也被转换为可读模式。工具会通过分析源代码和增加隐藏代码自动完成代码覆盖率的统计。当完成所有的测试,代码覆盖率工具会创建相应的数据库。
代码覆盖率衡量的是测试对于设计规范的“实现”究竟测试得多彻底,而非针对验证计划,虽然达到100%覆盖率,但是有可能设计代码本身就有缺陷。
功能覆盖率是和设计意图紧密相连的,有时也被称为“规范覆盖率”,而代码覆盖率则是衡量设计的实现情况。如果某个代码块在设计中被漏掉,代码覆盖率不能发现,但是功能覆盖率可以。
衡量覆盖率的一个间接的方式是查看新漏洞出现的比率。
一个项目中的漏洞率:
例如测试一个容量为1K的FIFO存储器,测试它读写地址索引里的数据,这有上百万种可能的组合,只需要成功读出所有的数据即可。设计信号如果数量范围太大的话,应该拆分成小范围再加上边界情形。
收集功能覆盖率数据的开销很大,所以应该只测量将会用到的测试内容。在编译、初始化、触发时刻都能控制覆盖率数据,也可以使用条件编译或者对覆盖率信息的收集实行抑制。
覆盖率比较:
待补充。。。