Verification -- Basic Concepts ~ 5. Assertion Based Verification
Assertion Based Verification
基于断言的验证(ABV)是一种将断言用作验证数字设计正确性的主要手段的技术。断言是描述在设计中必须始终为真的条件的语句,通常使用硬件描述语言(如 SystemVerilog 或 VHDL)编写。
ABV 背后的基本思想是结合使用功能和形式验证设计是否满足其功能要求。SystemVerilog 断言
用于定义设计的预期行为,形式验证技术用于检查设计在所有可能的条件下是否满这些断言。
ABV 可用于设计过程的各个阶段,包括设计验证、模块级验证和全芯片验证。通过使用断言作为验证设计的主要手段,ABV 可以帮助减少验证所需的时间和精力,同事提高设计的质量和可靠性。
Example
基于断言的验证的一个示例是验证 FIFO 设计的正确性。
假设我们有一个宽度为 8 位,深度为 16 位的 FIFO。该设计具有读取和写入指针来跟踪数据。为了验证设计,我们可以通过编写断言来检查以下内容,从而使用基于断言的验证:
- 写入指针不应该环绕并覆盖有效数据
- 读取指针不应环绕并读取过时的数据
- FIFO中的元素量不应超过FIFO的深度
- 当FIFO已满时,不应允许写入操作
- 当FIFO为空时,不应允许读取操作
这些断言可以用 SystemVerilog 断言
(SVA)语法编写,并应用在仿真过程中自动验证设计。通过使用基于断言的验证,我们可以比传统的基于仿真的验证更全面、更高效地验证设计。
assert property (@posedge clk) disable iff (!rst_n)
(in_fifo_wr && !in_fifo_full) ##[1:$] !in_fifo_empty && !in_fifo_wr);
此断言检查当写入使能信号in_fifo_wr
为高电平且FIFO未满!in_full_full
时,则至少应有一个周期,其中FIFO不为空!in_fifo_empty
,写入使能信号为低!in_fifo_wr
。禁用iff !rst_n
条件可确保在重置期间禁用断言。
局限性
基于断言的验证的一些限制包括:
- 范围有限:断言仅检查设计的特定方面,可能无法提供设计行为的完整图片。
- 耗时:编写断言可能是一个耗时的过程,尤其是对于复杂的设计。编写和调试复杂的断言需要付出巨大的努力。
- False negatives and false positives:断言可能会产生误报(即使设计正确,断言也会失败)或误报(即使设计不正确,也会通过的断言)。这些问题可能难以诊断和纠正。
- 覆盖范围不完整:断言可能无法涵盖所有可能的设计方案和极端情况。
- 有限的调试:调试断言中的失败可能很困难,因为断言通常是自动执行的,并且不提供有关出错的详细信息。
- 对传统设计的有限支持:传统设计在设计时可能没有考虑到基于断言的验证,并且肯能没有必要的检测来支持它。