在便携式应用中,低功耗是产品能否独树一帜的关键所在,其决定着产品的尺寸大小与操作时间。举例来说,如果您在跨越大洋的飞行时选择便携式DVD播放器作为消遣,那么电池寿命将会成为您的首选标准之一。在本文中,我们将集中讨论许多更为常用的基于软件的技术。首先,我们从讲解某些可用于嵌入式系统的电源管理技术开始,并谈谈其在实时应用中会遇到的诸多难题。电源效率既由硬件设计与组件选择决定,同时也由基于软件的运行时电源管理技术决定。本文后半部分将集中展示如何将技术子集成到用于数字信号处理器(DSP)的实时操作系统(RTOS)中,从而使应用开发人员选择出可满足其应用要求的专用技术。我们将以德州仪器公司(TI)的(TI) DSP/BIOS操作系统为作为实例,显示运行时电源管理软件技术的实施方法。 运行时电源管理技术
尽管我们讨论的是某些可扩大标准多线程读取操作系统(OS)的特定电源管理技术,但应当强调指出的是,采用抢先式(preemptive)的多线程读取OS本身常常能够实现显著的电源节约。不利用OS的实时应用常常要求应用周期性探询接口以检测事件。从电源角度看,这样的效率是相当低的。使用OS可使应用能够利用中断驱动模式,其中程序就会在需要的时候开始执行,以响应外部事件。此外,当基于OS的应用没有可做的事情时,其就会进入空闲线程,这时则可启动低功率操作模式,以减少功耗。
但是,操作系统除了能简单地为DSP内核启用空闲模式之外,其还需要提供复杂得多的电源管理支持。在实践中,大量功率被周边设备所消耗,可能是片上器件,也可能是外部设备,此外存储器也会消耗大量功率。任何电源管理方法都应当具备管理外设功耗的支持,这是至关重要的。此外,电压与功耗之间的平方关系意味着,更高效的方法是在要求较低电压的较低时钟速率上执行代码,而不是先以最高的时钟速率执行而后再转为空闲。我们将概括讲解在操作系统中实施电源管理支持的众多机遇:
系统上电行为:
处理器及其片上外设一般均以最高时钟速率全面上电启动。不可避免的是,有些资源的供电启动还尚不需要,或者根本就不会在应用过程中用到。举例而言,MP3播放器就很少使用其USB端口与PC进行通信。在启动时,操作系统必须为应用提供一种调节系统的机制,从而关闭不必要的电源消耗器件或使之处于空闲状态。
空闲模式:
CMOS电路中的有效功耗只有在当电路进行时钟计时的情况下才发生。通过关闭不需要的时钟,可以消除不必要的有效功耗。在等待外部事件时,大多数DSP都融入了暂时终止CPU有效功耗的机制。CPU时钟的"闲置"通常由"停止"或"闲置"指令触发,其在应用或操作系统闲置时进行调用。一些DSP进行多个时钟域分区,可以使这些域分别处于空闲状态,以中止未使用模块中的有效功耗。例如,在TI的TMS320C5510 DSP中,可以有选择性地使6个时钟域闲置,其中包括CPU、高速缓存、DMA、外设时钟、时钟生成器,以及外部存储器接口。
除了支持闲置DSP及其片上外设之外,操作系统还必须提供用于闲置外部周边设备的机制。例如,一些编码译码器具备可以被激活的内置低功率模式。我们面临的一个挑战是类似看门狗定时器这样的外设。通常情况下,看门狗定时器应根据预定义的时间间隔提供服务,以避免其激活。这样,减缓或中止处理的电源管理技术就可能无意中导致应用故障。因此,该OS应当使应用在睡眠模式期间禁用此类外设。
断电:
尽管空闲模式消除了有效功耗,但静态功耗即便在电路不进行切换的情况下也会出现,这主要是由于逆向偏压泄漏(reverse-bias leakage)造成的。如果系统包括的某个模块不必随时供电,那么我们就可以通过让操作系统仅在需要时才为子系统上电,从而减少功耗。到目前为止,嵌入式系统开发商对最小化静态功耗投入的工作极少,因为CMOS电路的静态功耗非常低。但是,新型、具有更高性能的晶体管使电流泄漏显著增加,这就要求我们对可降低静态功耗及更复杂的睡眠模式给予新的关注。
电压与频率缩放(frequency scaling)有效功耗与切换频率成线性比例,但与电源电压成平方比。以较低的频率运行应用与在全时钟频率上运行该应用并转入闲置相比,谈不上节约了多少功率。但是,如果频率与平台上可用的更低操作电压兼容的话,那么我们就可能通过降低电压来实现显著的节约,这正是由于上述平方关系的缘故。这也使人们就如何通过电压缩放来节约功率进行了大量的学术研究。
尽管电压缩放是一种潜在的、非常诱人的、降低功耗的方法,但在现实世界的应用中我们对其加以利用时应当小心。这是由于我们需要完全了解该系统是否仍能满足它的实时最后期限。降低电压(进而降低CPU频率)将改变给定任务的执行时间,从而有可能导致人物错过实时最后期限。即便新频率与最后期限兼容,但如果开关频率及电压的等待时间太长,还是会出现问题。影响等待时间的因素包括如下:
* 对稳压器进行再编程所需时间
* DSP能否在电压更改期间继续执行其他任何代码
需要对外设进行再编程,如串行端口或外部存储器接口,与接收不同始终来源的周边外设相接。例如,CPU 时钟速率降低可能要求减少访问外部存储器的等待状态数量。
对用于生成操作系统时钟报时信号的计时器进行再编程的可能性,将影响操作系统时基的绝对正确性。
尽管电压缩放实际等待时间会根据所选DSP以及需要再编程外设的数量而不同,但在许多系统中,等待时间仅为几百微秒甚至几毫秒。在许多实时应用中,这将使电压缩放不切实际。尽管存在上述弱点,但仅在某些可事先预见的模式下,那些需要完全处理功率的应用,还是有可能利用电压缩放的。例如,便携式音乐播放机可利用DSP进行MP3译码及用户接口要求的一般控制处理。如果仅MP3译码要求完全时钟速率,那么DSP便可在执行用户接口功能时降低其电压,而仅在音乐数据开始流向DSP时才以完全功率工作。
在DSP RTOS中实施电源管理
上述电源管理技术的一个子集已包括在DSP的RTOS中。为了更好地说明如何将电源管理构建到RTOS中,我们将更详细地对实施进行总体讨论。
正如我们在前面讨论中看到的那样,特定系统减小功耗的方法主要取决于应用的性质以及DSP和周边外设提供的选项。因此,关键的设计目标就是高效性及灵活性。尽管下面所描述的实施是就特定RTOS而言的,但其概念可简单地运用其它操作系统,甚至用于无操作系统的应用环境。
电源管理器(PWRM)的要求
首款电源管理器实施的关键要求如下:
* 电源管理动作是应用触发而不是操作系统触发的。更改DSP操作模式或功能的主要决策由应用作出,并由PWRM调用推动执行。但操作系统可以(也应当)自动采取行动以节电,只要该行动不影响应用即可。例如,PWRM应当在CPU闲置时自动闲置CPU时钟。
* 电源管理动作由应用的控制部分触发,但应当对大部分应用代码均为透明的。例如,具有极高价值的、优化的DSP算法不必重写便可在管理的电源环境中工作。
* 电源管理器必须支持电压与频率(V/F)缩放,还必须充分利用芯片闲置与睡眠模式。
* 电源管理器必须协调整个应用过程中的电源事件处理(如应用代码、驱动器以及操作系统本身),并在特定事件发生时向已注册要求获得通知的客户发出通知。
* 电源管理特性必须在任何线程环境中可用,还必须对特定客户的多个实例可用(如一个编码译码器驱动器的多个实例)。
* 在向客户发出电源事件通知时,电源管理器必须支持事件处理的延迟完成,并在等待延迟客户的完成信号同时通知其他客户。
* 电源管理器必须对具有不同功能的不同平台是可扩展的和便携性的。
电源管理模块(PWRM)
称作PWRM的电源管理器作为DSP/BIOS的一个附属模块被添加,如图1所示。
从概念上说,电源管理器与内核并行;其并非系统中的另一项任务,而是作为一系列在应用控制线程以及器件驱动器环境中执行的API而存在的。无需进行内核修改便可合并到PWRM中;但在CPU时钟与操作系统计时器时钟相联结的平台上,DSP/BIOS时钟模块(CLK)要进行补充例行程序,以使其根据频率缩放事件调整操作系统时钟(作为PWRM的客户)。PWRM写入并读取时钟空闲配置寄存器,并通过控制CPU时钟速率及稳压电路的针对不同平台的功率扩展库(PSL)直接与DSP硬件相连接。PSL将PWRM及应用的其他部分与频率及电压控制硬件的低级实施细节相隔离。
电源管理器的作用在于管理DSP/BIOS应用中所有与电源相关的事项,既有应用开发人员静态配置的,也有在运行时动态调用的:
电源管理操作的静态配置。PWRM支持DSP/BIOS配置工具为一些电源管理操作提供设计时选项。例如,开发人员可配置闲置功能,插入DSP/BIOS闲置环路中,以自动闲置DSP缓存及CPU;或配置节电功能,在导入时自动调用,以便闲置不必要的外设或子系统。
电源管理API:
PWRM提供了API,使开发人员能够闲置特定的时钟域,以调用定制睡眠模式,并动态更改DSP CPU的操作电压及频率。凭借新型API系列,应用还可指定是否应将电压与频率同时缩放,是否可在电压降低转换过程中继续执行,以及V/F设置点属性及等待时间的查询。
电源事件的注册和通知:
为协调整个应用过程中的V/F缩放、睡眠模式以及其他电源事件,PWRM引入了新的注册及通知机制,使处理电源事件(如"将更改V/F设置点"、"已更改V/F设置点"、"将进入睡眠模式"、"退出睡眠模式"、"电源故障"等)的实体(如应用代码、外设驱动器、打包的内容以及操作系统时钟模块等)能够就其处理的特定电源事件进行注册以获得有关通知。
PWRM带给DSP/BIOS的关键特性是"中央注册系统(central registry)",使处理电源事件的代码可就其需要获得通知的特定电源事件进行注册,以获得有关通知,并能够在其不再需要通知时不进行注册。图2显示了注册与通知概念:
图2电源事件通知概念
在该例中,客户注册并获得关于特定V/F电源缩放事件通知。图中编号列出的步骤为:
应用代码进行注册,以获得V/F设置点更改通知。例如,DSP就不同的设置点要求不同的外部存储器接口(EMIF)设置,因此应用寄存器便可控制电源管理器(PWRM)代码,进而EMIF设置则可随着设置点的更改而改变。作为注册的一部分,应用代码在事件发生时告知:PWRM要调用的特定的通知功能;作为通知一部分传递的针对不同客户的参数;以及控件代码能够操作的V/F设置点(从而使PWRM不会试图启动无支持的设置点更改)。
采用串行端口及DMA传输数据寄存器的DSP/BIOS编码译码器驱动器将获得V/F设置点更改通知。 在该应用中,在较低V/F设置点上没有MP3译码发生。因此在没有执行MP3回放时,驱动器可闲置串行端口以及DMA时钟域,并设置外部编码译码器为低功率模式。
与此类似,文件系统管理器也注册到PWRM,以便获得设置点更改的通知,因为其管理着存储媒体。
应用决定更改V/F设置点(如MP3播放器模式的更改),并调用PWRM API以启动设置点更改。
PWRM确认新的设置点就所有已注册客户启用,并随后将待进行的设置点更改通知给所有已注册的客户。
PWRM向PSL发出调用,以更改电压及频率设置点。为了安全地更改V/F设置点,PSL将适当写入时钟生成及电压稳压硬件。
在设置点更改后,PWRM将通知客户设置点已发生更改。
电源管理器的配置
DSP/BIO实现了内核对象的静态与动态创建。例如,任务在设计时利用图形配置工具可静态创建,也可在运行时通过TSK_create() API调用动态创建。电源管理器的许多配置参数涉及到设计时间决策;因此电源管理的静态配置被添加至DSP/BIOS图形配置工具使用的配置文件。以下电源管理器参数是可静态配置的:
* 电源管理器启用/禁用
* 应用是否需要在导入时调用特定的用户功能以减小功耗
* 应用是否需要就频率缩放事件对BIOS时钟进行再编程
* 应用是否需要在CPU空闲时自动闲置时钟域
* 电压与频率缩放启用/禁用
* 导入时CPU频率值
* 导入时CPU电压值
* 电压缩放启用/禁用
* 应用是否需要在电压下降时等待
* 应用是否需要在DSP进入深度睡眠状态时闲置时钟域
* 哪些中断可将DSP退出深度睡眠模式
图3所示的屏幕截面图反映了配置过程,显示了电源管理器一般属性的配置列表。
图3配置电源管理器一般属性
除了电源管理器静态配置属性之外,以下属性是在运行时通过导出的电源管理器API动态再配置的:
* 当CPU空闲时,时钟域自动处于空闲状态
* 与频率一起启用电压缩放
* 在电压降低时等待
总结
在实时嵌入式系统中可部署一些设计及运行时电源管理技术。一般来说,有些技术对广泛系列的系统均是适用的,而另外一些技术则只适用于专门的应用。例如,显示了某些技术如何被整合到DSP/BIOS RTOS系统中,同时应用开发商还能够就其应用的要求选择合适的技术。