1 概述
对于当今的各种电子设备尤其是嵌入式系统来说,功耗是一个非常重要的问题。系统部件产生的热量和功耗成比例,为解决散热问题而采取的冷却措施进一步增加了整个系统的功耗。为了得到最好的结果,在设计初级阶段就要尽可能地考虑低功耗问题。
由于现在大部分数字系统都利用CMOS电路,因此,本文提出的思路和探讨领域,主要指CMOS电路。在CMOS电路里,功耗由下式决定:
Ptotal=Pstatic+Pshort+CswfV2dd+Pslitching (1)
式(1)中,第一项静态功耗Pstatic是由漏电流消耗的,是在电路没有正常运转时产生的,对于CMOS电路来说,这个功耗很小;后三项称为动态功耗,Pshort是在门电路输出状态发生改变时两个CMOS晶体管同时导通产生的;第三项称为开关功耗,和时钟频率f、供电电压Vdd和开关电容Csw有关;最后一项Pglitching是由电路中不需要的开关动作产生的。从式(1)可以看出,在所有的功耗中,能够改进的部分只有开关功耗。在处理器上绑定任务将影响开关电容,选择不同处理器将影响频率和供电电压。本文所考虑的系统模型包括了常用的大部分结构:硬件部件(ASICs)、微处理器(DSPs、微控制器)、存储器和内部互连网络。这里互连网络不指一条总线,而是指多条总线和点到点的连接,甚至无线连接。
目前,对硬件的功耗估计可以在不同的抽象级别上进行:从慢而精确的门级功耗估计到快但不够精确的算法级估计。折衷速度和功耗、采用流水线技术、关断某些部件、减少开关活性等方法都是系统设计中经常使用的。
软件低功耗是一个较新的问题,主要是针对移动通信、无线通信等数字信号处理器(DSP)应用提出来的。软件功耗优化通常包括以下技术:存储器存取最小化、机器指令的最佳选择、开发处理器的低功耗特性等。软件功耗估计可以在两个基本的抽象级别上进行:在低级别上,门级指令处理系统中利用现有的门级和功耗估计工具;在高级别上,则利用每类指令或指令序列的执行频率来估计功耗。后一级方法不够准确,但比前一种速度快。
由于消耗在总线上的功耗占系统功耗的很大一部分,因此,低功耗通信综合也作为低功耗软件优化的一部分。在总线上,通常是通过采用冗余码编码来减少开关活性从而降低功耗的。
2 协同设计流程
在典型的软硬件协同设计过程中,与功耗相关的问题通常是在系统划分成硬件和软件两部分后才开始考虑的。虽然这种方法可以降低功耗,但真正地面向低功耗的协同设计过程则需要从划分开始就要考虑功耗,如图1所示。从设计流程初期就要考虑功耗和控制的原因,可以用下面的例子说明:假定个过程选择用软件来完成,软件的执行时间较长,但输出结果所用的通信时间短,这样就导致了高带宽,并占用总线。但同样的过程如果用硬件来实现,硬件的执行速度更快,从而允许更长的通信时间,并可以选择低功耗的总线编码策略。这样就降低了整个系统的功耗(因为通信过程非常耗能)。
2.1 输入和输出
如图1所示,协同设计过程的输入是系统规范,也就是通常所说的行为方式。通过设计得或自动工具软件可以将这个规范分解成通过虚拟通道通信的子过程。通过软硬件划分,其中一些子过程由硬件综合来实现,而另外的子过程将通过运行在处理器上的软件来完成。虚拟通道通常由总线、点到点的连接、共享存储器或其它类型的内部通信过程来实现。
到目前为止,研究者已提出了一些系统划分方法。每一个子过程是一个通过自动化工具从系统规范中提取的基本模块。个基本模块是一个指令序列,除了第一条或最后一条指令外,不允许跳入和跳出这个指令序列。虚拟通道仅用来完成与进程的上下文(例如存活期的变量)的通信。这种分解方法产生了大量小的子过程和密集的通信过程。另一种方法是由设计者明确地指明各个过程以及各模块之间通信的数据。用后一种方法,子过程的数量得到了控制,但却失去了增强并行性的潜能。将系统分解成通过通道相互通信的子系统以后,就可以得到图2所示的任务图。
图2中,每一个字节是一个子过程。每一条边是有向边,表示各过程之间的数据依赖性。从节点出发的有向边只有满足特定条件时才能完成通信。不同的有向边进入同一任务节点(称为联合节点),表示此任务要从不同的过程接收数据并且只有在数据接收完毕后才开始执行过程。
2.2 部件的选择和系统分区
设计者对运行软件的处理器、总线的数目和采用仲裁协议的类型通常有一个总体的思路,可以初步决定系统包含部件的数目和类型。最简单的结构就是各种硬件加速器:微处理器、ASIC和通过总线连接的主存。对于更加复杂的系统则需要不同种类的处理器、多个ASIC、各种总线和多种存储器。
一旦部件的数目和类型确定下来,进程就要用ASIC或运行在专用部件上的软件实现。虚拟通道要和总线紧密连接,多个过程能用同一个处理器开且多个通道也可以共享同一总线。根据ASIC的面积和处理器的价格,在保持性能不变的情况下,一个典型分区的目标就是使系统代价最小。在最坏情况下,所有的过程在单一的ASIC上实现;而在理想情况下,处理器在不需要额外硬件的情况下完成所有的工作。
低功耗分区的代价函数在系统上是硬件、软件和通信过程功耗估计的总和。在分区过程中,在满足给定速度面积条件下,这个函数应该达到最小值。
2.3 功耗估计
正如通信过程中的功耗估计一样,对于每一个任务不管用硬件还是软件实现,功耗估计都是非常重要。
软件功耗和所用的处理器是密切相关的。通常它需要每一条指令或指令类的准确信息。功耗估计可以在不同准确度的级别上进行;仅用软件代码长度并假定所有指令的功耗相等;考虑指令的分类和指令序列;通过使用处理器的硬件模型和硬件模拟器来获得指令序列的功耗估计。对每一个处理器,根据规定的功耗特性可以采用不同的估计方法。例如,对于处理器P1仅用代码长度估计,可能要比P2用硬件模型估计得到更准确的结果。
硬件功耗估计可以在行为级到门级的不同级别上进行。在较低级别上的估计比在较高级别上的估计要准确,但更费时。由于同一个任务用软件实现比用硬件实现更耗能,因此对硬件功耗估计也不必太精确,在较高级别上的估计就足够了。硬件估计包括数据路径、控制部件和内部互连上的功耗。由于功耗依赖于被处理的数据,因此利用输入到硬件里的数据与信号相关的信息能获得更好的估计结果。
通信过程中的功耗与互连的类型密切相关。它不仅依赖于各部件连接的情况,同时与通信的带宽和编码类型有关。
3 实现方法
迄今为止,在低功耗协同设计领域,包含所有常用结构的研究报导不多,而且大部分都是针对比较简单且结果固定的一个ASIC和一个处理器的情况。许多低功耗综合系统都是从最初的协同设计环境中发展而来的。在高级综合中,模块库是可用的,并且每一个模块和操作数据都是研究的。本部分所用的方法和高级综合类似。
3.1 必需的数据
模块库由处理器(DSP、微控制器、通用CPU)和物理通信通道组成。对每一个处理器,我们假定以下数据是可用的:
*参考电压Vref和参考时钟频率fref;
*对于给定Vref和fref,在处理器上运行任务I所消耗的率Pi;
*处理器上任务i的执行时间ti。
以上所涉及的是系统的软件部分。在硬件上实现一个任务没有特别的方法。快速的硬件设计给出了下限,系统级规范对执行时间的要求则确定了上限。在供电电压不变的情况下,快速电路通常需要更多的晶体管,产生了更大的开关电容,从而消耗更多的能量。我们假定一个任务在硬件实现上表示为两个极端的设计:其中一个速度最快,消耗能量最多;另一个最慢,但消耗能量最少,如图3所示。
3.2 综合过程
在一个常用的高级综合里,通常需要完成分配、调度和任务的绑定,在协同设计过程中也可采用相同的方法。分别将影响每一个执行任务的功耗,高度将决定总的执行时间,绑定则影响通信过程。
在这里,要注意切耗和能量的区别。考虑一个任务以不同的频率f1和f2在一个处理上运行,相应的时钟周期分别为T1和T2,所需的周期数都是N,如图4。由于要做同样的计算,完成该任务所需的能量与频率无关,而功耗却随时钟频率增加。另一方面,式(2)电路的延迟(Delay)与供电电压成反比,这里考虑到门限电压VT足够小:
联合式(1)和(2)可以得到式(3)。对于不同的执行时间,式(3)给出了新功耗Pnew和原功耗Pi之间的关系:
式(3)表示:在一个给定的处理器上,对于一个特定的任务,如果允许较长的执行时间,通过降低电压可以在很大程度上降低功耗。因此,一个比较好的方法是让处理器尽可能地一直处于工作的状态,因为增加执行时间比处理器空闲时关掉它更有利。
4 实验结果
从一个现有的系统综合环境出发,通过约束逻辑编程方法,们开发了一个增强型环境来实现系统综合。在我们的例子中,任务图里有九个任务和八个过程。资源库里包括三种类型的处理器,其代价是{4,5,2},平均相对功耗是{4,6,5},资源库还包括一条总线。结果显示,不同的任务有不同的执行时间,从而产生了不同的功耗。图5绘出了这个例子的设计空间,柱状体代表给定条件下具有最小功耗的设计。从图5中可以看出:如果最大代价和临界值条件放宽一些,功耗就可以降低。
结语
在进行系统设计时,如果在设计阶段就尽可能地考虑功耗,就可以明显地降低整个系统的功耗。上面实验结果也说明了在较高级别上重视功耗的重要性,这对设计正在广泛使用的嵌入式系统具有非常重要的指导意义。