一、时序收敛概述

什么是时序收敛?

时序收敛,说白了就是让芯片里的所有信号,都能在规定时间内到达该去的地方。你想想看,一个芯片里有几亿个晶体管,信号从一个触发器跑到下一个触发器,路径有长有短,延迟有大有小。我们要做的,就是确保每条路径的延迟都小于一个时钟周期。

我刚开始做后端设计时,总觉得时序收敛就是个跑跑工具的事。直到有一次,一个28nm的项目,前仿真全过,后仿真也没问题,结果流片回来芯片就是跑不到目标频率。查了三个月,最后发现是一条关键路径的setup time差了0.02ns。嗯,从那以后我再也不敢小看时序收敛了。

时序收敛的核心定义:

在给定的工艺、电压、温度条件下,芯片中所有时序路径的建立时间(setup time)和保持时间(hold time)都满足设计要求,且没有违反任何时序约束。

为什么时序收敛是芯片设计的核心挑战?

这个问题我问过很多新人,答案五花八门。我个人习惯用一个比喻来解释:

想象你在设计一条高速公路。每个触发器就是一个收费站,信号就是车流。时钟就是交通信号灯。时序收敛要解决的问题是:

  • 车不能开太快(hold time violation)—— 信号不能比时钟早到太多,否则会冲过收费站
  • 车不能开太慢(setup time violation)—— 信号必须在绿灯结束前到达,否则会被拦下
  • 路不能太堵(congestion)—— 布线资源有限,信号线不能挤在一起
  • 油不能太贵(power)—— 芯片功耗要控制,不能为了时序乱加buffer

我在项目中遇到过最头疼的情况,就是setup和hold同时违反。你修了setup,hold就变差;你修了hold,setup又崩了。这种时候,真的想摔键盘。

注意:随着工艺节点不断缩小(从28nm到7nm再到3nm),时序收敛的难度呈指数级增长。线延迟占比越来越大,工艺波动也越来越明显。我曾经做过一个5nm的项目,光时序收敛就花了4个月,占了整个后端流程的一半时间。

时序收敛的基本流程

我一般把时序收敛分成四个阶段,每个阶段都有不同的侧重点:

  1. 预收敛阶段(Pre-CTS)
    • 综合后初步评估时序
    • 调整floorplan和placement
    • 我习惯在这个阶段先跑一遍快速STA,看看有没有明显的violation
  2. 时钟树综合阶段(CTS)
  3. 构建时钟树,平衡时钟延迟
  4. 这个阶段最容易出问题,我见过有人CTS没做好,后面怎么修都修不回来
  5. 布线后收敛阶段(Post-Route)
  6. 实际布线后重新评估时序
  7. 修复布线引入的新violation
  8. 嗯,这个阶段最磨人,因为每次修完都要重新跑一遍DRC/LVS
  9. 签核阶段(Signoff)
  10. 用signoff工具做最终验证
  11. 检查所有corner下的时序
  12. 我建议至少跑三个corner:最慢、最快、典型
时序收敛基本流程 预收敛阶段 Pre-CTS 时钟树综合 CTS 布线后收敛 Post-Route 签核阶段 Signoff 迭代修复(通常需要3-5轮) 关键指标 Setup Slack ≥ 0 Hold Slack ≥ 0 Transition ≤ 约束值 每个阶段都可能需要返回上一阶段重新优化

关键指标详解

做时序收敛,你得盯住几个核心指标。我每次看报告,第一眼就看这几个数:

指标 含义 典型值 我踩过的坑
Setup Slack 建立时间余量,越大越好 ≥ 0 ps 曾经为了省面积,把slack压到0.01ps,结果温度一变化就崩了
Hold Slack 保持时间余量,越大越好 ≥ 0 ps hold violation最隐蔽,有时候仿真看不出来
Transition Time 信号上升/下降时间 ≤ 0.5ns(视工艺而定) transition太大会导致延迟计算不准
Clock Skew 时钟到达不同触发器的偏差 ≤ 50ps skew太大,setup和hold都难修
Total Negative Slack (TNS) 所有violation的slack总和 0 TNS不为0,说明还有violation没修完

我的小技巧:看报告时别只看WNS(最差负slack),TNS也很重要。WNS为0但TNS很大,说明有很多路径在violation边缘,这种芯片流片风险很高。我一般要求TNS也为0才敢签核。

时序收敛的常见误区

做了这么多年后端,我总结了几条新人容易犯的错误:

  • 过度优化setup—— 为了修setup狂加buffer,结果hold崩了,功耗也上去了
  • 忽视clock tree—— 觉得CTS是工具自动做的,结果skew大到没法修
  • 只看一个corner—— 只跑最慢corner,结果最快corner下hold violation一堆
  • 不重视floorplan—— floorplan没做好,后面怎么修都修不回来

避坑指南:我曾经在一个项目里,为了赶进度,跳过了预收敛阶段的详细分析,直接跑CTS。结果CTS做完发现setup violation有2000多条,花了三周才修回来。从那以后,我每个阶段都会做一次完整的STA,绝不跳过任何一步。

好了,时序收敛的基本概念就讲到这里。记住一句话:时序收敛不是跑一次工具就能搞定的,它是一个反复迭代、不断优化的过程。 你想想看,一个芯片从设计到流片,时序收敛可能要占掉40%的时间。所以,打好基础很重要。

专注资料整理