formal 验证 formal验证是什么使用数学证明不靠仿真激励穷尽合法输入空间来证明属性 (Assertion) 永远成立。formal验证的优势是什么用来弥补仿真覆盖率缺口。什么样的场景适合用formal验证适合数据通路协议 FSM 状态机、控制逻辑、仲裁器、队列、握手协议 (AXI/APB)、计数器、数据校验、状态跳转、安全逻辑、复位逻辑中等规模模块建议模块层级不要直接丢整个 SoC大模块做切分分块 Formal把 RAM/ROM 做抽象模型。用formal验证有哪些注意的地方三种A要怎么写。assume假设约束输入告诉工具哪些输入是合法的不会去验证 assume约束输入空间。assert断言需要工具必须证明永远成立失败给出反例波形。坏事情一定不能发生safety好事情必然发生liveness。cover覆盖点证明存在某种场景可以发生看场景可达性关心的场景一定会发生。将SVA与RTL联系起来有哪两种方式1.bind方式。bind dut_module dut_sva u_dut_sva(.*);优势不污染rtl运行。可以复用sva文件。2.include方式。DUT 内部直接 include SVA不推荐污染 RTL 代码。formal验证环境的准备步骤。1.待测的rtl以及周围隔离的抽象model裁剪无关的逻辑。2.编写sva属性库。assume/assert/cover。assume做合法性约束。约束时序复位合法取值握手时序协议规则等。3.formal验证环境列表和编译配置文件列表包含DUT RTLSVA property 文件.sv包含 assume/assert/cover抽象模型 abs modelFormal 专用编译指令排除仿真代码jaspergold指令blackbox黑盒某些子模块不展开内部状态抑制状态爆炸abstract对存储、寄存器做抽象cutpoint切断部分信号传播边界做边界抽象bound设置证明深度有界模型检查 BMCBMC有界模型检查只证明 N 个时钟周期内属性成立 Prove无界证明证明永远成立算力消耗远大于 BMC。formal环境运行结果有哪些怎么分析proved属性被证明永远成立。Falsified找到反例 Counterexample工具输出波形复现 bug看波形来区分是 RTL bug还是 assume 写的不合理还是 assert 写的不对。修改 RTL / 修改 SVA 属性重新跑 prove。Undetermined状态爆炸算力耗尽无法得出结论需要做抽象、cutpoint、分块。Vacuous空洞 passassume 约束太强条件永远不会触发assert 空洞通过伪通过高危坑。空洞检查是 Formal 环境必做检查一定要看 cover 点是否可达。formal验证如何sign-off所有关键 Safety 属性 Proved关键 Cover 点全部可达无大量 vacuous 空洞Undetermined 的属性做抽象优化或者退而求其次 BMC 有界证明输出 Formal 报告记录 cutpoint、blackbox、抽象假设。formal验证过程中有哪些坑?1.Assume约束错误, 过度约束屏蔽 bugassert 全部 pass实际 RTL 有 bug。用 cover 点校验场景可达性达到双重保障。2.Vacuous 空洞通过条件永远不成立断言 “假的成立”。工具一般有选项打开空洞报告。3.状态爆炸 State Explosion。大 FIFO、RAM、大量寄存器、复杂乘法状态空间爆炸全部 Undetermined。模块切分分块 FormalRAM 抽象、blackboxcutpoint 切断信号路径使用 BMC 有界证明替代无界 prove4.复位处理不当SVA 必须加disable iff(!rst_n)否则复位阶段报虚假 falsified5.Liveness 活性属性证明失败。活性属性证明开销高很多时候需要额外 fairness assume公平假设比如输入不会永远 hold valid。6.仿真与 Formal 两套 SVA维护成本高。使用同一套 SVA既可以 UVM 仿真跑断言也可以 Formal 证明。7.Formal 报反例是不是一定 RTL 有 bug仅说明在当前 assume 约束集合下property 不成立。排查顺序反例的输入激励现实不会出现 →assume 约束问题激励合法RTL 行为符合 spec但断言报错 →property 属性 bug激励合法RTL 行为违反 spec →RTL bug配合jaspergold使用使用visualize打开 counterexample 波形重点看输入信号、property 内部子表达式哪里不满足。可以临时 disable 这条 assert单独检查中间信号行为看 DUT 实际输出是否符合 spec。将 counterexample 导出激励在仿真环境回放如果仿真同样报错大概率 RTL 问题仿真跑出来正常大概率 formal 约束 /property 问题。formal验证举例最近想总结一下看过的代码如有错误欢迎指正。我们从top文件开始看起。top module里总是有dut的例化以及dut和env的连接. 这点跟simulation验证平台一样。formal验证平台的pkg.sv文件包着所有的有关enum和type的定义也可以被其他文件以import pkg::*的方式使用simulation的验证平台是包了所有的验证平台下的文件以及引用的文件使用方式相同。formal验证平台的env里有clockreset的处理以及做的假设assume)interface的例化。agent和scoreboard的例化做补充检查。自己写的做逻辑判断的cover propertyassert property, assume property。设计数据流动的文件 master agent来驱动数据流到interfaceslave agent来监控interface的数据流。agent是经过vip例化出来的。parameter确定好后被放在define文件里。编辑japergold 适用的tcl文件里面有一些常规命令还有自己添加的assume假设assert和 cover应该也可以)。最后由makefile来确定整个验证平台怎么跑。确定好工作路径之后首先vcs编译pass。其次启动jaspergold运行命令。jg -fpv *.tcl这是一个仅用sv搭建的环境还没见过uvm的formal验证环境有机会补充一下。此环境是使用Cadence JasperGold工具来做formal验证也可以使用Synopsys VC‑Formal来做验证。

