3. 功耗来源分解方法
在 Kria 平台上做功耗优化,第一步不是急着改时钟或降电压,而是把总功耗拆开,弄清楚每一毫瓦到底花在哪里。Kria 的功耗并不是一个单一数字,它由几个物理机理不同的部分叠加而成:动态功耗来自逻辑翻转时对负载电容的充放电,短路功耗来自翻转瞬间 PMOS 与 NMOS 同时导通形成的直通电流,静态功耗则主要来自亚阈值漏电、栅极漏电和结反偏漏电。只有把这四类分开,才能判断某个设计到底是"算得多"还是"漏得多",从而选择正确的优化手段。
四类功耗的物理构成
动态功耗是最直观的一项,表达式为 P_dyn = α · C_L · V² · f。其中 α 是翻转活动因子,C_L 是被驱动节点的等效负载电容,V 是供电电压,f 是时钟频率。注意电压是平方项,因此从 1.0V 降到 0.85V,动态功耗理论上降到约 72%,这也是 Kria 上 DVFS 收益明显的原因。翻转活动因子 α 往往被低估:一个 32 位计数器最低位每周期翻转,最高位可能几千周期才翻转一次,平均 α 差异巨大。
短路功耗发生在输入信号跳变、电平处于 Vthn 与 Vdd−|Vthp| 之间的短暂窗口内,此时上拉和下拉网络同时导通,形成从 Vdd 到 GND 的直通电流。它与输入边沿速率强相关:边沿越慢,同时导通的窗口越长,短路功耗越大。在 Kria 的 PL 侧,如果时钟树或长走线驱动能力不足导致边沿退化,短路功耗会明显上升。
静态功耗由漏电主导,主要包括三部分:亚阈值漏电(晶体管在关断态仍有指数级电流)、栅氧隧穿漏电(栅极绝缘层变薄后电子直接穿透)以及结反偏漏电。亚阈值漏电对温度极其敏感,结温每升高约 10℃,漏电大致翻倍,因此"功耗→发热→漏电→更热"的正反馈是 Kria 长时间高负载运行时的关键风险。
在 Kria 上定位主要贡献者
Kria 的功耗分布在 PS(处理系统)和 PL(可编程逻辑)两侧,定位方法要分开处理。PS 侧主要看 APU、DDR 控制器和各类外设接口;PL 侧则看 LUT、FF、BRAM、DSP 和时钟资源的翻转情况。一个实用的做法是分三步做"变量隔离":
- 空闲态基线测量。让设计进入 idle,关闭不用的时钟和电源域,测量此时电流。这个值基本反映静态功耗加少量必须的动态功耗。如果空闲电流明显偏高,说明漏电或未关断的电源域是主要问题。
- 频率扫描。保持负载不变,把时钟从 100MHz 逐步提到 300MHz,记录功耗。若功耗随频率近似线性上升,说明动态功耗占主导;若上升缓慢,说明短路功耗或漏电占比大。
- 活动因子对比。在 PL 中插入计数器或使用 ILA 观察关键模块的翻转率,对比不同模块的 α 值,找出"翻转最频繁但功能价值最低"的部分。
一个教学示例:四类功耗的估算
假设某 Kria 设计在 1.0V、200MHz 下运行,PL 侧一个模块的等效负载电容 C_L = 2nF,平均翻转活动因子 α = 0.15,则动态功耗约为:
P_dyn = α · C_L · V² · f
= 0.15 × 2e-9 × (1.0)² × 200e6
= 0.06 W = 60 mW
若该模块输入边沿较慢,短路功耗按动态功耗的 10%~15% 估算,约 6~9mW。静态功耗则与工艺和温度相关,在 28nm 级工艺、60℃ 下,一个中等规模 PL 区域的漏电可能在 20~40mW 量级。这样总功耗约 90~110mW,其中动态占约 55%~65%,漏电占约 20%~35%。这个比例说明:如果只降频率,动态功耗会下降,但漏电部分几乎不变,整体收益有限;此时更有效的手段是关断不用的电源域或降低结温。
分解结果如何指导优化
把功耗拆开之后,优化方向就变得清晰。动态功耗占主导时,优先考虑时钟门控、降低翻转活动因子、减少不必要的逻辑翻转,以及在允许时使用 DVFS 降电压;短路功耗占主导时,应检查时钟树和长走线的驱动能力,改善边沿速率;静态漏电占主导时,重点转向电源域关断、降低结温、选择低漏电工艺角或使用体偏置。Kria 的电源管理单元支持对部分电源域独立控制,合理划分电源域可以让空闲模块真正进入低漏电状态,而不是仅仅停止时钟。
最后要强调的是,四类功耗并不是孤立存在的。温度升高会同时抬高漏电和短路功耗,而动态功耗本身又会产生热量,形成耦合。因此在实际定位时,建议先测基线、再做频率扫描、最后结合温度记录,形成一个"功耗—频率—温度"的三维观察,才能准确判断主要贡献者,避免把漏电问题误判为动态功耗问题而做无效优化。