互连延迟的物理根源: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延迟模型 尺寸缩放效应 线间串扰 Elmore延迟模型 τ = R·C 分布式RC:τ ∝ L² 线宽缩小 → r增大 线间距缩小 → c增大 耦合电容 → 延迟变化 反向跳变 → 延迟增大 三者共同决定互连延迟,先进工艺下互连延迟占主导

总结一下:互连延迟的物理根源,就是RC模型、尺寸缩放和串扰这三件事。RC模型是基础,告诉你延迟怎么算;尺寸缩放告诉你为什么工艺越先进互连越头疼;串扰告诉你邻居也会来添乱。

做时序收敛,说白了就是跟这三件事斗智斗勇。理解了它们的物理本质,你才能知道该从哪儿下手去优化。我个人习惯是先看RC,再看串扰,最后考虑尺寸缩放带来的限制——这个顺序,在大多数项目里都管用。

实用建议:下次你看到setup违例,别急着调buffer。先看看那条路径是不是长互连?旁边有没有高翻转率的线?搞清楚物理根源,比盲目优化有效得多。

可可精品资料库