覆盖率类型
什么是覆盖率?覆盖率是衡量设计验证完备性的一个通用词语,覆盖率工具会在仿真过程中收集信息,通过后续处理得到覆盖率报告,通过这个报告会找到覆盖之外的盲区。采取后续修改测试或者创建新的测试可以填补这些盲区,这是一个可以不断迭代的过程,直到覆盖率达到我们的要求为止。
可以使用一个反馈回路来分析覆盖率的结果,并决定采取哪种行动来达到百分百的覆盖率,优先考虑的是使用更多的种子来运行现有的测试程序,如果更多的种子对覆盖率增长没有帮助的时候,就需要建立新的约束,只有在必要的时候才会使用创建定向测试。
代码覆盖率
不添加任何额外的HDL代码,工具会通过分析源代码和增加隐藏代码来自动完成代码覆盖率的统计,测试完成以后代码覆盖率工具便会创建相应的数据库,覆盖率数据被转换为以下的可读格式。代码覆盖率是衡量验证进展的最简易的方式。
行覆盖率:多少行代码已经被执行。
路径覆盖率:在穿过代码和表达式的路径中有哪些被执行过。
翻转覆盖率:哪些单位比特变量的值为0后者为1。
状态机覆盖率:状态机有哪些状态和状态转换已经被访问过。
代码覆盖率的最终结果用于衡量执行了设计中的多少代码,所以关注点应该放在设计代码的分析上,而不是测试平台。没有经过测试的代码可能含有隐藏的硬件漏洞,即使代码覆盖率到达了百分百,也并不意味着验证工作的完成,但是代码覆盖率达到百分百是验证工作性的必要条件
断言覆盖率
断言覆盖率是用于一次性的或者一段时间对一个或者多个设计信号在逻辑上或者时序上的声明性代码,断言最常用于查找错误,例如两个信号是否应该互斥,或者请求与许可信号之间的时序等等,一旦检查到问题,仿真就会立刻停止。
有些断言可以用于查找感兴趣的信号值或者设计状态,可以使用cover property来测量这些感兴趣的信号值或者状态是否翻转。仿真结束以后,仿真工具可以自动生成断言覆盖率数据,断言覆盖率数据和其他覆率数据会被集成在同一个覆盖率数据中。
漏洞率曲线
在开始创建测试的时候,通过观察就可以发现很多漏洞,当设计逐渐稳定的时候,就需要利用自动化的检查方法来协助发现可能的漏洞,即使在临近流片的时候漏洞率会下降,有望为零,但是验证工作仍然不能结束。每当漏洞率下降的时候,就应该寻找各种不同的方法去测试可能的边界情况。楼浮动率每周都会不同,这和很多因素相关。
功能覆盖率
验证的目的就是确保设计在实际环境中的行为正确,验证计划列出的相应功能应该如何激励、验证和测量都应该和功能描述文档相匹配,收集哪些功能已经被覆盖其实就是在收集设计的覆盖率。如果某个功能在设计中被遗漏,代码覆盖率可能发现不了这个问题,但是功能覆盖率可以发现。改进功能覆盖率一个简单的方法是仅仅增加仿真时间或者尝试新的随机种子。

覆盖率是衡量设计验证完备性的重要指标,包括代码覆盖率和功能覆盖率。代码覆盖率关注执行的代码行数、路径、翻转和状态机状态,而功能覆盖率则侧重验证设计功能的全面性。覆盖组和coverpoint是收集覆盖率数据的关键,通过交叉覆盖率和条件覆盖率可以更细致地评估设计。在验证过程中,应不断优化测试,确保达到预设的覆盖率目标。
最低0.47元/天 解锁文章
2026

被折叠的 条评论
为什么被折叠?



