数字验证学习笔记——SystemVerilog芯片验证21 ——覆盖率类型

一、覆盖率类型

  • 覆盖率是衡量设计验证完备性的一个通用词语。
  • 随着测试逐步覆盖各种合理组合,仿真过程过程会慢慢勾画你的设计情况。
  • 覆盖率工具会在仿真过程中收集信息,然后进行后续处理并且得到覆盖率报告
  • 通过这个报告找出覆盖之外的盲区,然后修改现有测试或者创建新的测试来填补这些盲区。
  • 这个过程可以一直迭代进行,直到你对覆盖率满意为止。

1.1 覆盖率反馈回路

数字验证学习笔记——SystemVerilog芯片验证21 ——覆盖率类型_第1张图片

  • 可以使用一个反馈回路来分析覆盖率的结果,并决定采取哪种行动来达到100%的覆盖率。
  • 首先的选择是使用更多的种子来运行现有的测试程序。
  • 当大量种子依然对覆盖率增长没有帮助时,需要建立新的约束
  • 只有在确实需要的时候才会求助于创建定向测试。

1.2 覆盖率类型

1.2.1 代码覆盖率

  • 不添加任何额外的HDL代码,工具会通过分析源代码和增加隐藏代码来自动完成代码覆盖率的统计。

  • 当运行完所测试,代码覆盖率工具便会创建相应的数据库

  • 仿真器都带有代码覆盖率的工具,覆盖率数据也可被转换为可读格式

  • 覆盖率:多少行代码已被执行过。

  • 路径覆盖率:在穿过代码和表达式的路径中有哪些已经被执行过。

  • 翻转覆盖率:哪些单位比特变量的值为0或1。

  • 状态机覆盖率:状态机哪些状态和状态转换已经被访问过。

  • 代码覆盖率最终的结果用于衡量你执行了设计中的多少行代码。

  • 关注点应该放在设计代码的分析上,而不是测试平台。

  • 未经测试的设计代码里可能隐藏硬件漏洞,也可能仅仅就是冗余的代码。

  • 代码覆盖率衡量的是测试对于硬件设计描述的“实现”究竟测试得有多彻底,而非针对验证计划。

  • 代码覆盖率达到100%,并意味着验证得工作已经完成,但代码覆盖率100%是验证工作完备性的必要条件

1.2.2 断言覆盖率

  • 断言是用于一次性地或在一段时间对一个或者多个设计信号在逻辑或者时序上的声明性代码。
  • 断言可以跟随设计和测试平台一起仿真,也可以被形式验证工具所证实。
  • 断言常用于查找错误,例如两个信号是否应该互斥,或者请求与许可信号之间的时序等。
  • 一旦检测到问题,仿真就可以立即停止
  • 有些断言可以用于查找感兴趣的信号值或者设计状态。
  • 可以使用cover property来测量这些关心的信号值或者状态是否发生。
  • 在仿真结束时,仿真工具可以自动生成断言覆盖率数据。
  • 断言覆盖率数据以及其他覆盖率数据都会被集成在同一覆盖率数据库中,verifier可以对其展开分析。

1.2.3 功能覆盖率

  • 验证的目的就是确保设计在实际环境中的行为正确。
  • 功能描述文档详细说明了设计应该如何运行,而验证计划则列出了相应的功能应该如何激励、验证和测量。
  • 当你收集数据希望找出那些功能已经被覆盖时,你其实就是在计算“设计”的覆盖率。
  • 功能覆盖率是和功能设计意图紧密相连的,有时也被称为“描述覆盖率”,而代码覆盖率则是衡量设计的实际情况。
  • 某个功能在设计中可以被遗漏,代码覆盖率不能发现这个错误,但是功能覆盖率可以。
    数字验证学习笔记——SystemVerilog芯片验证21 ——覆盖率类型_第2张图片
    功能覆盖率收集的前提是测试用例要通过。
  • 如果覆盖率在稳步增长,那么添加新种子或者加长测试实际即可。
  • 如果覆盖率增速放缓,那么需要添加额外的约束来产生更多“有意思”的激励。
  • 如果覆盖率停止增长,然后设计某些测试点没有被覆盖到,那么就需要创建新的测试了。
  • 如果覆盖率为100%但依然有新的设计漏洞,那么覆盖率可能没有覆盖到设计中的某些设计功能区域。

你可能感兴趣的:(验证学习,SV,学习)