0. 功耗的基本概念
功耗(Power)和能量(Energy)是两个完全不同的概念,功耗是一个瞬时的概念,而能量是一个时间内的消耗。
1. 功耗构成
SOC芯片的功耗由两部分组成:动态功耗和静态功耗。
动态功耗是设备运行时或者说信号改变时所消耗的功耗;
静态功耗是设备上电但是信号没有改变时所消耗的功耗;
这里要注意的是:在设备运行时,也需要消耗静态功耗的,因为设备运行时也是上电状态。功耗分类把静态功耗单独拿出来,只是为了理论分析方便。
1.1 静态功耗(漏电功耗)
CMOS电路中静态功耗主要是由漏电流引起的功耗。漏电流主要由以下几部分组成:
-
源极和漏极之间的亚阈值漏电流(Sub-threshold Current),亚阈值泄漏电流是晶体管应当截止时流过的电流。
-
栅极漏电流,包括栅极和漏极之间的感应漏电流(Gate Induced Drain Leakage),
-
栅极和衬底之间的隧道漏电流 (Gate Tunneling ),由于栅极氧化物隧穿和热载流子注入,从栅极直接通过氧化物流到衬底的电流,
-
PN结反向电流 (PN-junction Reverse Current),由少数载流子漂移和在耗尽区产生电子/空穴对引起。
MOS管结构图如下:
漏电流的构成如下:
亚阈值电流的计算公式如下:
VT是阈值电压;可以看到,阈值电压越高,漏电功耗就越低。但是阈值电压越高,对应的翻转速度就会越慢,延时就会越大,性能就越差。
-
可以通过调整VDD/VT来降低漏电流,从而减少漏电功耗。
-
增加VT会带来性能损失,只能在满足功能需求前提下增加VT;
-
ISUB只和VDD/VT有关,和信号翻转这些都没关系。这是一个工艺强相关的电流,RTL设计对其无影响。
亚阈值泄漏电流随温度呈指数增长(Vth)。这大大增加了设计低功率系统的复杂性。即使在室温下的泄漏是可以接受的,在最坏的情况下,温度会超过芯片的设计目标
栅极泄漏电流与介质厚度有极强的关系。工艺中通过选择合适厚度的介质将栅泄漏电流限制到一个可接受的水平上。泄漏电流还取决于栅极电压。通过使晶体管堆叠起来并使截止晶体管靠近电源/地线可以使栅泄漏电流减小。
在以往的技术节点中,漏电电流一直以亚阈值漏电为主。但是从90nm开始,门极漏电几乎是亚阈值漏电的1/3。在某些情况下,在65nm工艺下,它可以等于亚阈值泄漏。低于65nm,high-k介电材料必须进行保持门级泄漏电流检查,这似乎是唯一有效减少门泄漏电流的方法。
其他两种流电流占比比较小,所以一般不做分析。有时会把静态功耗统一为一个公式:
随着工艺先进,晶体管阈值电压降低,漏电流增大,静态功耗呈增大趋势。
1.2 动态功耗
动态功耗 = 翻转功耗 + 短路功耗
1.2.1 翻转功耗(Switch Power)
翻转功耗又称为开关功耗,是电路在开关过程中对输出节点的负载电容充放电所消耗的功耗。
当电容Cload通过PMOS 管充电时它的电压从0升至VDD,此时从电源上吸取了一定的能量。该能量的一部分消耗在 PMOS 器件上,而其余的则存放在负载电容上。在由高至低的翻转期间,这一电容被放电,于是存放的能量被消耗在NMOS 管中。
每次传输的能量消耗:
CL是输出电容的大小,Vdd是供电电压。
基于上述公式得到传输功耗如下:
Ptrans是输出翻转的概率,fclock是时钟频率,所以f就是传输的频率。(时钟来的时候,可能发生翻转也可能没有发生翻转,没有翻转的产生,就么有翻转功耗。)
最后得到的翻转功耗的计算公式:
(这里到的 f = 时钟频率*翻转概率)
从上述公式中可以看出,如果想要减少功耗,可以:①降低工作电压;②降低翻转转率;③减少负载电容
当然,这些方法的前提永远是芯片的功能要满足要求。功率再低,功能不满足的芯片和板砖有什么区别,起码板砖还能拍人。
芯片的功能要满足要求这个基础就决定了这些方法有一些限制,比如不可能把电压降到0,不可能让信号永远不翻转,不可能电容减少到0。这些都是前提
1.2.2 短路功耗(Internal Power)
短路功耗又可以称为内部功耗,主要原因是直接通路电流引起的功耗,即短路造成的。短路功耗是因为在输入信号进行翻转时,信号的翻转不可能瞬时完成,因此PMOS和NMOS不可能总是一个截止另外一个导通,总有那么一段时间是使PMOS和NMOS同时导通,那么从电源VDD到地VSS之间在短期内出现了一条直流通路,就形成了短路电流,
短路功耗的计算公式如下:
其中,tsc指的是短路电流的持续时间,Ipeak指的是总的短路电流(包含了内部电容充电的电流)。
由于传输中短路持续的时间特别短,短路功耗相比翻转功耗来说小很多。所以一般情况下会忽略短路功耗,把翻转功耗就当作动态功耗。
有的情况下,还是要考虑短路功耗,比如如何处理门控模块的悬空的输出的时候。
1.3 不同类型的标准单元的功耗
1.4 不同电路结构的功耗
SOC中不同结构的对功耗的消耗是不一样的。有几个功耗大户如下:
-
时钟树功耗:时钟树的功耗通常占整个SOC功耗的40%左右,这是因为时钟是一直在翻转的信号,所以动态功耗特别大。所以门控时钟技术就特别重要。
-
CPU: CPU是SOC主控制器,工作时CPU一般都必须要打开,随着CPU频率越来越高,功耗也越来越大。所以现在的多核,大小核就比较流行,不同场景下用不同功耗的CPU核;
-
GPU: GPU是并行处理单元,由于其算力主要来自多个模块并行计算,为了正常工作,通常需要很多模块同时运算,功耗也很大,所以很多SOC都不带GPU或者默认关掉;
-
存储器:DDR这些存储器作为SOC主存也需要时刻使用,也是功耗消耗的大户。
SOC还有很大其他模块,但是时钟树,CPU/GPU, 存储器占了绝大部分的功耗。在AI芯片的时代,CCN IP也是功耗的主要来源,和GPU比较类似。
2. 低功耗设计方法
在设计一个系统的时候,必须清楚功耗和性能的关系。也就是说,在开始设计时必须清楚地知道你的系统应用需要在得到尽可能高性能的基础上降低功耗,还是需要在尽可能低的功耗基础上提高性能,这对采用什么样的低功耗设计技术非常关键。
下图所示为基于低功耗反馈的前向设计方法。从图中可以看出,可以在五个层次上对系统的功耗进行优化,自顶向下分别是系统级优化,行为级优化,RTL级优化,逻辑级优化和物理级优化。
各层次优化的具体方法及优化效果如下图所示。
可以看到,层次越高的优化方法优化效果越明显。
体系结构级优化:多电压供电、多阈值电压、添加缓存
RTL级优化:门控时钟(对应是的降低反转率f)、减少毛刺
物理级优化:减少电容、衬底偏压
2.1 降低芯片工作电压
按照中学物理的计算公式,功率与电压和电流的乘积正相关。在芯片上计算功耗虽然没有这么简单,但是从原理上降低芯片电压仍然是降低功耗最直观最有效的方法。也正因为如此,当前大多数芯片的工作电压从最初的5V、3V一路下降,目前基本都在1V以下甚至0.5V以下。而随之而来的困难在于,随着电压的下降,标准单元的速度也会随之变慢,但是电子设备对处理速度亦即芯片频率的要求却越来越高。以移动设备为例,最初的芯片频率不过几十上百兆赫兹,而现今最快的手机SoC频率峰值已经超过2GHz。这方面也是每一代芯片升级背后所需要解决的技术难题之一。
(静态功耗和动态功耗的计算中都涉及到电压)
2.2 多阈值工艺方法
使用多阈值工艺可以在时序和漏电流之间进行一些折中。如下图所示,低阈值的标准逻辑单元具有速度快、漏电流大的特点,高阈值的标准逻辑单元具有速度慢、漏电流小的特点。所以在设计中可以在关键路径上使用低阈值的标准逻辑单元来优化时序,在非关键路径上使用高阈值的标准逻辑单元来优化漏电流。所以使用多阈值工艺可以大大减少系统的静态功耗.
这是当前芯片行业最常用也是最容易使用的设计方法之一。所谓Vth,指的是逻辑门的阈值电压。而阈值电压和功耗与速度存在如下关系:阈值电压越高,cell速度越慢,功耗越小;反之阈值电压越低,cell速度越快,功耗越高。
在实际应用中,一般采用的策略为:对于性能要求高的模块,或者频率比较高的部分,采用Vth比较低的cell,让setup更容易收敛;对于性能要求较低的模块,或者频率较低的部分,多采用Vth比较高的cell,让功耗更低。通过这种方法,可以实现在同一块芯片上,根据性能和功耗的不同要求而调整cell的使用,从而避免在不太重要的功能上浪费过多的功耗。
2.3 电源门控(Power Gating)
一颗SoC中可能包含很多功能模块如视频处理(DSP),音频处理(AUDIO),定位(GPS),游戏(GPU),存储(Memory)等,但大多数功能并不会同时开启,因此为了降低不用模块在等待状态下消耗的功耗,干脆就设计成在不用的时候把它们关闭。这就是Power Gating最初的想法。
最有效的降低功耗的手段莫过于电源关断了。其原因在于不论多低的电压,多小的电流,多慢的速度抑或多小的leakage,都不如将电源完全关闭来的彻底。
在正常工作状态,Sleep信号为低电平,高阈值MOS管处于导通状态;当处于睡眠状态时,Sleep信号为高电平,切断电源,并且由于采用了高阈值MOS管作为开关,可以有效地减少漏电流。
值得注意的是,一方面,由于模块的输入输出信号是与其他模块相连接的,很多情况下需要在处于睡眠状态的模块与非睡眠状态的模块之间的信号接口上添加隔离单元(Isolation Cell),这样在输出信号的模块断电情况下,没有断电的接收模块的输入信号仍然具有特定的驱动。另一方面,需要添加保持寄存器 (Retention Register)来保持一些特殊存储器件上的值,以保证电源开通时的正常功能。例如,当模块电源处于断电状态时,需要保存其中存储器中的值,就需要添加保持寄存器。
2.4 多电压域(Multi-Voltage Domain)
在Power Gating的基础上,还做如下考虑:
对于性能要求较高的CPU,GPU等模块,由于需求频率较高,在设计上可能采用较高的电压,而一些不太核心的模块如AUDIO,GPS等,可以采用相对低的电压来设计。这样一来,整颗芯片可能就会变成下面的样子:
在当前的设计流程中,一般使用基于模块的设计,这就使多电压设计成为可能。但电压的降低将使 MOS 管的翻转速度降低。可以根据应用场景让不同的模块在不同的电压下以不同的频率运行。
2.5 体偏置
将衬底电压偏置,提高晶体管阈值。但阈值电压的升高会影响性能,使用动态偏置的方法,在工作模式下保持较小的偏置电压,在保持模式下加强偏置电压。
值得注意的是,由于MOS 管的体偏转需要时间,电路由等待模式转为工作模式的时间较长。
参考链接:
低功耗基础:Body Bias
2.4 门控时钟
随着如今芯片的规模和功耗越来越大,门控时钟被大量地用在芯片设计中,这是在 RTL级的低功耗优化技术。
门控时钟即用逻辑门控制电路模块时钟信号的通断,从而控制该模块的工作情况。
当芯片上的某一模块的功能不需要工作时,如芯片上的 USB 模块或 SPI 接口模块没有使用时,通常会将通往这些模块的时钟停下来。通过关闭空闲电路的时钟,可以大量减少消耗在时钟树上的和不工作的触发器上的功耗。
2.4.1 一个简单的门控时钟
下图所示为一种简单的门控时钟电路结构,它由一个与门或者是或门组成。(“与”门或“或”门使用哪个取决于触发器的活跃沿)
不含有锁存器的门控时钟电路,虽然实现比较简单,但是我们无法确定EN的持续时间,如果EN的持续时间小于T/2(T位CLK的周期),那么就会产生门控无效的问题。
此外,还会引起时钟毛刺的产生:
当源时钟 CLK 为高电平时,如果CLK_EN为低电平,GCLK 将立刻变为低电平,结果一个时钟的下降沿提前出现,即产生一个类似于毛刺的不完整时钟信号,这会影响一些使用下降沿触发器的电路。同样的,当源时钟CLK为高电平时,如果 CLK_EN 变为高电平,GCLK将立刻变为高电平,造成一个时钟的上升沿提前出现,这会影响一些使用上升沿触发器的电路。总之,这类在门控时钟上出现的毛刺,对同步电路来说是非常致命的。
(使能信号的到来时间和离开时间是不确定的,如上图所示,如果是想要屏蔽前两个时钟,但是控制信号来得晚,走的到,就会产生两个时钟毛刺。)
2.4.2 基于锁存器的门控时钟
对于简单使用与门的情况,在时钟信号位高电平的时候,使能端的变化会可能会导致毛刺的产生(因为高电平是与门的非控制值,低电平时控制值)。
为了避免过早截断时钟脉冲或误产生多个时钟脉冲(或时钟上的毛刺),正确的操作强制要求使能信号(EN)从时钟活跃沿(本例为上升沿)起持续到时钟不活跃沿(本例为时钟下降沿)止为一个常量。
基于锁存器的门控时钟的思想是设计中加入了一个电平敏感的锁存器,以在时钟活跃沿和不活跃沿之间保持使能信号不变,这样就无须依靠门控电路本身来满足这一要求了。如下图所示:
2.4.3 基于触发器的门控时钟
虽然基于 Latch 的门控时钟保证门控时钟周期完整、避免产生毛刺。但会产生亚稳态,避免产生亚稳态就把锁存器换成触发器。
(使用触发器就可以同伙时序约束来避免亚稳态的产生。)
集成时钟门控单元(Integrated Clock Gating Cell
2.4.5 门控时钟的可测试性设计
在进行可测性设计的时候,如果要进行全扫描设计,则希望所有的触发器在扫描模式时都由个统一的同步时钟驱动。如果电路中存在门控时钟单元,则会使得产生的时钟 GCLK 不可控制。最简单的解决方法是在门控电路结构前加入一个或门,其输入为扫描测试模式的使能信号和门控时钟使能信号,如图10所示。在测试模式下,时钟的门控时钟单元将被旁路。
2.4.6 门控时钟的时钟树设计
在时钟树的设计中,门控时钟单元应尽量摆放在时钟源附近,即防止在门控时钟单元的前面摆放大量的时钟缓冲器(Buffer)。这样,在利用门控时钟电路时钟时不仅能将该模块中的时钟停掉,也能将时钟树上的时钟缓冲器停止反转,有效地控制了时钟树上的功耗。如下图所示,在布局时将门控时钟电路的部件摆放在一起,并摆放在时钟源 GCLK 附近,停掉时钟后,整个时钟树上的缓冲器(CTS)和时钟树驱动的模块都停止了翻转。通常的 SOC 设计中,门控时钟单元会被做成一个硬核或标准单元,称之为集成时钟门控单元(Integrated Clock Gating Cell),也就是 ICG 技术。