- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
榨汁计策:榨出每一分电能
系统的功率效率取决于软、硬件设计决策与应用系统工作性能的匹配程度。
要点
● 总功耗包括静态功耗与动态功耗两个部分。
● 硬件体系结构内的电源管理功能决定软件降低功耗的方法。
● 你的软件设计决策会对总功耗以及产品体积和成本产生重大影响。
对有线系统来说,较低的功耗可以减少系统对风扇和空调装置的要求,因为系统自身产生的热量较少。用这种方法降低冷却要求,还可以使系统工作时噪声较低,因为你可以使用体积较小的电源和较少的或噪声较低的风扇来排除机架或机箱内的热量。有线系统峰值功耗较低,能提高受热点极限制约的元件密度,以增强系统的通道处理能力。如果你将设计功耗降低,你就能减小系统的总体尺寸与总成本。
为使系统的功耗最佳,你必须使硬件的功耗特性和软件体系结构抉择与预期的系统工作性能相匹配。不管你的系统是连续工作的还是以事件响应方式工作的,都将迫使你设法使系统功率效率最大。连续工作方式的特点是处理时间长,空闲时间短,而事件响应工作方式的特点是处理时间短暂,空闲时间长。
CMOS 电路的总功耗包括两个部分:静态功耗和动态功耗。包括晶体管漏电流在内的静态功耗,甚至在电路不工作时也会发生,并与任何开关活动无关。漏电流在所有 CMOS 晶体管中都存在,它来源于反向偏置源极或漏极电流、漏极至源极弱反相电流以及隧道电流。采用好的工艺技术和设计单元库可以有效地降低这些电流的强度。这些漏电流分量的总和便形成从电源通过晶体管流向接地的非理想电流,即使这些晶体管处于逻辑关断状态也不可避免(附文“处理漏电流问题”)。对于空闲时间长的事件响应式工作状态,静态功耗要占系统总体功耗的很大一部分。
动态功耗出现在电路和信号的逻辑状态发生转换时,功耗的大小与系统电压、时钟频率以及开关活动相关。对连续工作的系统而言,动态功耗一般决定系统功率效率。你可以用以下公式粗略地估算系统的动态功耗:P=CFV2,式中 C 为动态电容,F 是开关频率,V 是电源电压。系统的动态电容取决加工工艺和设计单元库,基本上是固定不变的。功率和电压是二次方的关系,所以电源电压的高低对功耗的影响最大。但是,最小可用电源电压与电路的最高开关频率相关,在相同的加工工艺下,较高的时钟频率就需要更高的相对电源电压。
功耗估算
选用专为提高功率效率而设计的部件是降低功耗的良好开端。常用来比较处理器功率效率的基准是毫瓦/兆赫(mW/MHz)。使用这个基准时有个问题,就是它不能告诉你在每个时钟周期内处理器完成多少工作。较低的毫瓦/兆赫值未必能表明一个处理器可能需要将时钟频率加倍,并消耗更多的功率才能完成与另一个处理器相同的工作。
另一个替代功率效率基准的是毫瓦/百万指令/秒。你使用这一基准时仍要小心谨慎,因为你可能不清楚基准得分是由哪些指令序列获得的。例如,只执行 NOP(空操作)指令时功耗可能最低,但这对实际应用毫无意义。执行完全来自缓存或本机内存的算法所得到的基准得分可以表示一种较好的指令混合,而完全在本机内存以外工作则既是不可行的,也不适合于你的系统设计。
在比较处理器的体系结构时,处理器制造商提供的处理器功耗典型值和最大值只有有限的参考价值,因为功耗可能会因执行的指令、操作的数据、脱片工作数量以及动态功率管理功能的不同而相差很大。一个更有用的比较功耗的基准是毫瓦/任务;但这种量度很难实现,特别是很难用完全一致的方式去比较两种处理器体系结构。
有些处理器厂家提供一些电子表格和分析工具,以帮助你根据自己的系统的特性和所采用的电源管理功能来进行更为有用的功耗估算。这些电子表格和分析工具尽管现在还比较简陋,但可以让你用人工的方法表征系统的特性、你将要使用的指令混合、脱片工作的类型和数量,以及使用器件内置电源管理功能的影响。电源管理功能包括:关断不工作模块的电源,限制时钟信号向不工作模块传送,动态调整时钟频率,以及调整作为时钟频率函数的电源电压。
低功耗特性
许多处理器都设有睡眠模式、待机模式或低功耗模式,用以关掉特定的模块(如外设、处理器芯核以及时钟发生器的晶振)的电源。有选择地关断这些模块的电源,可使你将这些模块的功耗(包括静态功耗)降低到零,因为不关掉电源,它们做的是无用功。为了保存系统状态数据,并避免重新起动,低功耗模式通常要保留对存储器结构的供电。当一个模块恢复供电时,在电源电压和时钟信号稳定之前存在一个时间延迟。由于这一原因,在以下两种情况下以这种方法关断模块电源是不切实际的:模块的空闲时间小于稳定时间,或模块对事件的响应时间比稳定时间更快。关断模块电源是一种强制性技术,无论 在BIOS、操作系统或应用级,它都要依靠软件来根据通用或定制的运行状态模型来作出决定。
在一个器件的总功耗中,其时钟树的功耗可能占到一半,因为一般情况下,时钟信号的频率是任何其它信号的两倍,而且它必须在器件内的任何地方传送。有些系统经过分区,将独立的时钟信号域供不同的模块和元件使用,这样的系统就不需要整体系统都以最高速度工作,因而可降低功耗。使用较低的时钟频率,不仅能减少功耗,而且还可以降低对高时钟所需的边沿快速率的要求,从而减小系统的EMI(电磁干扰)。
时钟门控是一种动态电源管理技术,它是与软件无关,并对软件是透明的;它可以防止时钟信号传输到系统中当前不工作的模块,从而减少动态功耗和 EMI。时钟门控技术并不关断某一功能块的电源,因此它不会降低静态功耗,但却不受很长起动延迟时间的影响,而且它是按一个个时钟周期起作用的。
在有设计良好的分级时钟分配机制情况下,时钟门控技术能以精确的粒度等级,阻止时钟传送到不工作的部件,如总线、高速缓存、功能加速器和外设。时钟门控实际能达到的粒度等级是有限的,因为它依靠控制逻辑来决定何时和是否沿某一时钟分配分支路传输时钟信号。因此,时钟门控逻辑自身的功耗应该小于它减少的功耗。异步电路,亦即无时钟电路,是另一种使低功耗和高性能保持平衡的专用方法,类似于同步系统中理想时钟门控技术(附文“异步电路”)。
另一个常见的电源管理功能就是调整时钟频率。时钟分频器与集成的低速时钟源(一般由软件控制)是动态调整时钟频率的两个常用机制。这一类灵活性使你在不需要处理器全速运行时,能够通过减慢运算速度来线性地降低功耗。在某些器件里,集成的低速时钟源可在重新起动多个模块和一个高速时钟源时支持双速起动。器件的芯核或模块在开始运行时可以使用快速起动而功耗较小、速率较慢的时钟源,然后在电路稳定后,再过渡到慢速起动而速率更快的时钟源。
动态电压调整是一种正在得到越来越多的对功耗敏感的处理器支持的电源管理功能。时钟频率与电源电压之间的关系使你可以将电源电压与时钟频率一起降低。电源电压的动态调整依赖于软件的控制,而且由于功耗和电源电压的二次方关系,所以它除了部分关断系统电源之外,还可以获得最引人注目的整体节电效果。某个给定器件支持的一组相配时的频率和电压是在特性描述期间确定的;这一组频率和电压能确保有足够的裕量在所有支持的工作条件下,实现处理功能。
动态选择一个较高时钟频率和相应的电源电压的顺序是:为新电压配置系统,等待较高电源电压稳定,然后再切换到新的时钟频率。动态选择一个较低时钟频率的顺序与之相同,只是不需要等待电压稳定,因为当前的电源电压已高于支持较低的新时钟频率所需的电源电压。
其它特性
虽然一个器件处理一个中断所需的周期数并不是一种电源管理特性,但中断处理则是一连串既消耗功率又费时间的动作,不会产生应用级的结果。处理一个中断可能意味着要清空流水线。保存系统状态可能意味着将状态数据推入堆栈,或者切换到不同的寄存器组。为了开始执行中断,处理器或操作系统必须确定中断向量,然后调用相应的中断例程。在中断例程执行完毕以后,你需要恢复以前的系统状态,而且可能需要再次清空流水线。
这一系列内部处理作业所需的时钟周期数量可能是产生功耗的一大根源,特别是对那些周期性地从低功耗待机模式下唤醒,来执行一小段指令序列的系统来说更是如此。系统从一个等待模式下被唤醒时,可能还要重新起动系统的其它部分,然后再关断它们的电源以恢复到待机模式。
根据应用需要恰当地确定片上存储器(包括寄存器文件和缓存)的容量,这可以使访问脱片存储器的开销减少到最小程度,从而可大大减小系统功耗。连接脱片的资源(如外部存储器)一般需要比连接相同的片上资源更大的容量。存储器容量越低就越靠近芯核,因此,寄存器文件和缓存不仅加快数据和指令的存取速度,它们还为降低功耗作出了贡献。缓存锁定是一种迫使一组代码完全由缓存来提供,以避免访问外部存储器的功能。设计中的存储器容量过大,就会导致漏电流过大,从而浪费电能,除非你关断不需要的存储器部分的电源。
如果你把存储器分割成多个存储区,如果你的系统在存储区空闲时支持低功耗模式,则才有可能进一步节电。要注意的是,存储器仅仅在没有有用数据时才是空闲的——这种情况不同于当前系统不访问存储器。存储器区的最佳容量与数量根据应用确定的,例如,它取决于应用程序的大小、数据结构以及访问模式。使用片上的非易失性存储器(如闪存或 EEPROM)可以使系统将更低功耗的睡眠模式用于存储区,条件是要保存的状态数据要足够少,而处理空闲的周期要足够长。
有一种方法能使你使用较低的时钟频率,那就是在每个时钟周期里执行更多的作业。专用指令、加速器、协处理器,甚至备份或异型芯核,都是提高单位时钟周期指令并行度和降低峰值时钟频率要求,以提高系统性能的常用机制。在每个时钟周期里,虽然备份或定制的硬件块可能比基本处理器块消耗功率更多,但它完成任务的时间较短,而净功耗反而会下降。
软件考虑
节能功能和技术,如使用多个时钟域、时钟门控,以及速度较慢的低漏电流晶体管,都是与软件无关的,对软件透明的。然而,你仍需要使用有节能意识的软件来充分挖掘利用大多数硬件电源管理及相关功能的潜力。有节能意识的软件可能是BOIS、外设驱动、操作系统、电源管理中间件以及应用代码的一部分,也可能是它们的组合。
有节能意识的软件代码层次愈低,就愈通用。APM(先进电源管理)以及 ACPI(先进配置与电源界面)是有关笔记本电脑、台式电脑和服务器的、面向操作系统的配置和电源管理的行业标准规范。嵌入式系统现在还没有类似的工业标准规范。对于在某种操作系统上运行应用软件的系统来说,你可以在操作系统与应用代码间使用一个电源策略管理程序(图 1)。
电源管理程序会依照处理器的使用率,动态地调整时钟频率和电源电压。当处理器使用率下降时,电源管理程序会降低时钟频率和电源电压,以降低功耗。当处理器使用率增加时,电源管理器程序会提高时钟频率和电源电压,以便为工作负荷提供合适的性能。这类电源管理程序可能并不适合硬件实时控制系统,因为这种系统的响应时间视窗要求比较严格,除非定制的电源策略能够充分地捕捉到这些需求。
有节能意识的代码越接近应用代码,它所做出的决策就愈专用,它的功率效率就愈高。目前,可用于嵌入式软件开发的有节能意识的工具如果有的话,也很少。分析工具,如代码剖析工具、流水线查看工具以及缓存查看工具等,主要是做性能分析,但它们可以间接地帮助指出你的代码中哪几个可以降低功耗,因为它们可以帮助你识别哪些地方流水线清空和缓存丢失会浪费时钟周期,从而浪费电能。但它们不会指出重组代码如何使你将某个特定功能块保持更长的空闲时间,从而减少耗能周期。让你的软件具有节能意识现在还主要是手工运作。
有节电意识的软件发挥效能的主要领域是:尽可能快地和尽可能经常地切断所有不工作的资源或部件(特别是那些外部器件和设备)的电源,或者使之进入低功耗模式。目标硬件所支持的断电模式和低功耗模式的可用性和粒度都会限制或扩展任何有节电意识软件的潜在效能。
中断驱动的事件管理比轮询方式效率更高,所以要尽量使用这种方式。如果在各个中断事件之间,处理器确实处于空闲状态,那就要先关断处理器电源,然后再用中断唤醒它。此外还要探索是改变你的算法还是重新对循环迭代的执行顺序重新排序才能使你可以调节空闲周期的长度,从而更好地利用电源管理模式。这种方法的一个实例就是修改算法,让某个存储区更频繁地、更长时间地进入低功耗模式。
要考虑的另一种电源管理原理是:让处理器运行速度尽可能快,然后在没有作业时切断一切电源。一种相反的电源管理原理则是调整时钟频率和电源电压,使处理器在满足性能要求的最低频率和最低电压下运行。每种方法的优点都是与应用密切相关的,并应根据每一情况来确定。
存储器是提高性能和降低功耗的瓶颈,因此,尽可能减少你系统所需的总存储容量。要考虑使用硬件支持的代码压缩功能,以使你所需的存储器总容量减少到最低程度。要检查你的指令序列,以避免在总线上和在内、外存储器之间不必要地传送数据,因为这些运作会消耗大量电能,而不会增加价值。
整理一下思路
你选用处理器体系结构是一种高层次的设计决策,它既直接又间接地影响你在设计中用软件节能技术减少功耗和成本的能力。每一种处理器体系结构均以一种适用于不同系统性能的方式,实现指令执行单元、数据流结构、集成外设以及电源管理机制。
通用微处理器设计决策强调软件的灵活性和性能。出于软件灵活性的考虑,微处理器经常采用芯片外的存储器和外围芯片组,并依赖于推理执行和分支预测来提高性能。然而,这种做法是以牺牲电能与成本为代价的 。面向实时控制处理的微控制器侧重于性能、功耗与价格的平衡,因为它在一个微控制器系列内可提供许多集成外设和片上存储器选件。微控制器依靠快速的中断处理来对不确定的事件作出快速响应。DSP 体系结构使用专用的执行单元和数据流结构来优化专用的信号处理功能,从而适用于数据流式传输的处理。与微控制器不同,DSP 一般侧重数据传输和循环效率,而不是任务转接速度。
一旦选定了最适合你应用的算法、性能和需要的处理器体系结构以及相应的集成外围部件、存储器和电源管理功能,你就应该能对指令序列、数据和存储器存取模式、脱片操作,以及功能单元使用模式等作出更好的优化,从而降低功耗和EMI。设计初期就注意降低功耗问题,会有助于你降低对电源要求、增加元件密度、减少部件数量,并且降低材料清单费用,从而减少系统的总尺寸与成本。
------------------------------------------------------------------------------------------------------
附文:解决漏电流问题
晶体管的开关速度在持续提高,而晶体管的几何尺寸却在持续减小。更小和更快晶体管的一个副作用就是更难使晶体管完全关断。随着晶体管的栅极电介质厚度减小,晶体管的漏电流呈指数增加,因为栅极电介质的绝缘性能下降,电流就通过它泄漏。这种传导现象如不加控制,就会使晶体管不像一个有绝对“开”、“关”状态的理想开关,而更像一个有“开”、“漏电关”状态的器件。降低电源电压可以使你减少系统的功耗,但为了在使用更小、更快的晶体管时保持高的性能裕度,你还必须使用门限电压较低的晶体管。随着加工尺寸不断缩小到 90 nm 以内发展,漏电流在总功耗中所占的百分比也在持续增长,需要工程师付出更多创造性劳动来管理和减小高性能电路的总漏电流的增长。一种减小漏电流的方法是在非关键的通路上使用速度较慢、泄漏电流较小的晶体管,而在关键通路上使用速度较快、门限电压较低、漏电流较大的晶体管。当前,设计师们利用人工方法来选择何处使用速度较慢、漏电流较小的晶体管,具体做法是对一个使用快速晶体管电路进行静态时序分析,再用速度较慢的晶体管更换那些有最大时序间隙的区域。这种方法通过减少漏电流最大的电路来达到减少总漏电流的目的,但这是一个迭代过程,需要一个既有大漏电单元又有小漏电单元的单元库。动态失活(Dynamic deactivation)是一种在高速、易漏电的晶体管处于空闲时降低漏电流的技术,但是,你务必小心使电路的循环服从节电的要求,因为电路的开、关是有功率损耗的。如果空闲时间太短,节省的能量小于电路开关时的失活、激活能量,就不要使用这个技术。重新激活一个不工作的电路需要很长的起动等待时间,从而限制了这一技术的使用。另一种漏电流管理技术是体偏置(body bias),它可以让你控制晶体管所在衬底的偏压,以减少漏电流。这种方法可以通过控制晶体管的体电压,在需要时让电路快速运行,而在电路不工作时慢速工作,从而降低漏电流。你只要将两晶体管串联堆叠在一起,就可以使对速度要求不高的电路减小漏电流,而且比单个晶体管要小。如果泄漏功率与晶体管数量相比是一个更大的制约因素,这种技术才有意义。
----------------------------------------------------------------------------------------------------------
附文:异步电路
同步处理器体系结构依靠一个时钟分配系统,把定时信号从时钟源传送到整个系统,以使各个功能块能相互同步地运行。在大型系统中,时钟分配系统的功耗占系统工作功耗的很大一部分。使用诸如 Fulcrum 微系统公司的异步电路,亦即无时钟电路,具有种种潜在的好处,其中包括功耗较低、处理速度较快,EMI(电磁干扰)较小等。异步电路是针对延迟不敏感的电路,它不需要整体定序和时钟分配结构,因为它依靠各个逻辑块间的一个局部信号交换方法来触发数据在流水线中传输。信号交换电路交换完成信号,以确保只有在各个功能块都有所需数据时才开始操作。如果一个功能块内没有数据,它就进入空闲状态,此时只有静态功耗,直到有数据要处理为止。这种情况使得功耗与有用的任务数量成正比,这种方式相当于同步系统中理想的时钟门控功能。它还意味着通过每个块的数据处理波动是以发散的方式传播的,因而降低了总 EMI。像同步电路一样,异步电路也支持电压和时钟速度的调整,以减低功耗。在同步系统中,你经常要采取几个不连续的步骤来调整电压和时钟速度;设计师必须完全表征和验证系统的工作情况,因为电压或时钟速度的变化也会改变电路的性能以及逻辑块之间的时序关系。而在异步系统中,由于不同逻辑块间采用局部信号交换方法,又由于逻辑与控制功能对延迟不敏感,使设计师对性能和逻辑块间时序关系的表征和验证的工作得以简化。采用异步电路可以实现更快的处理速度,因为前提活动一完成,各个功能块就起动,而不需要提前等待一个系统时钟信号。因此,系统的速度就取决于各个功能块的平均时间,而不取决于最慢的功能块。平均而言,如果块间协调所需的开销很小的话,则异步系统的速度就比同步系统快。异步设计可能对低功耗系统有好处,但使用异步设计则是一种挑战。每个功能块都设定自己的速度,而且这种速度可能各不相同。几个并行活动可能按多种可能的序列完成,用所有这些序列来验证一个复杂设计是非常困难的。尽管有这样的困难,但异步设计仍可能是适用于极低功耗系统的技术,这要视系统的性能而定。
上一篇:合理选择高速ADC实现欠采样
下一篇:高速ADC:防止前端冲突