一颗芯片从代码变成可以流片的版图,要经过一条漫长的后端流程:综合、布局规划、布局布线、时钟树综合、时序签核、物理验证,每一步都可能把前面做的推倒重来。了解哪些步骤最容易返工,对前端设计者和后端工程师的协作都很有帮助。

综合是第一道关口,硬件描述语言被翻译成门级网表。这个阶段最容易出的问题是代码风格导致的综合结果失控:比如无意中推断出锁存器、组合逻辑环路、或者用了综合工具不支持的写法。综合出来的网表如果面积和时序已经偏离目标,后面布局布线再努力也很难完全补回来。好的做法是在综合阶段就把时序约束写清楚,让综合工具在正确的目标下优化,而不是等到最后才发现方向错了。

布局规划和布局布线是返工的重灾区。布局规划要决定宏单元的位置、电源网络的走向和布线通道的预留,任何一个决定失误都会在布线阶段放大成拥塞。布线拥塞最常见的原因是局部逻辑密度过高,或者关键信号的走线需求被低估。一旦拥塞严重,就需要回到布局阶段调整,甚至修改前端逻辑来打散热点。时序收敛也是类似的循环:关键路径修不掉时,可能要调整布局、插入缓冲器、甚至重新做时钟树。

时钟树综合值得单独说一说。时钟信号要同时到达成千上万个触发器,偏差和抖动都要控制在很小的范围内。时钟树做得不好,表现为建立时间和保持时间违例此起彼伏,修了一处又冒出另一处。根本原因常常在前端:时钟域划分不合理、跨时钟域路径没有处理好,这些问题拖到后端才暴露,修复成本会成倍增加。

最后是签核阶段的物理验证,包括设计规则检查和版图与原理图一致性检查。这个阶段发现的问题大多是细节问题,比如最小间距违例、天线效应、金属密度不达标。单个问题不难修,但如果数量太多、分布太散,修复过程可能引入新的时序问题,需要重新跑签核,形成反复迭代。

减少返工的核心经验其实很朴素:约束要早定、接口要早冻结、跨时钟域要早处理。前端设计时多考虑一分后端实现的可行性,后端返工的次数就能少很多。芯片设计是典型的系统工程,前后端的墙越早打破,流片的时间表就越可控。