0 引言
随着科学的发展和微电子技术的不断创新,嵌入式系统的应用越来越多,并已广泛渗透到各个领域。嵌入式系统是以应用为中心,以电子技术和计算机技术为基础,软硬件可剪裁,能适应应用系统对功能、可靠性、稳定性、成本、体积、功耗等多方面严格要求的专用计算机系统。
在嵌入式系统的设计中,低功耗设计技术成为许多设计人员逐渐关注的问题,其原因在于嵌入式系统已被越来越多的应用在便携式和移动性较强的产品中,而这些产品往往要靠电池来供电。实际上,这些年来,有关电池的储能密度并没有得到大的进步。而对于便携设备,尤其是手持消费品而言,如果单靠提高电池容量来提高续航能力,似乎并不完全切合实际。因此,为提高设备性能,设计人员更需要从每一个细节考虑降低硬件系统本身的能耗。从而尽可能地延长电池的使用时间。事实上,低功耗设计也已经成为一个越来越迫切的问题,因而应该从硬件和软件两个方面来考虑嵌入式系统中的低功耗设计。
1 硬件的低功耗设计
1.1 硬件电路器件
由于现在绝大部分电路均采用集成电路CMOS工艺技术,这与以前的TTL工艺相比,本身就已经起到了降低电子元器件和整体系统功耗的作用,因此,应该继续多采用CMOS集成电路工艺技术。另外,由于采用CMOS集成工艺技术,其电路静态功耗很小(可忽略不计),而动态功耗较大,因为动态功耗是指电路高低电平翻转时产生的功耗,在电路高低电平翻转跳变沿期间,电流很大,存在较大功耗,所以,降低硬件电路功耗主要是降低电路动态功耗。动态功耗公式为:
其中,P代表CMOS芯片的动态功耗,C代表CMOS芯片的负载电容,V和f分别代表CMOS芯片的工作电压和工作频率。由公式可知,COMS硬件集成电路的功耗与工作电压和工作频率之间有密切的关系。因此,使用CMOS系列电路时,其不用的输入端不要悬空,因为悬空的输入端可能存在感应信号,并可能造成高低电平的转换。同时,由于转换器件的功耗很大,故应尽量采用输出为高的原则。
1.2 低功耗外围器件的选用
完成同样的功能,电路的实现形式有多种。例如,尽可能地将嵌入式系统的内部存储器RAM转换为外部的闪存FLASH,因为在同样条件下,读内部RAM比读外部FLASH会带来更大的功耗。也可以利用分立元件、小规模集成电路,大规模集成电路甚至单片实现。通常使用的元器件数量越少,系统的功耗越低。因此,应尽量使用集成度高的器件,以减少电路中使用元件的个数,减少整机的功耗。
1.3 微处理器的选择
嵌入式微处理器的功率消耗在嵌入式系统中占有相当大的部分,所以,选择合适的处理器,对于嵌入式系统的整体功耗具有很大影响。微处理器的功耗主要分为两部分: 内核功耗Pcore和外部接口控制器功耗Pio,总功耗等于两者之和,即P=Pcore+Pio。对于Pcore,其关键在于供电电压和时钟频率的高低;而对于Pio,除了各个专门I/O控制器的功耗外,还有地址/数据总线宽度,因为总线宽度越宽,处理能力越大,功耗也越大。所以降低功耗,必需让总线位数变窄。
要降低微处理器内核的Pcore功耗,就必须想法降低处理器的工作电压和时钟频率,其中降低微处理器的工作电压是很有效的途径,也是未来发展的趋势,目前许多的嵌入式微处理器的工作电压可降至2V以下。并且高效率的处理器都提供有多种时钟频率和工作电压的选择,以便于最大限度地节约功耗。此外,在进行系统设计时,在工作电压相差不大和系统处理能力许可的情况下,还应尽可能降低微处理器的时钟频率,现以起到节能的作用。以SAMSUNG S3C2410(32位ARM 920T内核) 为例,它就提供了四种工作模式: 正常模式、空闲模式、休眠模式、关机模式。各种模式下的功耗如表1所列。
表1 不同工作模式的时钟频率与功耗对比表
由表1可知,CPU在全速运行的时候,比在空闲或者休眠时消耗的功率大得多。省电的原则就是让正常运行模式远比空闲、休眠模式少占用时间。在类似PDA的设备中,系统在全速运行时远比空闲的时候少,所以,可以通过设置,使CPU尽可能工作在空闲状态,使用时再通过相应的中断唤醒CPU,以恢复到正常工作模式来处理响应的事件,然后再进入空闲模式。因此,设计系统时,如果处理能力许可,可尽量降低处理器的时钟频率。也可以动态改变处理器的时钟频率以降低功耗,比如可关闭不需要的外设控制器,并在CPU空闲时降低时钟频率; 而在处于工作状态时,再提高时钟频率以加快运行速度。
1.4 多CPU系统
尽管现在已有各种可在不过多加重功耗负担的前提下提高性能的技术,但用一个芯片来处理多种任务,已不是一个较好的选择。一是因为这些功能对芯片处理功能的要求可能各不相同,二是因为一个负担着多任务的芯片需要很高的速度,这样,降低功耗就变得很困难,这就使得多CPU系统(MPCore) 成为一个必然的趋势。多CPU系统的一个明显的优势是可针对不同的任务处理需要,用不同的CPU来各尽其职,以将自身的优势充分发挥,从而给予系统最优化的性能表现。另一个优势是对功耗的控制: 假如用单CPU来完成所有的功能,则不可避免地需要一个很高的CPU速度,从而造成很高的功耗,浪费很多能源。多CPU系统可以根据不同的任务来合理地启动、停止相应的CPU以完成任务,而在不需要的时候处于停歇状态,从而最大限度地控制功耗。
1.5 分区/分时供电技术
对于一个嵌入式系统来说,系统的工作量随时都在改变,不可能所有的组件任何时刻都在工作,故可采用分区/分时供电技术来降低功耗,可利用开关控制电源供电单元,在某一部分电路处于休眠状态时,关闭此部分电路的供电电源,仅对工作部分组件供电。其供电原理如图1所示。
图1 分区分时技术原理图
2 软件的低功耗设计
2.1 优化编译器
在嵌入式系统设计中,软件起着引导硬件活动的主导作用,也对系统的能量消耗有很大的影响。过去几年的研究主要是针对硬件部分,而现在,研究设计人员则更注重通过优化软件部分来降低系统功耗。要想对软件进行优化,必须选择正确的编译方法,以降低程序执行的功耗。编译器的作用就是将由高级语言编写的程序(如C/C++等),翻译成能够在目标机上执行的程序。同时,也使得程序的可读性和可维护性得到保证,提高了软件开发的效率。另外,将程序移植到新的目标机上,也只要用相应的编译器对程序进行重新编译即可,而不必重新编写程序。但是,在某些情况下,这样会影响程序的执行性能。编译器的有效性以及它所生成的代码效率,可以与汇编语言代码相比较得出。事实上,在一个程序中,每一条指令都将激活微处理器中的某些硬件部件,因此,正确选择指令可以降低处理器的功耗。通过优化编译器可以进行有效的软件低功率化,从而生成效率更高的代码,以降低嵌入式设备的功耗。
2.2 采用软件代替硬件电路
一般的硬件电路都存在功耗,所以,可以把具有数据运算处理功能的硬件电路用软件来实现,例如滤波电路,指数、对数运算电路、抗干扰电路等。但是,任何事情都不是绝对的,部分硬件电路到底能否通过软件来实现,此外,还要考虑处理大量的软件数据,需要提高处理器的性能和功耗等,同时要考虑这是否合算。
2.3 中断驱动技术设计
把整个嵌入式系统软件设计成多个事件来处理,而在系统上电初始化时,主程序只进行系统的初始化(包括寄存器、外部设备等),初始化完成后,进入低功耗状态,然后把CPU控制的设备都接到中断输入端上。当外设发生了一个事件,即产生中断信号,使CPU退出节电状态而进入事件处理,事件处理完成后,继续进入节电状态。
在嵌入式程序设计时,一个程序到底使用中断方式还是查询方式,对于一些简单的应用并不那么重要,但在其低功耗特性上却相去甚远。使用中断方式,微控制器可以什么都不做,甚至可以进入等待模式或停止模式;而在查询方式下,微控制器必须不停地访问寄存器,这会带来很多额外的功耗,所以,用软件进行设计时,除非系统本身已要求采用查询方式,否则应尽可能采用中断方式进行编程。
2.4 定时器延时程序的采用
当软件设计中需要用到延时程序时,设计人员应多使用定时器延时方法来进行设计。这是因为,通常嵌入式处理器进入待机模式后,CPU会停止工作,而定时器可以正常工作,由于定时器的功耗很低,故当处理器调用延时程序后,嵌入式系统便可进入待机模式,此时定时器可以继续工作,定时时间一旦结束,即可唤醒CPU重新进入工作,这样不但降低了CPU功耗,还提高了CPU的工作效率。而如果采用查询方式,则CPU会不断地对系统进行查询,由于CPU时刻工作,这样不但效率低下,同时处理器功耗也很大。
2.5 算法优化
优化算法多出现在嵌入式DSP中,采用大量现成的公式和计算方法,可以节省系统内部运算的时间,减少功耗; 另外,在嵌入式系统允许的误差情况下,也可以近似用比较简单的函数来取代复杂函数进行运算,从而减少功率消耗。
3 结束语
嵌入式系统的设计涉及到硬件设计和软件设计两个方面,在实际系统应用时,低功耗的设计并非是单方面的因素,需要综合考虑各种可能的原因、条件和状态,应把硬件设计和软件设计综合起来进行考虑,并对细节进行认真的分析,同时对多种可能的方案和方法进行计算和总结,这样才可能取得较为满意的效果,最终达到降低系统功耗的目的。