验证覆盖率

验证覆盖率试图回答这个问题:“你怎么知道你已经完成了验证?”实际上,覆盖率只能提供部分答案,但合理使用覆盖策略和指标可以为SoC设计团队提供对取得进展的充分认识。

目前在众多团队中使用的战略是将尽可能多的覆盖数据输入到一个统一的数据库中,这些统计数据库可以被各种用户和工具查询,以提供仪表盘功能,显示朝向给定目标的进展情况或勾画出部分设计需要更全面的运用。设计范围的数据库和访问软件的一个例子是Cadence Design Systems的vManager。


验证数据库(如Cadence vManager)允许多用户访问覆盖率数据

覆盖率可以用许多不同的方式来衡量。最常见的是代码覆盖率,这是一种软件和硬件开发的通用技术。硬件代码覆盖范围涉及从仿真记录统计信息,即代码中特定语句执行的次数(如果有的话)。这种覆盖形式对隔离无法访问的代码是有效的,这些代码可能表明存在冗余块,例如设计中不需要的重用IP块中的功能,访问重要功能的访问尚未正确实施,或者测试平台没有执行代码。

代码覆盖率是实现和理解最简单的覆盖率之一,但是可能会扭曲设计的完备度,因为简单地执行几次声明不太可能探索可能表明异常行为的边界条件。代码覆盖率有许多不同的变体,从单独的语句执行到遍历完整的逻辑路径。

代码覆盖技术
语句覆盖范围与块或段覆盖范围相似但不相同,其中测量的代码单元是在单个仿真刻度内执行的非分支代码序列。

决策覆盖也用于高可靠性软件的覆盖范围,用于衡量if或case语句的每个分支的覆盖范围。由于存在隐含的其他条件,比如if(reset)可以用来确保输出在复位后被设置为已知值,但是输出保持不变该代码在正常情况下执行。如果仿真仅执行复位条件,则报告覆盖范围将报告全部覆盖范围,而决策覆盖范围将认识到隐含其他内容的存在。

路径覆盖是对决策覆盖范围的扩展,因为它将一系列决策视为通过一部分逻辑的路径。


覆盖管理人员显示模块的哪些部分已经被执行(来源:Cadence)

可以将表达式覆盖率视为语句覆盖范围的更细化形式,检查如何评估变量或子表达式。这样做的一个典型用途是用于具有多个输入的复杂逻辑评估,以测试组合是否符合设计意图和正确的激励,并执行覆盖表达式的真值表。

覆盖范围的另一种流行形式是有限状态机(FSM)实现。这考察了刺激在模拟过程中穿越状态转换图的能力。与路径覆盖一样,FSM覆盖率可能会随着大型状态空间而变得非常复杂。

其他技术包括基于可观察性的覆盖率,切换覆盖率和可变覆盖率,以及断言驱动和功能覆盖。

在非常低的水平下工作 - 即个别位 - 切换覆盖范围适合门级分析,但已成为功率分析工具的主要组成部分。可变覆盖范围是对切换覆盖范围的扩展,它将比特分为更大的变量。此分析的覆盖度量指标已经访问了变量的哪些值。

覆盖互操作性

硬件验证中的代码覆盖从仿真开始。近年来,趋势是扩大覆盖面的使用范围,以涵盖更多种工具,例如形式化验证程序,可以在仿真时间的一小部分时间内完成整个模块,或者通过集成到单个公司流程或通过标准如Accellera于2012年中发布的统一覆盖互操作性标准(UCIS)。

可以将数据提供给公共覆盖数据库的其他工具和技术包括静态RTL分析(也称为linting)和基于图形的验证。

猜你喜欢

转载自blog.csdn.net/zhajio/article/details/80620202