随着智能手机等移动应用的兴起,目前的处理器设计不仅要提供高性能,还必须要符合另一个重要指标,那就是低功耗。通过简单地降低电压或频率来实现低功耗不可取——试问有谁会去买性能打过折的产品呢?那么,低功耗CPU到底又是怎么实现的?EDN小编今天来和大家理一理,简单来说,我们可以从微架构设计和制造工艺这两个方面来看。
要想实现低功耗,就必须了解电路中功耗的来源[1]。对于CMOS电路功耗主要分为三部分,分别是:电路在对负载电容充电放电引起的跳变功耗;由CMOS晶体管在跳变过程中,短暂的电源和地导通带来的短路功耗;以及由漏电流引起的漏电功耗。其中跳变功耗和短路功耗为动态功耗,漏电功耗为静态功耗。以下是SoC(即CPU)功耗分析的经典公式:
其中:ƒ是系统的频率;A是跳变因子,即整个电路的平均反转比例;C是门电路的总电容;V是供电电压;τ是电平信号从开始变化到稳定的时间。
在深亚微米工艺下,电路的功耗主要是跳变功耗,短路功耗和漏电功耗可以忽略不计。但随着工艺发展到纳米级,漏电功耗在整个功耗中的比例将显著提高(如下图所示)。
图:不同工艺下动态功耗和静态功耗对比图
基于上面这个功耗分析的公式,我们要设法降低的主要就是其中的第一项和第三项功耗,即跳变功耗和漏电功耗。我们首先来看微架构设计,基本思路如下图:
因此,我们可以衍生出很多的低功耗微架构设计方法。里面比较重要的一些如下1:
•时钟门控:给每个模块的时钟加上门控,不需要时将它关闭,从而尽可能降低功耗。
•电源门控:原理同上,尽可能降低动态功耗和漏电功耗。
•异步电路:对于异步电路,大家第一反应好像可以提高系统处理速度。但是因为异步电路需要进行多次握手,处理速度未必比时序电路快多少。异步电路的另一个重要作用就是降低功耗,超过一半的功耗都是消耗在时钟树及其连接的触发器上,采用异步电路能取消时钟,从而消除时钟树而降低功耗。
•并行技术:并行技术是将一条数据通路的工作分解到两条通路上完成。并行结构可以在不降低计算速度的前提下,将工作频率降低为原来的一般,同时电源电压也可降低,可以明显的降低功耗。但这种结构是以牺牲面积为代价的。
•流水线技术:采用流水线技术,在较长的运算路径分成多个较短的运算。这样工作频率虽然没有改变,但每一级运算的路径却变短了,是电源电压可以降低,所以流水线技术也可以降低功耗。
•降低频率:利用并行处理增加电路来降频,牺牲面积来降低功耗。
•降低电压:电压受频率影响,可以通过降低频率来降低所需电压。当频率降低,电路开关速度降低,就能有更多时间去进行充电,因此所需充电电压就能降低(电压越大充电速度越快)。同时,可通过流水线分割组合逻辑。若同时保持频率不变,电路能有更多时间去进行充电,从而降低所需充电电压。
•动态电压频率调整(DVFS):动态调整频率电压到需要的值,避免浪费,从而降低功耗。
•全局异步局部同步(GALS):将系统划分成不同的时钟域,每个域使用合适的时钟频率,避免频率浪费,同时提高系统速度,也方便进行时钟门控。
•编码优化:SoC内部的总线的电容在对于整个芯片还是占有很大比重,所以降低不同数据间转换时的总线平均翻转次数,就可以降低设计的功耗,这也是各种那个编码优化所要达到的目的。常用的编码方式有独热码(One-Hot)、格雷码,还有一些更加复杂的低功耗编码,如窄总线编码、部分总线反转编码和自适应编码等。使用编码优化来降低芯片功耗的同时要注意由它带来的面积增加的问题。
•多电压域多电源(Multi-Voltage/Multi-Supply):需要高性能的部件供给高电压,不需要高性能的部件供给低电压)。
•系统设计时考虑优化,如减少电路开关,用RAM代替寄存器文件,减少存储器读写。
除了上述这些方法,高效的低功耗技术还有许多,比如衬底反偏(加反向电压降低衬底漏电),多阈值单元(Multi-Vth cell)等等设计方法。下图是一些比较热门的RTL级低功耗技术。
此外,对于CPU而言,PPA(性能、功耗和面积)也总是在互相权衡的。通过增加CPU内核数和采用ARM的big.LITTLE架构等,也是近年来常用的低功耗设计方法。
芯片的制造工艺在不断向前发展。一个常识是,工艺越先进(纳米数越低),功耗和性能都会提升。但是其原因又是为何?此外,FinFET工艺又是什么,为什么会更进一步实现二者的提升?这要从晶体管说起了:
这里,我们尽量把事情说简单。上面这副示意图中就是一个典型的半导体晶体管。其中两个绿色的部分(源极Source和漏极Drain)分别是晶体管的两级,类似电池的两级。红色的部分就是用来控制这两个电极的通断的,而通断分别对应数字化时间的1和0。所谓数字化世界其实也就是非常非常多的晶体管的通断变化组合出来的。红色栅极(Gate)的宽度就是我们通常所说的沟槽宽度或者线宽——我们通常说的多少多少nm就是指的这个宽度。
这个栅极的宽窄决定了性能和功耗。晶体管的开关速度(每次0/1变化)对应处理器的运算速度。红色的栅极越宽,两个绿色电极就越远,导致它们直接连通一次的时间就越长。所以栅极越小,晶体管一次状态变化所需的时间就越短,单位时间的工作次数就越多。这样一堆晶体管单位时间可做的运算自然就更多,所以性能更好。
再来看功耗。栅极是通过加电压帮助两个绿色电极通电的。而栅极越宽,就需要更高的电压才能导通两极;栅极越窄,导通就更容易,所需的电压也就越低。功耗的大小与电压的平方成正比,所以导通电压的下降是新工艺能够降低功耗的主要因素。还有一个因素,即便是电压相同,通过导体的面积和长度越小,电流也会越小。更小的栅极等于是缩小的导体,因此也会减少功耗。
那么,FinFET又是什么?
如前面所说,栅极越窄,即纳米数越低,功耗和性能都有明显收益。但是凡事都有两面,有收益就会有代价。上图左图(即前面那张图的结构)中的红色栅极越窄,则栅极接触下面的面积就越小。前面说了,绿色源漏(SD)两极的通断是靠栅极通电压控制的,但是面积越小这个栅极的控制力越弱,这就会导致出现两极之间的漏电越来越大。这个问题在20nm时达到了一个很大的值,对功耗影响很大。所以早在10年前,就有人提出了右图中的3D晶体管的新结构。由于这个结构看上去像张开的鱼鳍,所以被叫做FinFET技术。FinFET技术最主要的好处是红色的栅极变成三面环绕绿色SD两极之间的通道了,这样栅极就又重新具备了对这个通道的强力控制力,原先通过减小栅极宽度的方法就可以继续了。有人可能会有疑问,十年前就提出为什么现在才用,其实概念到实施不是那么容易的。大家脑补一下这个结构是在20nm的范围里做的,导致工艺要多出十几二十层来,这不仅是难度,也是成本。
1.知乎网友young cc对“低功耗CPU是怎么做到的?”话题的回答;
2.SoC设计中的低功耗技术,裴希杰 田泽,西安石油大学计算机学院。