1. ECO工程全景与后期时序修复定位

在数字IC设计流程中,ECO(Engineering Change Order,工程变更指令)并不是一个孤立的“补丁动作”,而是贯穿综合、布局布线、签核各阶段、用于在既有网表或版图上做最小化修改的工程手段。理解ECO,首先要理解它出现的位置:当RTL已经冻结、综合网表已经生成、甚至布局布线已经完成之后,设计仍可能因为功能修正、时序违例、功耗或信号完整性等问题需要改动。此时若重新走完整流程,代价极高,ECO就是在“尽量不动已收敛部分”的前提下完成必要修改。

从Synopsys工具链视角看,ECO大致分为两类:功能ECO与时序ECO。功能ECO通常由RTL变更驱动,需要把RTL改动映射到门级网表,常用Formality做等价性检查、用DC或ICC2/FC完成增量综合与布局;时序ECO则更多由签核结果驱动,例如PrimeTime报出的setup/hold违例,通过插入缓冲、调整驱动、替换单元、修改约束等方式修复。后期时序修复的核心目标,是在满足功能不变、DRC干净、功耗可控的前提下,把WNS/TNS、WHS/THS收敛到签核标准以内。

后期时序修复的约束非常现实:可用的物理空间有限,绕线资源紧张,时钟树已经平衡,电压降和串扰已经存在。因此,时序ECO不是“随便加buffer”,而是要在时序、面积、功耗、可布线性、信号完整性之间做权衡。例如,修复setup违例时插入大驱动单元可能改善延迟,但会增加面积和动态功耗;修复hold违例时插入延迟单元可能引入新的setup风险。工程上通常先处理WNS最差的路径,再处理TNS,最后清理DRC和SI问题。

下面这张图给出Synopsys工具链视角下的ECO工程全景:从RTL/约束输入,到综合、布局布线、签核,再到功能ECO与时序ECO两条修复路径,以及最终回归签核的闭环关系。

Synopsys ECO 工程全景与后期时序修复定位 RTL / SDC 约束 功能意图 + 时序目标 综合 (DC) 门级网表 + 初步时序 布局布线 (ICC2/FC) 物理版图 + 时钟树 签核 (PrimeTime/PT-SI) WNS/TNS/WHS/THS 时序/DRC/SI 是否收敛? 否 → 触发 ECO 功能 ECO RTL 变更 → 增量综合 → 等价性检查 Formality / DC / ICC2 增量布局 目标:功能正确 + 时序不退化 时序 ECO PT 违例 → 修复策略 → 增量绕线 插 buffer / 换单元 / 调约束 目标:WNS/TNS/WHS/THS 收敛 回归签核:PT / StarRC / PrimeTime SI 确认功能等价、时序收敛、DRC 干净 若未收敛,迭代 ECO 直至签核通过 后期时序修复约束 • 物理空间有限 • 时钟树已平衡 • 功耗/面积/DRC 权衡

图中可以看到,ECO并不是流程的终点,而是签核发现问题后的反馈修正环节。功能ECO和时序ECO虽然驱动源不同,但最终都要回到签核工具中重新验证。对于后期时序修复,工程上通常遵循“先看WNS、再看TNS、最后看hold和SI”的顺序,因为WNS决定芯片能否跑在目标频率,TNS反映整体违例规模,hold问题则可能在修复setup时被引入。

在Synopsys工具链中,后期时序修复的典型输入包括:PrimeTime生成的违例报告、ICC2/FC中的物理数据库、StarRC提取的寄生参数、以及SDC约束。修复动作通过eco_netlist或insert_buffer等命令落到版图上,再经过增量绕线和时序更新。判断修复是否成功,不能只看单条路径变好,而要确认WNS、TNS、WHS、THS四项指标同时满足签核标准,且没有引入新的DRC违例或SI问题。

工程提示:后期时序修复中,setup与hold往往相互制约。修复setup时增大驱动或缩短路径,可能使hold更差;修复hold时插入延迟,可能吃掉setup余量。因此实际项目中通常先修setup,再修hold,最后做SI和DRC清理,并保留足够的余量(例如setup留5%~10% margin)以应对OCV和串扰影响。

建立整体工作框架时,可以把ECO理解为“签核驱动、增量修改、回归验证”的闭环。综合阶段关注逻辑映射与初步时序,布局布线阶段关注物理实现与时钟树,签核阶段关注真实寄生下的时序与信号完整性。ECO则是在这个链条的末端,用最小代价把设计拉回收敛状态。理解这个全景,后续学习具体ECO命令、修复策略和脚本实现时,才能清楚每一步动作在流程中的位置和影响。