第一章形式验证概念导论

什么是形式验证(Formal Verification)

形式验证是一种通过数学方法穷尽证明设计是否满足给定属性的验证技术。与传统的仿真验证(Simulation)不同,形式验证不需要编写测试用例(testbench),而是通过算法遍历设计的所有可能状态空间,从数学上证明属性成立,或找到违反属性的反例(counterexample)。

形式验证的核心优势在于穷尽性:仿真只能覆盖有限的输入组合,而形式验证可以覆盖所有可能的输入序列和状态组合。这使得形式验证特别适合发现那些边角情况下的深层 bug。

关键概念

模型检测(Model Checking)

模型检测是形式验证的核心技术。它将硬件设计建模为状态转换系统(有限状态机),然后使用 SAT(可满足性)或 BDD(二元决策图)等算法,自动检查系统是否满足用时序逻辑表达的属性。

属性(Property)

在 JasperGold 中,属性分为三类:

三者关系:assertion 检查设计输出是否正确,assumption 约束输入环境,cover 确认关键场景被覆盖。

证明结果

运行证明后,每个属性会得到以下状态之一:

状态含义
proven证明成功:属性在所有可达状态下都成立(full proof)
failed证明失败:找到了违反属性的反例(counterexample trace)
bounded有界证明:在设定的时间边界(trace length)内成立,但未证明完整(partial proof)
unknown未知:引擎超时或资源不足,无法确定

有界模型检测(BMC)

有界模型检测将证明问题展开为 k 个时间步长内的 SAT 问题。它寻找长度不超过 k 的反例。增大 k 可以增加信心但不能完全证明(除非 k 超过了 completeness bound)。

其他核心术语

形式验证 vs 仿真验证

特性仿真验证形式验证
覆盖方式有限测试向量穷尽所有状态
需要 Testbench否(用断言+约束)
发现 Bug 类型取决于测试质量深度逻辑 bug、边界情况
运行时间随覆盖率线性增长受状态空间爆炸限制
适用场景系统级、数据通路控制逻辑、协议、仲裁、FIFO
互补关系形式验证和仿真验证互补使用,形式验证处理控制密集模块,仿真处理数据通路和系统集成

来源文档

  • glossary.pdf
  • jaspergold_apps_userguide.pdf