1. 功耗的组成
低功耗技术就是一系列的降低功耗的技术。在了解低功耗技术之前,我们必须先了解功耗的构成。一个SOC芯片的功耗由两部分组成:动态功耗和静态功耗。
动态功耗:是设备运行时或者说信号改变时所消耗的功耗;
静态功耗:是设备上电但是信号没有改变时所消耗的功耗;
1.1 动态功耗
动态功耗可以分为:翻转功耗(有的地方称为开关功耗)+ 短路功耗(或者称为内部功耗,英文是internal power)
1.1.1 翻转功耗(switching power)
Switching power 是一个门电路对输出电容进行充放电需要的功耗。简单的说就是一个门电路输出从0变到1和从1变到0所需要消耗的功耗。Switching power 是动态功耗最主要的组成部分。把电容乘以翻转概率定义为有效电容,那么我们可以得到经常见到的计算公式如下:
- Switching power 和电压,翻转率,负载电容有关;
- Switching power和数据无关,也就传输的数据不会影响翻转功耗,但是数据的翻转率会影响翻转功耗;
- Switching power和传输的大小也无关
由这个公式我们很容易得到如果想减少功耗,那么方法就是:
- 降低电压;
- 降低翻转率;
- 减少负载电容
1.1.2 内部功耗(internal power)
内部功耗又可以称为短路功耗,因为主要原因是由于短路造成的。短路功耗是因为在输入信号进行翻转时,信号的翻转不可能瞬时完成,因此PMOS和NMOS不可能总是一个截止另外一个导通,总有那么一段时间是使PMOS和NMOS同时导通,那么从电源VDD到地VSS之间就有了通路,就形成了短路电流。
加上短路功耗后,总的动态功耗如下:
后面的部分就是短路功耗。tsc是短路电流持续的时间,Ipeak是总的短路电流(包含了内部电容充电的电流)。由于传输中短路持续的时间特别短,短路功耗相比翻转功耗来说小很多。所以一般情况下会忽略短路功耗,把翻转功耗就当作动态功耗,
1.2 静态功耗
静态功耗是由于漏电流引起的,在CMOS 门中,漏电流主要来自4个源头:
- 亚阈值漏电流(Sub-threshold Leakage, ISUB): 亚阈值泄漏电流是晶体管应当截止时流过的电流.
- 栅极漏电流(Gate Leakage, Igate): 由于栅极氧化物隧穿和热载流子注入,从栅极直接通过氧化物流到衬底的电流。
- 栅极感应漏电流(Gate Induced Drain Leakage, IGIDL): 结泄漏电流发生在源或漏扩散区处在与衬底不同电位的情况下。结泄漏电流与其他泄漏电流相比时通常都很小。
- 反向偏置结泄漏(Reverse Bias Junction Leakage ,IREV):由少数载流子漂移和在耗尽区产生电子/空穴对引起。
1.2.1 亚阈值漏电流(Sub-threshold Leakage)
亚阈值漏电流(Sub-threshold Leakage)发生在CMOS gate没有完全关断时。一个比较好的计算公式如下:
W/L是晶体管的尺寸,Vth是热相关常量;Cox/Vth/W/L都是工艺相关,不可以调整。VGS就是VDD;
VT是阈值电压;可以看到,阈值电压越高,漏电功耗就越低。但是阈值电压越高,对应的翻转速度就会越慢,延时就会越大,性能就越差。
- 可以通过调整VDD/VT来降低漏电流,从而减少漏电功耗。
- 增加VT会带来性能损失,只能在满足功能需求前提下增加VT;
- ISUB只和VDD/VT有关,和信号翻转这些都没关系。这是一个工艺强相关的电流,RTL设计对其无影响。
亚阈值泄漏电流随温度呈指数增长(Vth)。这大大增加了设计低功率系统的复杂性。即使在室温下的泄漏是可以接受的,在最坏的情况下,温度会超过芯片的设计目标。
1.2.2 栅极漏电流(Gate Leakage)
栅极泄漏电流发生在一个电压加到栅上时(例如当门导通时)载流子遂穿通过薄栅介质的情况下。泄漏电流与介质厚度有极强的关系。工艺中通过选择合适厚度的介质将栅泄漏电流限制到一个可接受的水平上。泄漏电流还取决于栅极电压。通过使晶体管堆叠起来并使截止晶体管靠近电源/地线可以使栅泄漏电流减小。
在以往的技术节点中,漏电电流一直以亚阈值漏电为主。但是从90nm开始,门极漏电几乎是亚阈值漏电的1/3。在某些情况下,在65nm工艺下,它可以等于亚阈值泄漏。低于65nm,high-k介电材料必须进行保持门级泄漏电流检查,这似乎是唯一有效减少门泄漏电流的方法。
其他两种流电流占比比较小,所以一般不做分析。有时会把静态功耗统一为一个公式:
Ipeak为泄露电流,减少静态功耗的方法就是减小VDD和Ipeak。
2. 不同结构的功耗组成
SOC中不同结构的对功耗的消耗是不一样的。有几个功耗大户如下:
- 时钟树功耗:时钟树的功耗通常占整个SOC功耗的40%左右,这是因为时钟是一直在翻转的信号,所以动态功耗特别大。所以门控时钟技术就特别重要。
- CPU: CPU是SOC主控制器,工作时CPU一般都必须要打开,随着CPU频率越来越高,功耗也越来越大。所以现在的多核,大小核就比较流行,不同场景下用不同功耗的CPU核;
- GPU: GPU是并行处理单元,由于其算力主要来自多个模块并行计算,为了正常工作,通常需要很多模块同时运算,功耗也很大,所以很多SOC都不带GPU或者默认关掉;
- 存储器:DDR这些存储器作为SOC主存也需要时刻使用,也是功耗消耗的大户。
SOC还有很大其他模块,但是时钟树,CPU/GPU, 存储器占了绝大部分的功耗。在AI芯片的时代,CCN IP也是功耗的主要来源,和GPU比较类似。
3. 多电压技术
从前面我们了解到动态功耗:
静态功耗:(VGS就是VDD)
可以看到,动态功耗主要组成部分翻转功耗是VDD的平方;静态功耗中主要组成部分ISUB和VDD的指数成正比。所以降低功耗的最有效的办法就是降低供电电压VDD。但是降低供电电压VDD会增加门单元的延时,降低门单元的性能。所以现在的很多低功耗技术就是在满足芯片性能要求的前提下,尽可能的降低芯片的工作电压VDD.
3.1 降电压方法
那么降低电压可以有那些方法呢?
- 对不同的模块提高不同的电压。比如CPU和外设需要的频率就不一样,那么在同时满足两个模块性能的前提下,CPU需要很高的频率,那就需要高的VDD; 外设可能只需要较低的频率,那么低的VDD就能达到这个频率的延时需求,所以可以给它低VDD;
- 对同一个模块,可能不同应用需要的频率也不同。比如玩游戏的时候GPU就需要很高的频率,但是文字阅读的时候可能频率就很低;待机的时候GPU甚至就可以关掉。这样不同的应用模式,电压可以是高VDD, 低VDD, 甚至为0.
其实所有的低功耗电压技术就是上面两种方法的不同策略:
- 如果对不同的模块固定成不同的电压,那么就是静态多电压技术. (MSV: Multi Supply Vdd)
- 如果对不同的模块可以选择几种不同的电压配置,那么就是动态电压调节。同时调节电压一般同时会调整频率,所以就是动态电压频率缩放技术.(DVFS: Dynamic Voltage and Frequency Scaling). DVFS可以看作MSV的升级版。
- DVFS是需要软件根据不同的应用场景来选择不同的电压频率配置,如果更进一步,对不同模块的电压频率能够自适应的调节,那么就是自适应电压频率缩放(AVFS: Adaptive Voltage and Frequency Scaling). AVFS可以看作是DVFS的升级版。
- 如果有某个模块在有些场景下不使用了,我们可以关掉这个模块的电压,需要使用时候再打开,关断模块肯定是最省电的方式了。这就是电压关断技术(PSO: Power Shut Off)。PSO技术其实是电压调节的一种特例,也就是调节到0。PSO技术一般和MSV, DVFS,AVFS一起使用。
3.2 静态多电压(MSV)
静态多电压技术是指将设计中不同的功能模块划分为不同的电压域(Power domain, PD). 每个电压域对应于设计中的一个或多个子模块。如下图所示:
在静态多电压设计的初始阶段,就可以根据需求对设计划分电压域。划分的原则是:在满足系统性能(频率)要求的基础上,采用最低电压
比如,CPU需要运行在2.0GHz,满足这个频率器件的最低电压是1.2V,那么就可以把CPU划分为1.2V的电压域。比如外设模块,需要最高频率是300MHz,满足频率的器件电压最低是0.8V,那么可以把外设模块放到0.8V的电压域。
优点:
- 静态多电压技术能在满足系统性能要求的基础上,显著的降低功耗。
缺点:
- 增加了系统设计的复杂性。不仅需要为不同的电压域增加不同的供电引脚,而且需要更加复杂的电源网络和不同电压域之间的电平转换单元。
幸运的是现在各大EDA厂商都支持并开发出成熟的支持静态多电压的设计流程。大大降低了静态多电压技术的实现难度。
3.3 DVFS
DVFS 即动态电压频率调整,动态技术则是根据芯片所运行的应用程序对计算能力的不同需要,动态调节芯片的运行频率和电压(对于同一芯片,频率越高,需要的电压也越高),从而达到节能的目的。
DVFS的基本原理是通过监控芯片的工作负载,动态的调整各个模块工作的电压和频率,在保证性能的同时,降低电压,实现减少功耗的目的。一个典型的DVFS原理图如下:
管理单元监控工作模块的运行状态,根据运行状态控制电压生成单元和频率生成单元调整工作模块的电压VDD和频率f。DVFS实现的难点在于如何预测下一个任务所需要的最优电压和频率。一般采样软件算法进行判决来控制管理单元生成需要的电压和频率。
DVFS使用的是被称为开环调节的机制。在这种类型的系统中,CPU将会为不同的目标应用和使用频率决定最佳电压。DVFS并不针对任何特定的芯片进行校准;同时由于DVFS并不监控温度,所以SOC并不知道芯片是在40度还是在80度运行,但是DVFS的预测模型会保证同样的任务下,不同温度都能正常工作。所以这样DVFS设计之初就必须预留足够的余量。
3.4 AVFS
AVFS: Adaptive voltage and Frequency Scaling, 自适应电压与频率调节.由于工艺偏差,芯片温度等因素的影响,DVFS通常会保留较大的电压余量,导致功耗浪费。AVFS可以有效减少最差情况设计引入的电压裕量。AVFS通过检测时序关键路径的延时,动态调节电压来实现降低功耗的目标。如下图所示:
AVFS是一个闭环方案,在运行过程中自动完成调节,不需要外部干预。换句话说,它不固定电压和频率的一一对应关系,而是将对温度,传播延时等因素在运行时予以补偿。
AVFS在节省功耗的基础上增加了鲁棒性,进一步降低了功耗。另外,AVFS可以减少工艺变化带来的影响。但是AVFS大大的增加了系统设计的复杂性。除了AMD/Intel/TI这些大型芯片厂商,其他的芯片公司很少有实力实现AVFS。所以,后续讨论会以MSV,和DVFS为主。
3.5 Power Gating(电源门控)
电源门控是指芯片中某个区域的供电电源被关掉,即该区域内的逻辑电路的供电电源断开。电源门控(Power Gating)的设计如下图所示:
如果某一模块在一段时间内不工作,可以关掉它的供电电源。断电后,设计进入睡眠模式,其漏电功率很小。唤醒时,为了使模块尽快恢复工作模式,需要保持关电前的状态。保持寄存器(retention register)可用于记忆状态。
同时,为了在电源关断时不影响其他部分的逻辑,电源门控模块的输出端需要使用隔离单元(Isolation Cell),因为在睡眠模式时,模块的输出为不确定值。为了保证在睡眠模式时,下一级的输入不会悬空,插入隔离单元,保持一个"1”或”0”的输出。
Power Gating技术会结合前面的MSV,DVFS,AVFS进一步降低功耗,在模块不用的时候把VDD降到0,相当于电压调节的特殊情况。
4. 低功耗涉及的特殊单元
在低功耗多电压技术包括MSV, DVFS, AVFS和电源门控Power Gating技术中,为了正确的实现多电压或者某个电压域关断,需要特殊的单元,主要包括:
- Isolation cells
- Level shifter cells
- Power switch cells
- Always-on cells
- Retention cells
- Standard cells with PG (power and ground) pins
- Memories and other IP with PG pins
4.1 Isolation Cell
Isolation cell : 隔离单元,一种可以在某个电源域关断时,可以保持输入或者输出为常数的单元。Isolation cell (简写为ISO)一般接在可以关断的电源域的输出,防止关掉电源后无效信号传播。为什么电源域关掉后需要把输出用ISO隔离成常数呢?主要有两个原因:
1. 防止虚假的信号传播到未关掉电源的域,造成逻辑错误;
2. 防止瞬态开路电流产生的静态功耗;
如下图所示:
当左边的Voltage Area处于关断状态,右边的Voltage Area却始终处于开启状态,左边的PD关断使电路输出悬空,处于未知状态X,可能造成右边的域功能出错。另外,PMOS管和NMOS管可能同时导通,造成器件短路,形成瞬态开路电流。
一个Shutdown PD的ISO典型摆放如下图所示:
AND和OR门都可以组成一个isolation cell。ISO两种类型:
- AND类型:输出iso成0;
- OR类型:输出iso成1;
控制信号power_ctrl必须在AON域。如下图所示:
Isolation cell可以放在input端,output端,或者第三方Voltage Area中,但是考虑到power-on rail的走线,isolation cell自身的功耗,一般还是放在input端比较好,因为放在input端不需要always-on的power。
4.2 Level Shifter Cell
Level Shifter(LS): 电压/电平转换器的主要作用是将信号从一个电压域切换到另一个电压域。不同电压域的VDD是不一样的,如果不进行电压转换,器件就无法正常工作。举个例子,将1.0V的电压信号送到1.8V的电压域,有可能连1.8V区域MOS的VTH都达不到(通常VDD越高的工艺对应MOS的VTH也越高),器件自然无法工作了.如下图所示:
1.0V的驱动对1.8V的接收端来说,如果落在不定态区域(黄色区域),不一定能区分出0/1的电平。一个LS使用例子如下图所示:
需要在两个Power domain之间插入LS的情况有三种:
- VDD_PD1 < VDD_PD2;
- VDD_PD1 > VDD_PD2;
- VDD_PD1 > VDD_PD2但是两者相差不多;
情况1和情况2如果不插入LS,可能造成功能错误或者芯片不稳定;情况3虽然VDD_PD1传入VDD_PD2可能能够正确识别逻辑功能,但是由于VDD_PD1和VDD_PD2不是完全相同,为了保证时序,还是需要插入LS;
Level Shifter可以加在source的Voltage Area端,也可以加在destination的Voltage Area端。一般来说,推荐加在destination端,因为不需要连secondary pg pin,更加节省resource。
通常LS和ISO会一起用,把两个cell合成一个,叫做enable level shifter (ELS),如图所示:
ELS既有LS功能,又有ISO的功能。在库文件中会多一个level_shifter_enable_pin 也就是Enable pin。
4.3 Power Switches
Power Switches:电源开关单元提供了关闭逻辑域的电源的能力。下图是一个典型的header类型的PG cell:
供电需要数字电VDD和接地VSS,Power Switch可以关断VDD也可以关断VSS, 这样就分为两种PG:
- header 类型,关断VDD;
- footer 类型,关断VSS.
上图中是header类型。其中:
VDDG: primary power,主电源,aways-on 电源
VDD: switched power/ virtual power,关断电源,或者叫虚电源
NSLEEPIN信号控制Power Switch
NSLEEPOUT是可选的,只是NSLEEPIN的延时。在PG cell需要串成chain的时候,会需要NSLEEPOUT。
典型的PG cell是一个HVt Cell,这样静态功耗会较小。
4.4 Always-on Cells
电源管理单元需要保持激活,即使这些单元周围的逻辑已经被关闭,这就行需要用到Always-on cells. AON cell 是一种特殊的cell,它的供电来自于不会被关断的电源域(always-on domain), 但是被摆放在可以被关断的电源域。
AON cell被设计为可以放置在可关断的power domain,因为它的供电是true power或者是main power,或者叫always-on power。和Power Switch类似,AON cell也有header和footer类型两种,对应的供电分别为:
- VDDG / VSS: header类型
- VDD / VSSG: footer类型
供电是VDDG+VSS, 是header类型的AON cell,功能上就相当于一个buffer。一般的库都提供三种类型的AON cell:
- header type always-on buffer cell
- footer type always-on buffer cell
- always-on inverting cells
AON cell用于可关断电源域中一些需要始终处于激活状态的cell中。在物理设计实现过程中,某些类别的单元会被自动视为需要AON单元:
- enable pins of enable level shifters
- enable pins of isolation cells
- save and restore pins of retention cells
- control pins of switch cells.
这些pin会自动加上AON cell,直到这些特殊单元总是能够被打开和关闭为止。
4.5 Retention Cells
Retention cell: 保留单元,一种能够在电源关闭的情况下,能保持内部状态的特殊单元。Retention cell是时序逻辑,有两种类型:
- retention flip-flop ;
- retention latch.
一个Retention cell是由一个普通的flip-flop(或者latch) 加上一个额外的save-latch组成。save-latch可以在关电的时候保存状态,在重新上电的时候恢复普通flip-flop的状态。
可以看到,Retention flip-flop和普通的flip-flop的差别就是多了一个save-latch.
- Save-latch一般是一个HVt cell, 以节省静态功耗;
- Save-latch是由备用电源供电;
正常情况下,Retention flip-flop和普通的flip-flop功能一样,但是会把输出锁存在Save-latch中,当电源关掉时,由于Save-latch是由备用电源供电,Save-latch还是保持原有状态;当RESTORE信号拉成1时,Save-latch把输出送给前面的flip-flop,就能立刻恢复下电时的状态了。
如果需要保留某些关机逻辑的状态,则使用保留单元。保留单元对于希望在关闭后恢复状态的设计非常有用。保留单元有一个主电源和一个备用电源(保持通电)。
4.6 Dual Rail Memories
一个功耗友好的存储器可能会保护如下功能:
- 可以选择性地包括一个电源门控来控制主电源
- 为存储器核心和存储器外围逻辑有提供单独的电源供应
不同输入值对应不同模式,如下图所示:
PG_PE: Memory 外围逻辑的power gate enable
PG_CE: Memory 核心逻辑的power gate enable
通常需要一个顺序来控制memory从active mode转换到retention mode,再回到active mode。比如,它可能需要:active mode -> standby mode -> transition mode -> retention mode;
要回到active mode,可能需要:retention mode -> transition mode -> standby mode -> active mode
4.7 Summary
这里简单介绍了六种低功耗设计中会用到的特殊单元,但是,并不是所有的技术都会用到所有的这些单元。比如:多电压设计中,Level shifter cell是必不可少的;带可关断电源域(shutdown domain)的设计,就必须要使用isolation cells和power switch cells;如果设计是多电压域,可关断,还需要状态恢复,那么level shifters, isolation cells, power switches, retention registers 和always-on cells 就都需要了。