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 总功耗分解与主要贡献者定位 P_total = P_dyn + P_sc + P_static 动态功耗 P_dyn α · C_L · V² · f 翻转活动因子 α 负载电容 C_L 电压平方项 V² · 频率 f 短路功耗 P_sc Vdd → GND 直通电流 输入边沿速率相关 PMOS/NMOS 同时导通 边沿越慢,窗口越长 静态功耗 P_static 漏电主导 亚阈值漏电 栅氧隧穿漏电 结反偏漏电 结温升高 → 漏电翻倍 (约每 +10℃ 翻倍) 定位主要贡献者的判断路径 ① 空闲态测电流 → 若偏高,静态漏电为主,查温度与电源域关断 ② 提高频率功耗线性上升 → 动态功耗为主,查 α、C_L 与时钟门控 ③ 降频后功耗下降不明显 → 短路功耗或漏电占比大,查边沿与工艺角

在 Kria 上定位主要贡献者

Kria 的功耗分布在 PS(处理系统)和 PL(可编程逻辑)两侧,定位方法要分开处理。PS 侧主要看 APU、DDR 控制器和各类外设接口;PL 侧则看 LUT、FF、BRAM、DSP 和时钟资源的翻转情况。一个实用的做法是分三步做"变量隔离":

  1. 空闲态基线测量。让设计进入 idle,关闭不用的时钟和电源域,测量此时电流。这个值基本反映静态功耗加少量必须的动态功耗。如果空闲电流明显偏高,说明漏电或未关断的电源域是主要问题。
  2. 频率扫描。保持负载不变,把时钟从 100MHz 逐步提到 300MHz,记录功耗。若功耗随频率近似线性上升,说明动态功耗占主导;若上升缓慢,说明短路功耗或漏电占比大。
  3. 活动因子对比。在 PL 中插入计数器或使用 ILA 观察关键模块的翻转率,对比不同模块的 α 值,找出"翻转最频繁但功能价值最低"的部分。
在 Kria 上做功耗分解时,建议先固定温度(例如用散热片把结温稳定在 60℃ 左右),否则漏电随温度变化会干扰对动态功耗的判断。测量点优先选在电源模块输出端,而不是芯片引脚,以减少走线压降带来的误差。

一个教学示例:四类功耗的估算

假设某 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%。这个比例说明:如果只降频率,动态功耗会下降,但漏电部分几乎不变,整体收益有限;此时更有效的手段是关断不用的电源域或降低结温。

上述数值为教学示例中的合理假设,并非某块具体 Kria 板卡的实测结果。实际设计中应以 Vivado 的 report_power 或板级电流测量为准,并注意工艺角(typical/fast/slow)对漏电的影响可相差数倍。

分解结果如何指导优化

把功耗拆开之后,优化方向就变得清晰。动态功耗占主导时,优先考虑时钟门控、降低翻转活动因子、减少不必要的逻辑翻转,以及在允许时使用 DVFS 降电压;短路功耗占主导时,应检查时钟树和长走线的驱动能力,改善边沿速率;静态漏电占主导时,重点转向电源域关断、降低结温、选择低漏电工艺角或使用体偏置。Kria 的电源管理单元支持对部分电源域独立控制,合理划分电源域可以让空闲模块真正进入低漏电状态,而不是仅仅停止时钟。

最后要强调的是,四类功耗并不是孤立存在的。温度升高会同时抬高漏电和短路功耗,而动态功耗本身又会产生热量,形成耦合。因此在实际定位时,建议先测基线、再做频率扫描、最后结合温度记录,形成一个"功耗—频率—温度"的三维观察,才能准确判断主要贡献者,避免把漏电问题误判为动态功耗问题而做无效优化。