4. 时序违例优化方法

时序违例的修复不是“把所有违例路径都改一遍”,而是先判断违例的性质,再选择代价最小、副作用最可控的手段。在签核阶段,WNS(最差负裕量)和 TNS(总负裕量)往往由少数关键路径主导,盲目全局优化会带来面积、功耗和拥塞的连锁反应。本节围绕五类核心手段展开:单元替换、尺寸调整、缓冲器插入、路径分组与优先级设置,并说明它们各自适用的场景与配合方式。

一、先分清违例的“病因”

动手之前,先看违例路径的构成。一条路径的延迟大致由三部分组成:单元延迟、互连延迟和时钟不确定性。若路径上逻辑级数多、单元驱动能力弱,属于单元延迟主导;若路径跨越较长布线、负载电容大,属于互连延迟主导;若违例集中在某几个时钟域交界处,则可能是约束或时钟结构问题。不同病因对应不同手段,例如互连主导时插缓冲器比换单元更有效,而逻辑级数过多时则应优先考虑单元替换与尺寸调整。

二、单元替换:换“类型”而非只换“大小”

单元替换(cell swapping)指在保持逻辑功能不变的前提下,把路径上的单元换成延迟特性更优的版本。常见做法包括:把高阈值电压(HVT)单元换成标准阈值或低阈值(LVT)单元以降低延迟,但漏电会增加;把复杂复合逻辑(如 AOI/OAI)替换为等效的简单门组合,减少单级内部串联晶体管带来的延迟;把驱动能力不足的单元换成同功能、更大驱动的版本。

替换时要关注功能等价和引脚映射。例如把 AND2X1 换成 AND2X4,输入输出引脚一致,可直接替换;但把 AOI21X1 拆成 AND2 加 INV 时,会改变逻辑级数和负载分布,需要重新评估下游扇出。替换后应重新检查该路径的建立时间和保持时间,避免“修了 setup 坏了 hold”。

三、尺寸调整:在驱动与负载之间找平衡

尺寸调整(sizing)是改变单元驱动强度,使其与所带负载匹配。驱动过小,输出上升/下降慢,延迟大;驱动过大,虽然输出边沿变快,但输入电容增大,会加重前级负担,同时增加功耗。因此尺寸调整的目标不是“越大越好”,而是让单元延迟与负载电容的乘积处于较优区间。

实际操作中,可对关键路径上的单元逐级评估:若某级输出负载电容远大于其驱动能力,可增大该级尺寸;若某级输入电容已成为前级的重负载,则应减小该级尺寸或在其前插入缓冲。尺寸调整通常与单元替换配合使用,例如先换 LVT 降低阈值延迟,再适度增大驱动以改善边沿。

四、缓冲器插入:隔离负载、缩短互连

当违例主要由长互连或大扇出引起时,插入缓冲器(buffer insertion)是最直接的手段。缓冲器的作用有三:一是隔离,把大负载与前级驱动分开,使前级只驱动缓冲器输入;二是再生,修复因长线导致的边沿退化;三是分段,把一条长互连拆成若干短段,降低每段 RC 延迟。

插入位置很关键。通常选择在路径中段、负载分支点之前,或长线中间。若路径上已有多个扇出,可在分支前插入缓冲器,避免一个驱动同时带多条长线。插入后要检查新增缓冲器是否引入新的保持违例,尤其是在短路径上插入缓冲器会增大数据路径延迟,可能压缩保持裕量。

时序违例优化手段与路径关系示意 原始违例路径 FF1 弱驱动门 长互连 大负载 FF2 优化后路径 FF1 LVT 大驱动 缓冲器 负载隔离 FF2 手段与作用: 单元替换:降阈值/换类型 尺寸调整:匹配驱动负载 缓冲插入:隔离/分段 分组优先级:聚焦关键

五、路径分组与优先级设置

签核工具面对的是成千上万条路径,不可能也不需要对每条路径同等用力。路径分组(path grouping)是把路径按时钟域、功能模块、约束类型或裕量区间归类,再为每组设置优化优先级。常见分组维度包括:

  • 按时钟域分组:跨时钟域路径与同域路径的约束不同,修复策略也不同。
  • 按裕量区间分组:WNS 附近的路径优先修复,TNS 贡献大的路径批量处理。
  • 按功能模块分组:对性能敏感模块提高优先级,对非关键模块可放宽。

优先级设置的核心是把优化资源集中在影响签核结果的路径上。例如,可将 WNS 最差的 100 条路径设为最高优先级,优先使用 LVT 替换和缓冲插入;对 TNS 贡献大但单条裕量较小的路径,采用批量尺寸调整;对保持违例路径,则限制缓冲插入,避免进一步增大数据延迟。分组后应重新运行时序分析,确认每组违例数量与裕量分布的变化。

六、组合使用与验证

实际修复中,五类手段通常组合使用。一个可参考的流程是:先按裕量分组,确定优先级;对最高优先级路径先做单元替换(降阈值、换驱动),再做尺寸调整;若仍不满足,检查互连与扇出,插入缓冲器;最后重新分组并复跑时序,观察 WNS、TNS 和违例路径数量的变化。每次修改后都要检查保持时间、功耗和面积的变化,避免局部优化引发全局退化。

判断依据示例:若某路径优化前 WNS 为 -0.12 ns,经 LVT 替换后变为 -0.05 ns,再插入一级缓冲器后变为 +0.02 ns,且保持裕量仍大于 0.03 ns,则可认为该路径修复达标。若插入缓冲器后保持裕量降至 0.01 ns 以下,则应改用尺寸调整或调整缓冲器位置。
注意:单元替换和尺寸调整会改变单元输入电容与功耗,可能影响前级路径和电源网络;缓冲器插入会增加面积和动态功耗。所有优化都应在签核约束下重新验证,不能只看单条路径的改善。

总结来说,时序违例优化是一个“诊断—选择手段—验证—再分组”的迭代过程。单元替换解决阈值与逻辑类型问题,尺寸调整解决驱动与负载匹配问题,缓冲器插入解决互连与扇出问题,路径分组与优先级设置则决定优化资源投向哪里。理解每种手段的适用边界,比记住操作命令更重要。