4. 填充因子对功耗的影响:填充单元的漏电功耗、动态功耗、功耗优化策略
聊到填充因子对功耗的影响,很多刚入行的朋友第一反应是:“填充单元又不干活,能有什么功耗?”
嗯,这个想法其实挺危险的。我早年做过一个 28nm 的项目,流片回来发现静态功耗比预期高了 15%。查了半天,罪魁祸首就是那些“不干活”的填充单元。说白了,填充单元虽然不参与逻辑运算,但它们实实在在是晶体管,只要上了电,就会产生功耗。
4.1 填充单元的漏电功耗
漏电功耗,是填充单元在“待机”状态下持续消耗的静态电流。你想想看,一颗芯片里可能有几十万甚至上百万个填充单元,每个漏一点点,加起来就是一笔不小的开销。
填充单元的漏电主要来自两个部分:
- 亚阈值漏电:晶体管关断后,源漏之间仍有微弱电流。工艺越先进,这个电流越明显。
- 栅极漏电:栅氧化层变薄后,电子会直接隧穿通过。在 28nm 以下节点,这个问题尤其突出。
我记得有个项目用的是 16nm FinFET 工艺,填充单元用的是标准阈值(SVT)器件。后来做功耗分析时发现,填充单元的漏电占了芯片总静态功耗的 8% 左右。当时我们做了个实验,把一部分填充单元换成高阈值(HVT)器件,漏电直接降了 40%。
关键指标:填充单元的漏电功耗与工艺节点、阈值电压、温度强相关。在先进工艺下,漏电功耗可能占到芯片总功耗的 10%-20%。
4.2 填充单元的动态功耗
动态功耗,很多人觉得填充单元没有开关动作,所以动态功耗为零。这个理解不完全对。
填充单元确实没有逻辑翻转,但它们的输入引脚会收到来自周围逻辑门的信号。如果填充单元内部有反相器或缓冲器结构,输入信号的变化就会引起内部节点的充放电,产生动态功耗。
我遇到过一种情况:某个模块的填充密度很高,填充单元之间形成了很长的金属连线。这些连线本身就有寄生电容,信号在连线上跳变时,会消耗额外的动态功耗。虽然单个填充单元的动态功耗很小,但数量一多,影响就不可忽视了。
填充单元动态功耗的主要来源:
- 输入信号翻转:填充单元输入端的信号变化,驱动内部晶体管栅极充放电。
- 寄生电容充放电:填充单元与周围逻辑之间的互连电容,信号跳变时产生功耗。
- 电源网络噪声:填充单元虽然不工作,但它们的电源引脚会引入额外的 IR Drop 和噪声,间接影响动态功耗。
个人经验:在做功耗仿真时,不要忽略填充单元的动态功耗。我习惯在功耗分析工具中开启“fill cell toggle analysis”选项,这样能更准确地评估填充单元对动态功耗的贡献。
4.3 功耗优化策略
既然填充单元会带来功耗问题,那怎么优化呢?我总结了几个实战中比较有效的方法。
4.3.1 选择合适的阈值电压
这是最直接的方法。在非关键路径区域,尽量使用高阈值(HVT)或超低阈值(ULVT)的填充单元。HVT 器件的漏电比 SVT 低 30%-50%,但速度也慢一些。不过填充单元不需要速度,所以 HVT 是首选。
| 阈值类型 | 漏电功耗(相对值) | 适用场景 |
|---|---|---|
| SVT(标准阈值) | 1.0x | 默认填充,适用于一般区域 |
| HVT(高阈值) | 0.5x - 0.7x | 非关键路径、低功耗区域 |
| ULVT(超低阈值) | 0.3x - 0.5x | 极低功耗要求区域 |
4.3.2 优化填充单元的排布密度
填充密度不是越高越好。密度过高,不仅增加漏电,还会导致局部温度升高,进一步加剧漏电。我建议的做法是:
- 在功耗敏感区域(如 SRAM、模拟模块附近),适当降低填充密度,用间距规则来满足 DRC 要求。
- 在标准单元密度较低的区域,优先使用大尺寸的填充单元,减少单元数量。
- 避免在热密度高的区域集中放置填充单元。
4.3.3 使用去耦电容型填充单元
有些工艺库提供了带去耦电容的填充单元(decap fill cell)。这种单元不仅能填充空白区域,还能起到稳压和降低电源噪声的作用。虽然它的漏电比普通填充单元稍高,但能改善动态功耗和信号完整性,整体收益是正的。
避坑指南:我曾经在一个项目中大量使用 decap fill cell,结果发现它们的漏电比预期高了 20%。后来查原因,是因为 decap 电容的栅氧化层较薄,漏电更大。所以使用 decap fill cell 时,一定要确认工艺库的漏电模型,不要盲目堆叠。
4.3.4 电源门控与填充单元
对于支持电源门控(power gating)的设计,可以在休眠区域使用特殊的“休眠填充单元”(sleep fill cell)。这种单元在电源关断时几乎不消耗漏电。不过要注意,休眠填充单元的唤醒时间较长,不适合频繁开关的场景。
4.3.5 温度感知的填充优化
漏电功耗对温度非常敏感。温度每升高 10°C,漏电大约增加一倍。所以在芯片的热点区域,要特别控制填充单元的漏电。我习惯的做法是:
- 在早期功耗分析中,标注出温度较高的区域。
- 在这些区域优先使用 HVT 或 ULVT 填充单元。
- 如果热点区域填充密度过高,考虑手动调整布局,分散填充单元。
4.4 填充单元功耗优化流程
下面这张图是我在实际项目中总结的填充单元功耗优化流程,你可以参考一下。
4.5 实战案例:一个 7nm 项目的填充单元功耗优化
最后分享一个我亲身经历的项目。那是一个 7nm 的 AI 加速器芯片,总功耗预算只有 15W。初期功耗分析显示,填充单元的漏电功耗占了 1.2W,接近 8%。
我们做了三件事:
- 全局替换:将非关键路径区域的填充单元全部换成 HVT 器件,漏电降低了 45%。
- 密度调整:在温度最高的两个热点区域,将填充密度从 25% 降到 18%,同时用间距规则保证 DRC 通过。
- 局部优化:在电源门控区域,使用了 30% 的休眠填充单元,其余用普通 HVT 填充。
最终,填充单元的漏电功耗从 1.2W 降到了 0.5W,降幅超过 58%。而且动态功耗也略有改善,因为减少了不必要的信号翻转路径。
总结一下:填充单元的功耗优化,核心思路就是“该省的省,该用的用”。在非关键区域用低漏电器件,在热点区域控制密度,在需要稳压的地方用 decap 单元。记住,填充单元不是免费的,它们也是芯片功耗的一部分。