3. 填充因子对时序的影响

填充单元,说白了就是芯片里的“填空”元件。很多人觉得它就是个摆设,不影响功能。但我要告诉你,它对时序的影响,比你想象的要大得多。

我刚开始做后端设计那会儿,也犯过这个错误。有一次一个模块的时序怎么都修不好,折腾了两周,最后发现是填充单元插得太随意,把关键路径的延迟给拉大了。从那以后,我对填充单元再也不敢掉以轻心。

核心观点:填充单元不是“空”的,它会引入实实在在的延迟,影响时钟树,还会破坏信号完整性。

3.1 填充单元引入的延迟

填充单元本质上是一个反相器对或缓冲器对。信号经过它,必然会有延迟。这个延迟虽然小,但在纳米工艺下,几十个填充单元串在一起,延迟就不可忽视了。

我个人习惯把填充单元分为两类:

类型 典型延迟(7nm) 适用场景
普通填充单元(FILL1) 5-10 ps 标准密度填充,对时序影响小
去耦填充单元(DECAP) 15-25 ps 需要额外电容去耦,但延迟更大

你想想看,如果一条关键路径上插了20个DECAP单元,那就是300-500ps的额外延迟。在高速设计中,这足以让setup违例从0变成负值。

我的经验:在时序紧张的模块,优先使用最小尺寸的FILL单元。DECAP虽然对电源好,但延迟代价太高,尽量放在非关键路径上。

3.2 填充对时钟树的影响

时钟树是芯片的“心跳”。填充单元插得不好,时钟树就会“心律不齐”。

具体来说,填充单元会影响时钟树的三个方面:

  1. 时钟偏移(Skew)增大——填充单元改变了局部密度,导致时钟走线绕路,不同分支的延迟差异变大。
  2. 时钟抖动(Jitter)恶化——填充单元带来的IR Drop变化,会让时钟缓冲器的供电不稳定,产生额外的抖动。
  3. 时钟功耗上升——填充单元增加了时钟网络的负载电容,时钟树需要驱动更多的东西,功耗自然就上去了。

我记得有个项目,时钟树综合做完后skew只有20ps,结果插完填充单元,skew直接飙到了60ps。查了半天,发现是填充单元把时钟走线的通道给堵死了,导致CTS工具不得不绕大圈。

避坑指南:我曾经在时钟树综合之前就插了大量填充单元,结果CTS工具完全没法优化时钟走线。后来我改成先做CTS,再插填充单元,skew问题就解决了。记住:时钟区域优先,填充单元靠后。

3.3 填充与信号完整性

信号完整性(SI)是深亚微米设计的老大难。填充单元在这里面扮演的角色,有点像“双刃剑”。

一方面,填充单元可以起到屏蔽作用。在两条长并行线之间插入填充单元,能减少串扰。另一方面,填充单元本身也会成为串扰的受害者或攻击者。

我总结了几条经验:

  • 填充单元不要放在长走线旁边——它会成为串扰的“中继站”,把噪声从一个信号传到另一个信号。
  • 关键信号周围留空——对于时钟、复位等关键信号,周围至少留出2-3个track的空白,不要放填充单元。
  • 使用带屏蔽的填充单元——有些工艺库提供带VSS/VDD屏蔽的填充单元,对SI有好处,但面积会大一些。

说白了,填充单元和信号完整性的关系,就是“成也萧何,败也萧何”。用好了,它能帮你减少串扰;用不好,它反而会引入新的噪声问题。

一句话总结:填充单元不是“空”的,它会影响延迟、时钟树和信号完整性。在时序关键路径上慎用DECAP,在时钟区域后插填充,在关键信号周围留空。
填充因子对时序的影响 填充单元 引入额外延迟 影响时钟树 信号完整性 FILL: 5-10ps DECAP: 15-25ps Skew增大 Jitter恶化 功耗上升 串扰风险 屏蔽作用 实践建议 1. 时序关键路径慎用DECAP,优先用最小FILL 2. 先做CTS,后插填充单元,避免时钟走线绕路 3. 关键信号周围留空2-3个track,减少串扰

嗯,到这里你应该明白了。填充因子不是随便填填就行的。它和时序、时钟、信号完整性都绑在一起。我建议你在做floorplan的时候,就把填充策略想清楚,别等到最后才来补救。