嵌入式系统中外围器件的能耗估算方法
2012-03-31 来源:电子工程专辑
在目前的嵌入式系统中,外围器件是造成大量能耗的主要原因,本文介绍一种精确到每个周期的外围器件的能耗计算方法,利用它可以计算轮询、I/O中断和直接存储器存取(DMA)过程的能耗,由此得出整个软件运行的能耗曲线,让软件设计工程师可确定在程序流中的哪一程序段正在消耗大量的功率,因而可以从软件设计角度优化嵌入式产品设计。
在嵌入式系统中,能量的大部分被音频、视频和无线连接这样的外围器件所消耗,本文介绍了一种精确到每个周期的能耗曲线的测试工具。通过能耗曲线,软件设计工程师可确定在程序流中的哪一程序段正在消耗大量的功率。
在处理器和外围器件之间有两种不同类型的通讯协议,即轮询和基于中断的通讯。采用DMA可以使内存和外围器件之间直接访问。各个I/O元件是以不同的运行模式工作的,对于各个模式,每一个周期值的相应能耗可由制造商的数据表中所给的功率及性能值计算出来。下面本文将从能耗优化问题的提出、方法和仿真结果三个方面讨论嵌入式系统中外围器件的能耗估算问题。
能耗优化问题的提出
过去,大量的研究工作仅单独考虑处理器的能耗,在当前的嵌入式系统中,处理器在总能耗预算中占有限的比率,有一些研究工作探讨了处理器和内存之间的存储和通迅系统的能耗优化问题。但是,目前的便携嵌入式系统常运行多媒体应用,该应用需要多种外围器件,像音频和无线连接这样的外围器件对能耗就有很大影响,对于无线连接,其影响可达到总系统能耗的60%。
有人提出了一种用于优化外围器件及其驱动器的方法,他用事件驱动的有限状态机附加约束和综合模式来定义器件驱动器的行为,器件驱动器用给定的约束条件自动合成,其目的是自动建立与器件驱动器无关的平台,该平台可很容易地被映射为专用平台,但是问题在于没有提出考虑了外围器件的系统级能耗仿真器。
本文介绍的能耗驱动的优化方法对外围器件进行精确到每个周期的能耗仿真,用于这类器件的能耗模型由制造商所提供的数据表建立。精确到每个周期的仿真器(cycle accurate simulator)可仿真MP3音频重放或MPEG视频等先进的嵌入式系统的实时应用。本文介绍的能耗曲线能够显示包括外围器件的每个硬件元件(如处理器)上每个软件程序段所消耗的能量,由此得出总的系统能耗曲线。
能耗估算的方法
如图1所示,典型的嵌入式系统由计算机、存储器、外围器件和功率驱动器组成。本文介绍了用于外围器件的通用的精确到每个周期的能耗和性能模型。目前的系统中有两种通常所使用的外围操作类型:1. 在CPU中采用特定的I/O指令来激活外围器件;2. 采用被影射的存储器I/O,此时,一部分地址空间被分配到I/O驱动器,处理器通过读取和写入这些地址和与器件通讯。图2所示为采用不同通讯方案的外围器件的抽象行为。
外围器件有两种方式将信号返回到CPU:轮询和中断。
1. 轮询方式
外围器件将数据写入状态寄存器并且处理器会周期地检查状态寄存器。轮询的优点是易于实现并且处理器始终处于控制状态,其缺点是轮询会导致CPU时间开销大且能耗增加。作为存储器读和状态检查循环中的一个环节,轮询是在一个精确到每个周期的仿真器内实现的,轮询要进行到所需的外围器件状态被满足时才会结束。在这个过程当中CPU一直处于工作状态。
2. 中断方式
当外围器件要占用处理器周期时,外围器件产生I/O中断,其优点在于仅仅当需要的时候,才会占用处理器。相应地需要特殊的硬件来创建和检测中断。此外,对每一个中断,处理器都要存储其状态,这是在具有一个中断程序和一个在仿真器内,延迟被精确到每个周期的仿真器上实现的。在被中断之前,处量器将会处于空闲状态或运行其它的任务。
中断的一个常用案例是直接存储器存取(DMA)。如果处理器正好是内存与外围器件之间的传媒,DMA就非常有帮助,在这样的情况下,DMA可使内存与外围器件直接通信,DMA控制器是通信的主控单元,且通讯在处理器外部完成,当传输完成后处理器再次处于空闲状态。
我们实现了一个通用存储器映射外围器件能耗模型,因为目前系统实现中存储器映射I/O的应用非常普遍。此外,还实现了处理器与外围器件间的轮询、基于中断的通讯和DMA通信。处围器件的能耗与性能模型被输入到ARMulator ,它是一种商用ARM处理器的性能仿真器。向ARMulator增加新的模块的时候,设计工程师必需为每一个系统元件创建简单的精确到每个周期的功能和性能模型,然后,应用软件可由所提供的编译器交叉编译,并且编译后的软件被载入仿真器,从而取得性能统计信息,要加入每个元件的精确到每个周期的模型,能耗模型是以元件制造商所提供的数据表为根据创建的。我们引用了Simunic et. al. 提出的能耗模型。
仿真器结构如图1所示。在每个周期中,ARMulator向外部模块发送有关处理器状态、数据和地址总线值的信息。处理器周期可分为两组:1. 当处理器正在运行的工作周期;2. 当处理器正在等待内存和外围器件访问的空闲周期。利用由ARMulator提供的有关处理器状态、地址和数据总线的信息,每个模块确定其状态和在该状态下的能耗。每一个总线的开关行为以每个周期为单位来计算。总线上的能耗以总线电容和开关行为来计算。两种功率器件都由功效表来计算能耗。如等式1所示,每一个周期的总能耗是各个元件能耗值的总和。
能耗和性能Profiler工具用于获取特殊硬件单元及总系统的每个软件程序段的能耗的分布情况。在每个周期中, Profiler工具决定当前执行程序并将这一周期与前一周期间的能耗添加到该程序段的能耗中。Profiler工具周期频率在代码执行前由用户确定。最后,Profiler以百分数形式报告能耗分布情况。
外围器件的能耗估算
下面以一个在仿真器中实现的外围系统为例,说明如何估算能耗分布的情况,该仿真器由一个作为I/O控制器的协处理器和一个作为音频模块的ADC转换器组成,它们结合在一起来驱动如麦克风或扬声器这样的音频器件。这些外围器件是便携式MP3拨放器这样的嵌入式系统中的典型配置。
1. I/O 控制器
I/O 控制器接收来自处理器的数据并把它转换为外围器件硬件所需的格式。在某些系统中,协处理器的作用是I/O控制器,在其它情况中用现场可编程阵列(FPGA) 或 ASIC,甚至在一些情况下用主处理器担任I/O控制器的功能。I/O控制器可与DMA直接通讯,以减少内联开关行为,并把主处理器释放出来处理其它任务。I/O控制器的高级模型如图3所示。
在模型中,协处理器队列可与处理器、内存和位于队列与音频/视频器件间的通讯信道进行通讯。当内存访问完成,协处理器将产生一个中断来激活处理器。如果操作正在记录到内存上,DMA控制等待直到FIFO被填充到一个用户定义的门限值,然后使用突发存取模式将数据写入到存储器。当系统正利用DMA从存储器播放音频/视频数据时,存储器把一串数据写入FIFO。通过突发存取模式可以减少总线操作时间,也减少了地址总线上的能耗。
I/O控制器能耗模型由制造商所给的数据表所产生。协处理器的有两种电源模式:激活和空闲模式。采用数据表中的电源电压和电流信息,由等式2可求得每个模式的等效电容值:
在激活模式中,通过这个电容可由等式3计算每个周期的能耗:
当不访问外围器件时,协处理器处于空闲模式。此时,可由等式4计算出每个协处理器周期的协处理器能耗:
Ncoproc是总线频率与协处理器频率的比率。
2. 音频模块
音频器件有待机、数模和模数转换三种工作模式。对于每一个模式,都要用器件的电源电压、电流和时钟频率来计算相应的电容。用于计算电容的等式与等式2相似。用于每个模式的每个周期能耗是通过等式5加以计算的:
Naud是总线频率与音频器件时钟频率的比率。
造成能耗大的另一个因素是语音器件,这些器件包括扬声器、耳机和麦克风。它们的模型是一个电容或一个电阻或两者的并联。等式6显示语音器件上每个音频采样的能耗:
Rdev 和 Cdev是语音器件的电阻和电容参数,faudio 是音频频率, △V是连续采样之间的电压差,Vsample是采样的电压,等式7为Vsample的计算公式:
在数模或模数转换器中模拟电压与数字数据值成比例,在等式7中给出了由数字采样值dsample计算相应的模拟电压的公式。音频模块与I/O控制器之间互联的能耗损失通过互联电容、电压和开关频率来计算的。如果互联的长度是已知的,可通过硬件平台的材料特性来计算出电容。每个采样的开关频率由每个周期上仿真器来获得。等式8表明每个音频采样所产生的互联能耗:
测试实例
为检验上述方法,我们以一个音频器件驱动器为例。器件驱动器可以记录和播放语音。当记录(播放)时,器件驱动器通过轮询接收 (发送)来自外围器件的数据。轮询完成后确定在I/O控制器队列是否为空的(不是满的)。如果不是空的(不是满的),处理器则从队列读取(写入)一个数据。如是队列是空的(满的),处理器就继续检查队列直到队列中存在一些数据(空间)。持续这个过程,直到所有的采样被记录(播放)才结束。
能耗曲线描绘工具显示(表1)了持续的队列状态检查所耗费的能量。能耗曲线表明:默认音频驱动器仅有3%的能量用于音频数据传输,而96%的能量浪费在轮询上。此外,采用处理器作为媒介来在存储器和器件间发送数据会产生额外的总线开关动作,因此,要重新设计了这个器件驱动器。
新的器件驱动器运用DMA在存储器与I/O控制器之间进行通信。当操作完成或当DMA访问的数据极限达到时,以中断方式通知处理器。表2所示的能耗曲线描绘工具显示结果表明:几乎所有的系统能耗都消耗在实际的DMA数据传输当中。
本文小结
本文介绍了一种用于估算在嵌入式系统中外围器件能耗曲线的方法。我们开发了一种精确到每个周期的仿真器和Profiler工具来估算外围器件的能耗。Profiler工具可使驱动器软件最优化。仿真表明:外围器件与嵌入式系统的其它部分的通讯的能耗占总系统的能耗的70- 75%,通过改变I/O控制器、主CPU和存储器之间的通讯协议,可以使音频驱动器的能耗减少了57%。