介绍
能量以热量形式消耗,温度升高芯片失效率也会增加,增加散热片或风扇会增加整体重量和成本,在SoC级别对功耗进行控制就可以减少甚至可能消除掉这些开支,产品也更小更便宜更可靠。本章描述了减少动态功耗和静态功耗的各种技术。
功耗源
三个主要的功耗源:浪涌、静态功耗、动态功耗。
浪涌电流:器件上电时最大瞬时输入电流。浪涌电流在应用中也称为启动电流。浪涌电流与设备有关,如电机启动电流前几个周期时正常满载电流的数倍。
基于SRAM的FPGA也有很明显的浪涌电流,上电时器件没有配置,需要外部下载数据配置编程资源(查找表、布线资源)。反熔丝FPGA无需上电配置,所以没有浪涌电流。
待机电流:关断主电源或系统进入待机模式下产生的电流。待机电流产生的功耗称为待机功耗。待机功耗也与元件电气特征密切相关。待机功耗也称为静态功耗,静态功耗也包括晶体管漏电流产生的功耗。
动态功耗(开关功耗)是门电路输出转换时,由逻辑转换所引起的功耗。动态功耗定义公式:
逻辑0->1,电容充电;逻辑1->0,电容放电。
ASIC总功耗:
在典型应用中,动态功耗占到了总功耗的80%
在各设计抽象层次降低功耗
降低功耗应该在所有设计层次上进行:系统层、逻辑层、物理层。层次越高就可能越有效。
在高的抽象层次上进行功耗的优化效果更好,如在系统和体系结构级可以达到最大的降低效果。
为了最大程度降低功耗,各抽象层次在设计时就要把功耗因素考虑在内。
上面的100X打错了是100%
系统级低功耗技术
片上系统方法
纳米级高端芯片的IO使用比内核更高的电压供电(3V3),占总功耗的50%。如果整个系统包含多个芯片,这些芯片间的连线将产生大量功耗。片上系统方法学主要关注降低功耗,缩减面积以及降低成本的手段。
硬件/软件划分
嵌入式处理器在大规模数字系统中广泛使用,某些功能可以用硬件实现,其余部分可以用软件实现。
通信算法具有高度递归的性质,少量代码可以负责大量的处理任务。这些资源密集型模块用硬件识别和实现,就可以节约大量功耗。
使用硬件综合工具从Verilog或者VHDL描述的模块中提取出物理模型。编译器也可以将用高级语言编写的程序编译成嵌入式处理器所使用的原生指令集。
一种比常规方式更有效的HW/SW划分方法是使用基于模型的方式,如下图。
这是一种基于给定规范建立系统模型的想法。模型要么完全自己建立要么使用可复用的已有模型库。随着库的增加,可以大大缩短设计时间。
可以使用SystemC建立模型,该语言可以用于对硬件建模。
低功耗软件
修改应用程序可以节约大量能耗,得到“更绿色”和能效更高的系统。
高级语言便于使用,但是有些结构难以用其实现,使用高频轮询实现这样的结构,这会导致较高的能耗。所以使用高级语言时要避免使用复杂原语。
嵌入式应用使用的C代码可能会使用若干循环。一些应用中,90%的运行时间可能都在执行这些循环。
优化方法:合并循环,使执行的指令数减少。基于硬件体系结构或处理器指令和寄存器的实现。我理解的就是更高效的利用硬件,而不是通过软件程序。
选择处理器
首先要选择合适数据宽度的处理器。如果使用简单的MAC(Multiply Accumulate Unit)能满足运算要求,就没必要用专用的DSP处理器,这样可以显著降低功耗。
图中是一个节省功耗的系统体系结构。利用微处理器进行控制,同时用协处理器或DSP进行数据处理。最好的系统体系结构用特定的机器(协处理器)来执行这个任务,使任务在最小且能效最高的机器中完成。即特定功能使用特定硬件实现从而实现降低功耗的目的。大多数情况下,微处理器和协处理器不会并行运行。
体系结构级降低功耗技术
高级门控时钟
同步数字系统中,时钟分布贡献了整个数字开关功率中的绝大部分。很多情况可以通过门控时钟将绝大部分不使用的电路关闭。
插入门控时钟前和插入后电路功能并没有改变,所以可以用一致性检查工具进行验证。
组合门控时钟方案在输出不变时使触发器时钟失效,可以用于降低5%~10%的功耗。时序门控时钟能减少连接到带有门控时钟的寄存器块的设计部分的冗余切换。使用时序门控时钟时,后续的流水线阶段也使用同样的条件进行门控操作。
时序门控时钟在实现时会加入额外的逻辑,所以不适用于多位宽数据。
使用门控时钟最大挑战:识别出流水线上“多余的”或“不关心”的状态。一旦该工作完成,时序门控时钟就可以降低大量功耗,典型情况可以降低15%~25%开关次数。根据文献,时序门控始终转换只有在多于16个触发器的情况下才更有效率。
动态电压频率调整(DVFS)
DVFS可以在对频率不敏感的应用阶段降低时钟速率和供电电压,在性能适度损失的情况下大幅降低功耗。
当今CMOS工艺的绝大多数处理最大频率往往与供电电压相关,所以在低频时处理器可以工作在低供电电压下,所以DVFS可以通过频率和电压调节节省大量能量。
DVS使用一个可编程的DC-DC开关电压调节器,一个可编程的时钟产生器和一个宽操作域的高性能处理器。
总之,通过负载动态调整处理器的电压和频率,DVS能提供峰值满足运算要求的性能,这种方法好处能体现在低性能处理器上。
基于缓存的系统体系结构
FFT要求频繁访问系统存储器的数据,这样的存储器能效不高,增强型FFT体系结构需要在系统存储器或RAM与处理器之间增加缓存。
在处理器需要之前,预先将相关数据从主存中取到缓存。小范围的缓存能使计算能耗大量下降,极大地提高了FFT的能效。
对数FFT体系结构
大规模运算的应用,对数系统(LNS)比线性系统更好。LNS降低每个bit活跃度,并用加减法实现乘除运算,使其效率比线性系统更高。基于LNS实现FFT有节约大量功耗的可能。缺点是加法器和减法器的宽度会增加,导致需要以指数级增大的查找表。(这里没懂,google也没搜到)
异步(无时钟)设计
传统的设计方法学会形成大规模时钟数结构,潜在地增加了SoC的平均功耗。并且时钟分配网络的设计也耗费了设计者大量精力,最可能存在的问题是时钟偏移。另外一个问题就是相当大的功耗。
由于时钟会导致上述问题,所以从设计中移除时钟是一件很有诱惑力的想法。这就是异步设计的基本意图。但是不能简单地直接移除电路,一部电路本质上进行自我控制,因此也称为自定时电路。
异步系统两个模块使用握手接口进行交互,书里5.8的图应该给错了。
移除时钟使得能效提升。时钟耗费了许多能量,将其移除使得能效大大提升。除此之外,因为所有未工作元件几乎部消耗能量,所以异步电路动态功耗接近0.
异步电路依赖于延迟不敏感编码的信号交换接口,其中最流行的是双轨道编码。
双轨道编码用两根线传输每个数据位,因此称为双轨。双轨道编码一根线表示逻辑1,另一根表示逻辑0.两部分能可靠地彼此通信而不受线上延迟的影响。
电源门控
电源门控可以在模块不使用时暂时将其关闭。目的:减少晶体管漏电,可以在逻辑模块不操作时将其关闭。
两类电源门控:细粒度电源门控、粗粒度电源门控。
细粒度电源门控
每个门和地之间存在一个开关晶体管。
主要负担:库IP提供者、标准单元设计者身上。
电源门控尺寸必须能满足任何情况下对开关电流的要求。门必须较大以便不会引起可测量的压降。此外对头部开关PMOS和脚部开关NMOS做出选择。开关电流相同时,脚部开关面积更小。
使用细粒度电源门控可以将漏电减少为原来的1/10.
粗粒度电源门控
粗粒度电源们空中,电源门控晶体管是供电网络的一部分而不是标准单元的一部分。本质是创建一个电源开关网络。
粗粒度不完全依赖于库的质量,EDA工具对其处理能力影响更大。
电压关闭区域的备用晶体管大小和数量会影响对该区域的驱动能力。这将导致IR降幅变化并使性能衰弱。所有头部开关同时再次打开,会有瞬间充放电电流和短路电流产生。这种电流综合称为上电冲击电流(感觉和浪涌电流差不多)。对于避免器件故障和潜在的芯片失效,这种电流是个关键。
不管实现哪种类型的电源门控,都需要改变RTL,设计一个电源控制器对需要关闭的模块进行控制。百万门规模的AISC很轻易就有20个以上的电源域。这种规模的设计混用粗粒度和细粒度两种技术。
电源门控需要在“关闭”域和“开启”域之间的逻辑或信号上加入隔离的单元以保持设计完整性并避免功耗损耗。模块断电,输出浮动,可能在阈值电压内产生不期望的电流。所以需要隔离模块将下电模块输出信号固定在1或0.可用简单的或、与逻辑作为输出隔离器件。隔离单元要么在RTL插入,要么在指定参数和要插入的模块后由EDA工具自动插入。现在的EDA工具可以做到该功能,一部分综合时插入,其余的在布局布线时插入。
多阈值电压
多单元库包含至少两组功能相同但阈值电压不同的单元。高阈值电压单元较慢但是漏电少;低阈值电压更快但是漏电更多。
缺点:增加生产的复杂性、增加设计时间。设计不恰当的话可能导致使用功耗增加。
测试不同Vt单元是否能达到期望性能时,最好在综合和布局优化阶段进行。逻辑综合或优化过程的门级映射阶段由综合工具实现,布局优化由物理实现工具负责处理。
为满足性能,可以先用低阈值电压库进行综合满足时序要求,在吧不需要的高性能或低阈值单元用高阈值单元替换。原因:大多数应用是以满足时序要求为前提条件的。。低阈值电压库速度快,面积小,高阈值电压单元耗费更多运行时间,面积也更大。
若主要目标是功耗,第一遍综合则使用高阈值电压单元更合适,再用低阈值电压单元进行替换。
多电压供电
设计可以分割成独立的“电压域”,根据每个区域对时序的要求而使用不同的供电电压。
一种方法:时序要求严格的模块置于标准电压下操作。不那么严格的路径可以安排到其他区域。
过去这种方式需要手动插入指定的转换单元在,增加了设计的风险。现在很多EDA公司都能提供可以自动插入电平移位单元的工具。
存储器电源门控
典型SoC中SRAM消耗了总功耗的1/3,其余部分由时钟数和随机逻辑消耗。所以存储器架构十分关键。
最简单的方法:在不使用存储器矩阵时将其关闭。
可以讲存储器分割成多个部分,需要时打开。
划分成小块后,读周期总数仍是相同的,但是每个周期消耗的功耗会大大降低。
另一种技术:基底偏压存储器。在不使用存储体时将其反向偏置,提高了阈值电压降低了漏电功耗。
另一种方法:多模式给存储器供电。全电压供电保证对存储器操作正常进行,不需要读写时,可以编程降低其供电电压,仅保证数据不丢失。
使用堆叠式存储器:存储器堆叠在裸片(Die)上。堆叠式存储器显著降低了互联电容,并且降低了功耗。对存储器带宽要求高的场景中,相关存储器可以堆叠式封装,操作系统或其他应用则可以置于外部存储器中。