一、验证基础:什么是电路验证?

说实话,我刚入行那会儿,也搞不清「验证」和「测试」到底有啥区别。

老板让我去写 testbench,我就写了。让我去跑仿真,我也跑了。

但直到有一次,一个 bug 在流片后才被发现——芯片回来,功能全乱套。那叫一个惨。

从那以后我才真正明白:验证,是芯片设计里最不能省的一环。

1.1 什么是电路验证?

电路验证,说白了就是一件事:确保你的设计,跟你的想法一致。

你写了一段 Verilog,你觉得它应该输出 1。但实际跑出来是不是 1?

验证就是帮你回答这个问题的。

核心定义:电路验证是通过仿真、形式化分析等手段,检查 RTL 设计是否满足功能规格要求的过程。

我个人的习惯是,把验证看作「设计质量的守门员」。没有验证,你根本不敢说你的芯片能用。

1.2 验证在芯片开发流程中的位置

芯片开发流程,大致分这么几步:

  1. 需求定义——要做什么功能?
  2. 架构设计——怎么实现?
  3. RTL 编码——写 Verilog / VHDL
  4. 功能验证——检查 RTL 对不对
  5. 逻辑综合——转成门级网表
  6. 后端实现——布局布线
  7. 流片——送去制造
  8. 测试——芯片回来测

你看,验证在第 4 步。但它不是做完就完了。

实际上,验证贯穿整个前端设计流程。每改一次代码,都要重新验证。

我的经验:我在项目中遇到过,有人觉得「代码写完了再验证就行」。结果呢?一个 bug 拖了三天才定位到。其实如果边写边验,半小时就能搞定。

1.3 验证与测试的区别

这个问题,我几乎每次面试都会问新人。

很多人答不上来。或者答「验证是仿真,测试是实测」——也对,但不全对。

咱们用一张表说清楚:

对比项 验证 (Verification) 测试 (Testing)
时间点 流片前 流片后
对象 RTL 代码 / 网表 实际芯片
目的 找设计 bug 找制造缺陷
手段 仿真、形式化验证 ATE、示波器、逻辑分析仪
可重复性 完全可控 受环境影响

你想想看,验证是在「虚拟世界」里找问题。测试是在「真实世界」里找问题。

两者缺一不可。

注意:千万不要以为验证做得好,测试就可以省了。我曾经见过一个项目,验证覆盖率 99%,结果流片回来还是有问题——因为制造工艺偏差,导致某些路径时序不满足。这是验证覆盖不到的。

1.4 为什么验证这么重要?

原因很简单:流片一次太贵了。

28nm 工艺,一次 MPW 就要几十万。7nm 以下,动辄上千万。

如果流片回来发现功能不对,那可不是改一行代码就能解决的。你得重新流片,重新等几个月。

所以业内有个说法:验证工程师的工资,是设计工程师的 1.2 到 1.5 倍。

为什么?因为验证能帮你省钱。省的是流片的钱,是时间,是团队的心血。

一句话总结:验证做得好,芯片才能稳。验证不到位,流片两行泪。

1.5 验证的挑战

嗯,这里要注意一点:验证并不容易。

你可能会遇到这些问题:

  • 状态空间爆炸——一个简单的状态机,组合起来可能有几亿种情况
  • 随机性难控——随机激励虽然好,但复现 bug 时很头疼
  • 覆盖率难收敛——跑到 90% 很容易,从 90% 到 95% 可能要花几周
  • 调试效率低——一个 bug 定位,可能比写代码还费时间

我刚开始做验证时,最怕的就是「仿真跑完了,但不知道对不对」。

后来慢慢学会了用断言、用覆盖率、用形式化工具,才逐渐有了底气。

避坑指南:我曾经犯过一个错——为了赶进度,把验证时间压缩了一半。结果呢?流片前发现一个致命 bug,改完重新验证,反而多花了两周。所以我的建议是:验证时间,只加不减。

1.6 小结

这一章咱们聊了三个核心问题:

  1. 什么是验证?——确保设计符合规格
  2. 验证在哪?——流片前,贯穿前端设计
  3. 验证 vs 测试?——一个找设计 bug,一个找制造缺陷

说白了,验证就是芯片质量的最后一道防线。

你想想看,如果这道防线没守住,后面的一切都是白费。

下一章,咱们聊聊验证的几种主流方法——仿真、形式化、FPGA 原型验证,到底该怎么选。