时序驱动布局布线: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 差,可能是因为它真的很难走,也可能只是因为约束给得太紧。

我一般会这样做:

  1. 先跑一遍 STA,拿到所有路径的 slack 分布
  2. 找出 WNS 对应的那条路径,仔细看它的逻辑级数和连线长度
  3. 如果逻辑级数太多,考虑插入寄存器或者优化逻辑
  4. 如果连线太长,考虑调整布局或者插入 buffer

嗯,这里要注意:关键路径往往不止一条。有时候你修好了 WNS,第二条路径又冒出来了。所以我会同时关注 top 10 或者 top 20 的路径。

我曾经踩过的坑:有一次我只盯着 WNS 修,结果修完后 TNS 反而变大了。后来发现是因为我调整布局时,把其他路径的时序也搞坏了。所以修关键路径时,一定要全局考虑。

时序驱动布局策略:把 cell 放在该放的地方

时序驱动布局,核心思想就是让时序关键的 cell 靠得更近。工具会根据时序约束自动调整 cell 的位置,但咱们工程师也得懂背后的逻辑。

布局阶段我关注几个点:

  • 关键路径的 cell 要集中放置:减少连线长度,降低延迟。我习惯在布局前先手动标记一些关键 cell,让工具优先处理。
  • 避免拥塞:如果关键路径的 cell 都挤在一起,布线阶段会出问题。所以要在时序和拥塞之间找平衡。
  • 考虑时钟树:时钟 cell 的位置会影响时钟 skew,进而影响时序。我一般会在布局阶段预留好时钟树的位置。

说白了,布局就是一场博弈。你要在面积、时序、功耗之间找到最优解。没有银弹,只能靠经验和迭代。

时序驱动布线策略:细节决定成败

布线阶段,时序驱动的思路和布局类似,但更精细。工具会根据每条路径的时序要求,决定用哪层金属、走多宽、绕多远。

我总结了几条经验:

  • 优先布关键路径:让工具先处理时序最紧的路径,给它们最好的布线资源。
  • 控制绕线:绕线会增加延迟,所以关键路径尽量走直线。如果必须绕,也要控制在合理范围内。
  • 使用高层金属:高层金属电阻小、延迟低,适合走关键路径。但高层金属资源有限,要合理分配。

我的习惯:布线完成后,我会手动检查几条关键路径的走线情况。如果发现某条路径绕得太多,就手动调整一下。虽然工具很智能,但有时候人的直觉更管用。

知识体系总览

下面这张图是我自己画的,把时序驱动布局布线的核心逻辑串起来了。你看一眼就能明白整个流程。

时序驱动布局布线核心逻辑 时序约束输入 关键路径识别(WNS/TNS分析) 时序驱动布局(Cell放置优化) 时序驱动布线(连线优化) 时序收敛检查 WNS/TNS 约束传递 Cell放置 拥塞控制 金属层选择 绕线控制 迭代优化

这张图把整个流程串起来了。从时序约束输入开始,到关键路径识别,再到布局和布线,最后检查时序是否收敛。如果不满足,就迭代回去重新优化。

最后提醒一句:时序驱动布局布线不是一锤子买卖。我做过最复杂的项目,光布局布线就迭代了二十多轮。每次迭代都能发现新问题,每次优化都能让时序好一点点。耐心,是后端工程师最重要的品质。

可可精品资料库