芯片设计的第一大块,叫前端设计。这里的“前端”不是网页前端,而是芯片逻辑设计的前半段。它解决的核心问题很简单:这颗芯片到底要实现什么功能?比如一颗 AI 芯片,要不要支持矩阵乘法?缓存多大?数据从哪里来、到哪里去?控制逻辑怎么调度?外设接口怎么通信?这些问题,都要先在架构层面想清楚。然后工程师会用 Verilog、SystemVerilog、VHDL 这类硬件描述语言,把电路行为描述出来。注意,这里虽然看起来像写代码,但它和普通软件开发不是一回事。软件代码描述的是程序怎么一步步执行,硬件描述语言描述的是电路本身长什么样。比如软件里写一个加法,是让 CPU 去执行加法指令;硬件里写一个加法,最后可能真的会综合出一组加法器电路。软件是“让已有硬件去干活”,芯片设计是“把硬件本身造出来”。这就是芯片前端设计最特殊的地方。写完 RTL 之后,还不能说设计完成了。因为芯片一旦流片,成本极高,不可能像软件一样线上发个补丁就修好。所以前端阶段要做大量仿真和验证。验证工程师会构造各种场景,正常/异常、极限/边界,把设计反复拷打一遍。复位之后状态对不对?接口协议有没有违反?输入数据异常时会不会卡死?计数器会不会溢出?状态机会不会跑飞?这些问题如果前端没抓住,后端做得再漂亮也没用。因为逻辑错了,芯片从根上就是错的。所以前端设计的目标不是把芯片“画出来”,而是先证明:这颗芯片在逻辑上是成立的。
芯片设计里有一个非常关键的概念,叫时序。普通人看芯片,容易觉得只要功能对就可以。其实不够。芯片不仅要算对,还必须在规定时间内算完。比如一颗芯片目标频率是 1GHz,一个时钟周期就是 1ns。数据从一个寄存器出发,经过中间的组合逻辑,再到达下一个寄存器,必须在这个周期内稳定下来。如果数据来晚了,下一个寄存器采到的可能就是错误值。这叫 setup violation,建立时间违例。反过来,如果数据来得太快,旧数据还没保持够时间,新数据就冲过来了,也会出问题。这叫 hold violation,保持时间违例。可以把它理解成接力赛。第一棒把接力棒交给第二棒,不能太晚,也不能太早。太晚,比赛节奏断了;太早,第二棒还没准备好,也会乱。EDA 的静态时序分析工具,就是芯片世界里的裁判。它会检查海量路径,告诉工程师哪条路径太慢,哪条路径太快,哪些路径在高温低压下有风险,哪些路径在工艺波动下可能过不了频率。现代芯片里的路径数量极其庞大,靠人眼看根本不可能。所以芯片工程师不是拍脑袋说“我觉得能跑”,而是要靠 STA 把路径算出来。能不能过频率,工具报告说了算;哪里不过,工程师根据报告继续改。这也是芯片设计和普通写代码很不一样的地方。代码能跑,不代表硬件能稳定跑;功能对,不代表时序一定对。时序不过,芯片可能仿真没问题,但上板之后就会随机出错,甚至在某些温度、电压、工艺角下才暴露问题。这种问题最难查,也最要命。
六、功耗:芯片不能只追求性能,还得控制吃电和发热
现在做芯片,功耗已经不是附加题,而是主线题。手机芯片功耗高,用户感受到的是发烫和掉电快;服务器芯片功耗高,数据中心感受到的是电费和散热压力;车规芯片功耗和热控制不好,长期可靠性也会受影响。EDA 在功耗分析里要看的东西很多。动态功耗来自电路翻转。信号切换越频繁,负载电容越大,频率越高,动态功耗越高。静态功耗主要来自漏电,尤其先进工艺下,漏电问题会越来越敏感。除了总功耗,还要看电源完整性。比如 IR Drop,也就是压降。电流从电源网络流到芯片各处,如果电源网络不够强,某些区域电压会掉下去。电压一掉,门电路速度就变慢,原本能过的时序可能突然不过。这就像城市供电。总发电量够,不代表每个小区电压都稳。某个区域线路太细、负载太大,照样会出现电压不足。EDA 工具要帮助工程师分析哪里电流大,哪里电源网薄,哪里可能发热,哪里需要加宽金属线、增加电源通孔、调整模块位置。所以功耗不是后面随便“优化一下”就能解决的东西。它从架构、RTL、综合、后端一路贯穿到底。一个成熟团队不会等版图快做完了才想起功耗。那时候再救,很多问题已经救不动了。