互连延迟的物理根源:RC延迟模型、互连尺寸缩放效应、线间串扰对延迟的影响
各位做后端的兄弟,咱们今天聊聊互连延迟。说白了,就是信号在金属线上跑的时候,为什么会慢下来。
我刚入行那会儿,总觉得互连延迟不就是个RC常数嘛,算算就完了。后来被一个28nm的项目狠狠教育了一顿——明明逻辑门延迟算得挺准,结果后仿时序一塌糊涂。查来查去,问题出在长互连上。嗯,从那以后,我对互连延迟再也不敢掉以轻心了。
RC延迟模型:互连延迟的“根”
互连延迟的物理根源,其实就两个东西:电阻R和电容C。信号沿着金属线传播,就像水在管道里流——管道有阻力(R),管道壁还会存水(C)。
经典的Elmore延迟模型告诉我们:
τ = R * C
但实际互连不是一根简单的电阻电容。它是分布式的。我习惯把一根长线切成很多小段,每段都有寄生R和寄生C。整条线的延迟,就是这些RC小段累加的结果。
对于一根长度为L的互连线,单位长度的电阻为r,单位长度的电容为c,那么:
τ ≈ 0.5 * r * c * L²
注意这个L²!延迟和线长的平方成正比。这就是为什么长互连是时序杀手。
关键点:互连延迟随线长呈平方增长。你想想看,线长翻倍,延迟变成四倍。这就是为什么我们做floorplan时,要把关键路径上的模块放近一点。
互连尺寸缩放效应:工艺越先进,互连越头疼
我记得在180nm时代,互连延迟根本不是事儿。那时候门延迟占大头。但到了28nm以下,情况完全反过来了。
为什么会这样?
工艺在缩小,晶体管的尺寸在缩小,门延迟在降低。但互连呢?金属线的宽度和间距也在缩小,但金属的电阻率并没有同比例下降。结果就是:
- 单位长度电阻r增大:线宽变窄,横截面积减小,电阻上升
- 单位长度电容c变化复杂:线间距变小,线间电容增大;线高相对变矮,对地电容变化不大
我给大家列个表,看看不同工艺节点下互连延迟的变化趋势:
| 工艺节点 | 门延迟(相对值) | 互连延迟(相对值) | 谁占主导? |
|---|---|---|---|
| 180nm | 1.0 | 0.3 | 门延迟 |
| 90nm | 0.5 | 0.5 | 差不多 |
| 28nm | 0.2 | 0.8 | 互连延迟 |
| 7nm | 0.1 | 1.2 | 互连延迟主导 |
看到没?到了7nm,互连延迟已经是门延迟的12倍了。这就是为什么我们做先进工艺时,互连优化成了时序收敛的头号任务。
我的经验:在7nm项目中,我花在互连优化上的时间,占了整个时序收敛工作的70%以上。门级优化反而成了配角。
线间串扰对延迟的影响:邻居的“干扰”
串扰,说白了就是一根线上的信号变化,通过寄生电容影响到旁边的线。你想想看,两条线挨得那么近,中间有个电容耦合着,一条线跳变,另一条线肯定会被“带偏”。
串扰对延迟的影响,主要体现在两个方面:
- 延迟变化:受害线的信号跳变时间被改变,可能变快也可能变慢
- 噪声毛刺:受害线没有跳变,但被邻居带出一个毛刺,可能导致逻辑错误
我重点说说延迟变化。假设两条线平行走很长一段:
攻击线(Aggressor): 0→1 跳变
受害线(Victim): 1→0 跳变(同向跳变)→ 延迟减小
受害线(Victim): 0→1 跳变(反向跳变)→ 延迟增大
当攻击线和受害线反向跳变时,串扰会让受害线的延迟增加最多。我在一个项目中遇到过这种情况:一条关键路径上的信号,因为旁边有根长线反向跳变,延迟增加了30%多,直接导致setup违例。
避坑指南:我曾经在布线完成后,发现一条关键路径的setup slack从正变负。查了半天,原来是旁边加了一条高翻转率的时钟线。从那以后,我习惯在布线前就把关键路径和高速翻转的线隔离开。
知识体系总览
下面这张图,把互连延迟的物理根源串起来了。你可以看到,RC模型是基础,尺寸缩放让问题恶化,串扰又添了一把火。
总结一下:互连延迟的物理根源,就是RC模型、尺寸缩放和串扰这三件事。RC模型是基础,告诉你延迟怎么算;尺寸缩放告诉你为什么工艺越先进互连越头疼;串扰告诉你邻居也会来添乱。
做时序收敛,说白了就是跟这三件事斗智斗勇。理解了它们的物理本质,你才能知道该从哪儿下手去优化。我个人习惯是先看RC,再看串扰,最后考虑尺寸缩放带来的限制——这个顺序,在大多数项目里都管用。
实用建议:下次你看到setup违例,别急着调buffer。先看看那条路径是不是长互连?旁边有没有高翻转率的线?搞清楚物理根源,比盲目优化有效得多。
可可精品资料库