在之前我们知道,芯片中的功耗正比于电压的平方和时钟频率,如下图所示:如果单纯的降低频率,实际上只是任务时间延长了,但如果同时降低电压和频率,那么功耗也会得到降低,这就是今天所介绍的动态电压频率降低技术(DVFS,Dynamic Voltage and Frequency Scaling)
DVFS(dynamic voltage dynamic frequency scaling)动态电压频率技术,是一种通过将不同电路模块的工作电压及工作频率降低到恰好满足系统最低要求,来实时降低系统中不同电路模块功耗的方法。
电路模块中的最大时钟频率和电压紧密相关,如果一个电路能够估算出它必须做多少工作才能完成当前的任务,那么理论上讲就可以将时钟频率调低到刚好能适时完成该任务的水平。降低时钟频率意味着可以同时降低供电电压。频率和电压同时降低,功耗就大大降低了。这个是DVFS的原理。
实现DVFS最常见的实现手段是用CPU来来调节电压和频率:
主要分为两种情况:
如果目标的频率比现在高,那么先调电压,再调频。
- CPU先给Power Supply外设写个值,调一下电压。
- 然后等着,直到电压变高。
- 然后CPU频率切到高频即可。
- 如果SOC部分需要调频,那通过CPU配置Sysclock generator或者PLL即可
反过来,如果目标频率比现在低,先调频率,后调电压。一般来讲,频率电压数值是提前设计好的,会有若干的频点,工作状态在这些频点之间变化。
目前业内对于DVFS已经有成熟的工具,如linux内核中现成的CPU变频工具包cpufrequtils等