时序驱动布局布线:WNS与TNS的概念、时序约束传递、关键路径识别、时序驱动布局策略、时序驱动布线策略
做后端设计这些年,我越来越觉得时序驱动布局布线是整个流程的灵魂。说白了,你布局布线做得再好,时序不满足,芯片就是一块废硅。今天咱们就聊聊这个话题,我把自己的经验和踩过的坑都抖出来。
WNS与TNS:两个必须盯死的指标
先说说WNS和TNS。这两个东西,我刚开始做后端时总觉得差不多,后来被 mentor 骂了一顿才搞明白。
WNS(Worst Negative Slack),就是最差的那条路径的时序裕量。比如你芯片里有十万条路径,最差的那条 slack 是 -0.5ns,那 WNS 就是 -0.5ns。这个数字决定了你的芯片能不能跑到目标频率。
TNS(Total Negative Slack),是所有负 slack 路径的总和。它反映的是时序违例的严重程度。WNS 差但 TNS 小,说明只有少数路径有问题;WNS 还行但 TNS 很大,说明问题遍地开花。
我个人习惯:先看 WNS,再看 TNS。WNS 决定了能不能收敛,TNS 决定了要花多少功夫。有一次我遇到一个设计,WNS 只有 -0.1ns,但 TNS 高达 -500ns,结果修了整整两周才搞定。
| 指标 | 含义 | 关注点 |
|---|---|---|
| WNS | 最差路径的 slack | 能否达到目标频率 |
| TNS | 所有负 slack 的总和 | 修复工作量的大小 |
时序约束传递:别让工具猜你的心思
时序约束传递,说白了就是告诉工具:哪些路径重要,哪些可以放松。我见过太多人把约束写得乱七八糟,结果工具跑出来的结果一塌糊涂。
约束传递有几个关键点:
- 时钟定义要准确:时钟周期、占空比、抖动,一个都不能少。我曾经因为忘了定义时钟抖动,导致流片回来芯片跑不到目标频率,那叫一个惨。
- 输入输出延迟要合理:别给太紧,也别给太松。太紧工具会过度优化,太松又可能漏掉问题。
- 虚假路径要标清楚:比如测试模式下的路径、异步时钟域之间的路径。不标的话,工具会白费力气去优化它们。
小技巧:我习惯在综合阶段就把约束写清楚,布局布线阶段只做微调。这样前后一致性更好,不容易出幺蛾子。
关键路径识别:找到真正的瓶颈
关键路径识别,不是简单地看哪条路径 slack 最差。你想想看,一条路径 slack 差,可能是因为它真的很难走,也可能只是因为约束给得太紧。
我一般会这样做:
- 先跑一遍 STA,拿到所有路径的 slack 分布
- 找出 WNS 对应的那条路径,仔细看它的逻辑级数和连线长度
- 如果逻辑级数太多,考虑插入寄存器或者优化逻辑
- 如果连线太长,考虑调整布局或者插入 buffer
嗯,这里要注意:关键路径往往不止一条。有时候你修好了 WNS,第二条路径又冒出来了。所以我会同时关注 top 10 或者 top 20 的路径。
我曾经踩过的坑:有一次我只盯着 WNS 修,结果修完后 TNS 反而变大了。后来发现是因为我调整布局时,把其他路径的时序也搞坏了。所以修关键路径时,一定要全局考虑。
时序驱动布局策略:把 cell 放在该放的地方
时序驱动布局,核心思想就是让时序关键的 cell 靠得更近。工具会根据时序约束自动调整 cell 的位置,但咱们工程师也得懂背后的逻辑。
布局阶段我关注几个点:
- 关键路径的 cell 要集中放置:减少连线长度,降低延迟。我习惯在布局前先手动标记一些关键 cell,让工具优先处理。
- 避免拥塞:如果关键路径的 cell 都挤在一起,布线阶段会出问题。所以要在时序和拥塞之间找平衡。
- 考虑时钟树:时钟 cell 的位置会影响时钟 skew,进而影响时序。我一般会在布局阶段预留好时钟树的位置。
说白了,布局就是一场博弈。你要在面积、时序、功耗之间找到最优解。没有银弹,只能靠经验和迭代。
时序驱动布线策略:细节决定成败
布线阶段,时序驱动的思路和布局类似,但更精细。工具会根据每条路径的时序要求,决定用哪层金属、走多宽、绕多远。
我总结了几条经验:
- 优先布关键路径:让工具先处理时序最紧的路径,给它们最好的布线资源。
- 控制绕线:绕线会增加延迟,所以关键路径尽量走直线。如果必须绕,也要控制在合理范围内。
- 使用高层金属:高层金属电阻小、延迟低,适合走关键路径。但高层金属资源有限,要合理分配。
我的习惯:布线完成后,我会手动检查几条关键路径的走线情况。如果发现某条路径绕得太多,就手动调整一下。虽然工具很智能,但有时候人的直觉更管用。
知识体系总览
下面这张图是我自己画的,把时序驱动布局布线的核心逻辑串起来了。你看一眼就能明白整个流程。
这张图把整个流程串起来了。从时序约束输入开始,到关键路径识别,再到布局和布线,最后检查时序是否收敛。如果不满足,就迭代回去重新优化。
最后提醒一句:时序驱动布局布线不是一锤子买卖。我做过最复杂的项目,光布局布线就迭代了二十多轮。每次迭代都能发现新问题,每次优化都能让时序好一点点。耐心,是后端工程师最重要的品质。
可可精品资料库