热搜词:

为啥芯片设计要做验证, 而不是只写代码就好?

因为芯片算是硬件体系,他并不像系统或者软件可以升级!

毕竟芯片制造是"一次性买卖"。软件写错了可以在线更新,但芯片一旦流片(投入工厂生产),如果发现问题就只能全部报废。台积电一条7纳米产线的流片成本超过1亿美元,验证就是在流片前用"虚拟测试"代替"真实造芯片测试",把风险扼杀在设计阶段。行业里甚至有"验证占整个芯片设计70%工作量"的说法,因为越复杂的芯片(比如CPU、GPU),需要验证的场景就越多。

验证工程师会模拟芯片在各种极端情况下的表现:电压突然波动会怎样?温度从-40℃升到85℃会出问题吗?用户连续点击1000次屏幕会死机吗?

他们还会用"形式验证"这种数学方法,像证明几何定理一样严格检查代码逻辑,确保所有可能的输入组合都能得到正确输出。就像建大桥前要做无数次风洞试验和结构应力分析,芯片验证就是给芯片做"虚拟压力测试"。

而芯片代码,一般用的是 Verilog 或者 VHDL,它描述的是几十亿个晶体管如何协同工作。就拿手机芯片来讲,它得同时处理通话、上网、拍照、玩游戏这些事儿。但人在写代码的时候,特别容易犯一些 “想当然” 的错误。有可能把 “先算加法再算乘法” 写成 “先乘后加”;也可能忽略了某个按键同时按下的情况;又或者没给某个电路留够供电时间。

别小看这些小失误,在几十亿晶体管的规模下,它们会被无限放大,最后直接让芯片功能失效。像手机突然死机、信号断连,甚至发热爆炸这些问题,都可能是因为这些小失误导致的。

最后一点反常识:验证永远不可能找到所有bug。芯片太复杂了,总有设计师没考虑到的"边缘场景"。比如2018年英特尔CPU的"熔断"漏洞,就是因为工程师在设计 speculative execution( speculative execution)时,没考虑到攻击者可以利用缓存侧信道窃取数据。这就是为什么芯片公司会保留"硬件补丁"机制,也解释了为什么新芯片发布后通常会有多个版本迭代——验证能减少bug,但无法做到绝对零缺陷,只能把风险降到可接受范围。