签核与验证

工程变更指令(ECO)

把芯片想象成一栋已经盖好的公寓楼。墙立起来了,电线也都布好了,验收的人马上就到——这时你发现有一个插座装错了位置。你不会把整栋楼推倒重来,而是只敲开那一面墙,把那一个插座挪过去、补好,再把验收的人请回来。工程变更指令,也就是 ECO,就是这种在收尾阶段做的外科手术式修补。当你的网表已经布局、时钟已经分发、每根线都已布通、寄生参数也已提取并通过静态时序分析(STA)检查之后,往往还会有几条路径差一点没满足时序,或者冒出一个微小的设计规则(DRC)违例。如果把整个布局布线(place-and-route)从头重做一遍,已经做好的一切都会被打乱,还要白白耗上好几天。所以你只动出问题的那一小块:把一个慢的单元换成更快、更大的单元,插进一两个 buffer,或者重新布几根线,让其余上百万个单元原地不动。

诀窍在于把影响范围(blast radius)压到最小。要修一条 setup(太慢)路径,你得让它跑快些——把弱的门电路升尺寸(upsize),或者加 buffer 让一根长线被驱动得更有劲;要修一条 hold(太快)路径,你则要刻意增加延迟,插入 buffer 或延迟单元。随后工具做一次增量式布局布线(incremental place-and-route),只把这些新增或移动的单元合法化(legalize)地塞进空隙里,并只重新缝合受影响的那几根线,之后你再跑一次增量 STA,确认修复确实消除了这条违例、又没有在旁边引出新的违例。正因为每一轮都小而局部,ECO 就成了团队在临近终点时收敛到一份干净设计的方式——在 STA 与 DRC/LVS 之间反复迭代,直到一切全绿、版图(layout)可以送去流片(tapeout)。

ECO 有两种类型。前面那种时序 ECO 或 DRC ECO 不改动任何逻辑——它只调整驱动强度、加减 buffer 或重新布线。而功能 ECO 会改变电路实际做的事情,通常是为了修补一个很晚才发现的逻辑 bug。其中最受推崇的是仅金属层(metal-only,又称 'freeze-silicon' 冻结硅片)的 ECO:晶圆厂之所以昂贵,部分原因就在于掩膜版(mask)套组,而晶体管的底层(base layer)正是其中最贵的那几层。如果你在布局阶段就把一些没用上的备用单元(spare cell)撒在整个版图里,那么很多晚到的逻辑修改往往只需重新裁切上面几层金属、把这些备用单元接进来就能搞定——不必新做底层掩膜版,比整片重新流片(respin)便宜得多、也快得多。

size_cell U_slow BUFX1 -> BUFX4 ; insert_buffer net_n42 -lib_cell BUFX2

一个与厂商无关的时序 ECO:把一个慢 buffer 升尺寸,并在一根长线上插入一个新 buffer,把缺失的 setup 余量(slack)抢回来——只动了两个单元,而不是整个设计。

小贴士:ECO 是手术刀,不是推土机——如果一次 ECO 就想挪动成千上万个单元,或者你在同一个违例上兜圈子怎么都修不好,那就是个信号:该退一步,回到更早的布局或时钟树综合(CTS)阶段重新收敛,而不是一味地打补丁。

又称
ECOtiming ECOfunctional ECOmetal ECO时序 ECO功能 ECO金属层 ECO時序 ECO功能 ECO金屬層 ECO