码电路的张同学
兄弟,我也是验证工程师转学形式的,说点实在的。
工具上,别纠结商业工具了,SymbiYosys 足够入门。它免费,命令行操作,虽然没图形界面,但逼着你理解底层。安装就用包管理器 apt install yosys 就行,或者去官网下预编译的。
数学基础?其实工作中用到的没那么多理论。关键是把 SystemVerilog Assertions (SVA) 搞熟。SVA 就是写属性的语言,里面已经包含了时序逻辑的思想。你找本《SystemVerilog Assertions 应用指南》之类的书,把序列(sequence)和属性(property)的语法,尤其是重叠/非重叠操作符弄明白,这比直接啃时序逻辑教材快多了。当然,了解下 LTL 的基本符号(G, F, U)有帮助,但优先级不高。
什么项目最有用?我强烈推荐从你手头项目里找一个小模块开始。比如一个中断控制器,或者一个简单的 AXI 握手逻辑。形式验证最擅长验证那些“规则明确”的模块:比如“中断屏蔽后,相应中断绝不触发”、“AXI valid 拉高后,在 ready 为高之前不能改变”。这些属性用仿真验证很累,但形式工具能穷举。
设计练习项目的话,我建议搞个经典的双线仲裁器(two-way arbiter)。RTL 就几十行。然后写属性:互斥(两个许可不能同时为高)、无饥饿(每个请求最终都会被响应)。用 sby 跑,试着改坏 RTL,看看工具能不能抓出来。这个过程会让你立刻体会到形式验证的威力。
常见坑:一开始总想验证整个模块的所有行为,结果属性复杂到跑不完。记住,形式验证是“属性驱动”的,一个属性只检查一个具体行为。从最简单的安全属性(坏事永不发生)开始,再逐步加活跃属性(好事最终发生)。
还有,开源工具的报告可能不如商业工具友好,反例波形要用 GTKWave 之类的查看,多练几次就熟了。别被吓退,坚持一个月,你就能在项目里实际用上了。