相关新闻

最新新闻

嵌入式启动流程与OTA升级实战:从MCU到SoC的故障定位与容错设计

嵌入式启动流程与OTA升级实战:从MCU到SoC的故障定位与容错设计

做嵌入式固件这行,最怕的不是需求改版,而是设备上电之后毫无反应、升级升到一半变砖、极端环境下一觉醒来发现远程设备集体失联。最近我把这几年做启动流程、故障定位和OTA升级的工程经验整理成付费专栏连载,本篇是衔接上篇思考题的一期&…

2026/9/8 14:55:13
FPGA 100G光口测试实战:从硬件架构到误码率验收

FPGA 100G光口测试实战:从硬件架构到误码率验收

100G光口测试这件事,放在几年前还是数通大厂验证团队的专属领域,但这两年随着数据中心和AI集群的爆发,FPGA工程师碰100G光模块的机会越来越多。我接手过的项目里,有做交换机线卡的、有做加速卡的、还有做专用测试仪表的,几乎都绕不开光口这一关。这期就把我在FPGA上做100G光口/…

2026/9/8 14:55:13
RK3588+RK1288双芯架构破解机器人智能巡检三大现场挑战

RK3588+RK1288双芯架构破解机器人智能巡检三大现场挑战

做机器人智能巡检方案,最难的不是算法跑不出效果,而是整套系统丢到工业现场之后还能不能稳定扛住。我上一个项目是变电站轮式巡检机器人,实验室里YOLOv8识别率刷到99%,一到现场就翻车:模型推理太慢导致机器人走走停停、…

2026/9/8 14:55:13
嵌入式开发必知:23个关键寄存器清单与调试实战指南

嵌入式开发必知:23个关键寄存器清单与调试实战指南

干了这么多年嵌入式,我有个特别深的体会:很多莫名其妙的问题,绕到最后都出在寄存器上。要么是某个位没置对,要么是配置顺序不对,要么是读的时候没注意影子寄存器。库函数用久了容易产生一种错觉,觉得底层都…

2026/9/8 14:55:13
嵌入式工程师多年经验总结:学习路线、面试与实战避坑指南

嵌入式工程师多年经验总结:学习路线、面试与实战避坑指南

后台收到过很多私信问我嵌入式怎么学、能不能入行、薪资到底怎么样。以前在职的时候,有些话不太方便讲,毕竟顶着公司工程师的身份,说重了怕被觉得在带节奏,说轻了又等于没说。现在手续已经办完,交接文档也交了&#xf…

2026/9/8 14:55:13
opencode 终端AI编程Agent实战:安装配置、插件生态与排错指南

opencode 终端AI编程Agent实战:安装配置、插件生态与排错指南

最近在技术圈里,"opencode"这个名字出现的频率越来越高。不管是推特时间线、Hacker News 首页,还是你加的开发者群里,都有人在讨论这个开源的 AI 编程终端 Agent,而且讨论的角度五花八门:有人问安装报错&…

2026/9/8 14:50:13