3. 填充因子对时序的影响
填充单元,说白了就是芯片里的“填空”元件。很多人觉得它就是个摆设,不影响功能。但我要告诉你,它对时序的影响,比你想象的要大得多。
我刚开始做后端设计那会儿,也犯过这个错误。有一次一个模块的时序怎么都修不好,折腾了两周,最后发现是填充单元插得太随意,把关键路径的延迟给拉大了。从那以后,我对填充单元再也不敢掉以轻心。
核心观点:填充单元不是“空”的,它会引入实实在在的延迟,影响时钟树,还会破坏信号完整性。
3.1 填充单元引入的延迟
填充单元本质上是一个反相器对或缓冲器对。信号经过它,必然会有延迟。这个延迟虽然小,但在纳米工艺下,几十个填充单元串在一起,延迟就不可忽视了。
我个人习惯把填充单元分为两类:
| 类型 | 典型延迟(7nm) | 适用场景 |
|---|---|---|
| 普通填充单元(FILL1) | 5-10 ps | 标准密度填充,对时序影响小 |
| 去耦填充单元(DECAP) | 15-25 ps | 需要额外电容去耦,但延迟更大 |
你想想看,如果一条关键路径上插了20个DECAP单元,那就是300-500ps的额外延迟。在高速设计中,这足以让setup违例从0变成负值。
我的经验:在时序紧张的模块,优先使用最小尺寸的FILL单元。DECAP虽然对电源好,但延迟代价太高,尽量放在非关键路径上。
3.2 填充对时钟树的影响
时钟树是芯片的“心跳”。填充单元插得不好,时钟树就会“心律不齐”。
具体来说,填充单元会影响时钟树的三个方面:
- 时钟偏移(Skew)增大——填充单元改变了局部密度,导致时钟走线绕路,不同分支的延迟差异变大。
- 时钟抖动(Jitter)恶化——填充单元带来的IR Drop变化,会让时钟缓冲器的供电不稳定,产生额外的抖动。
- 时钟功耗上升——填充单元增加了时钟网络的负载电容,时钟树需要驱动更多的东西,功耗自然就上去了。
我记得有个项目,时钟树综合做完后skew只有20ps,结果插完填充单元,skew直接飙到了60ps。查了半天,发现是填充单元把时钟走线的通道给堵死了,导致CTS工具不得不绕大圈。
避坑指南:我曾经在时钟树综合之前就插了大量填充单元,结果CTS工具完全没法优化时钟走线。后来我改成先做CTS,再插填充单元,skew问题就解决了。记住:时钟区域优先,填充单元靠后。
3.3 填充与信号完整性
信号完整性(SI)是深亚微米设计的老大难。填充单元在这里面扮演的角色,有点像“双刃剑”。
一方面,填充单元可以起到屏蔽作用。在两条长并行线之间插入填充单元,能减少串扰。另一方面,填充单元本身也会成为串扰的受害者或攻击者。
我总结了几条经验:
- 填充单元不要放在长走线旁边——它会成为串扰的“中继站”,把噪声从一个信号传到另一个信号。
- 关键信号周围留空——对于时钟、复位等关键信号,周围至少留出2-3个track的空白,不要放填充单元。
- 使用带屏蔽的填充单元——有些工艺库提供带VSS/VDD屏蔽的填充单元,对SI有好处,但面积会大一些。
说白了,填充单元和信号完整性的关系,就是“成也萧何,败也萧何”。用好了,它能帮你减少串扰;用不好,它反而会引入新的噪声问题。
一句话总结:填充单元不是“空”的,它会影响延迟、时钟树和信号完整性。在时序关键路径上慎用DECAP,在时钟区域后插填充,在关键信号周围留空。
嗯,到这里你应该明白了。填充因子不是随便填填就行的。它和时序、时钟、信号完整性都绑在一起。我建议你在做floorplan的时候,就把填充策略想清楚,别等到最后才来补救。