如何优化嵌入式DSP应用的功耗
扫描二维码
随时随地手机看文章
采用软硬件技术可以提高电源效率,而使用内置电源管理 API 的 DSP RTOS 更容易实现上述目的。
作者:Scott Gary,德州仪器 (TI)
无线及有线系统设计师均必须重视电源效率问题,尽管双方的出发点不尽相同。
对于移动设备而言,更长的电池使用寿命、更长的通话时间或更长的工作时间都是明显的优势。降低电源要求意味着使用体积更小的电池或选择不同的电池技术,这在一定程度上也缓解了电池发热问题。
对于有线系统而言,设计师可通过减小电源体积、减少冷却需求以及降低风扇噪声来提高电池效率。人们很少会提到这样一个事实:提高电源效率还可节省空间,用以增加能够提高系统性能的组件,尤其是设计小组希望添加一个以上处理器时,这一点非常重要。
设计嵌入式 DSP 处理器或系统功耗要求严格的系统时,采用 DSP 专用技术、操作系统及其支持软件可以降低功耗。超越传统技术的 DSP 或双处理器设计在节约能量方面表现出色。
本文将讨论传统及专门针对 DSP 的功耗优化技术,首先对使用到的术语和原理进行定义与说明。
功耗基础知识
互补金属氧化物半导体 (CMOS) 电路的总功耗是动态功耗与静态功耗之和 [参考资料 3]:
当门发生逻辑状态转换并产生内部结点充电所需的开关电流以及P 通道及N 通道同时暂态开启引起直通电流时,就会出现动态功耗。通过以下公式可以估算其近似值:
其中,Cpd 为动态电容,F 为开关频率,Vcc 为电源电压,而 Nsw 为转换的比特数。
另外,电压 (Vcc) 决定着稳定工作状态下的最大开关频率 (F)。
上述关系中包含两个重要概念:
- 动态功耗与开关频率呈线性关系,与电源电压呈二次关系。
- 最大安全开关频率取决于电源电压。
为便于本文讨论,将特定的频率及电压对称为“设定点”。
很显然,降低 CPU 时钟速率将相应成比例地降低动态功耗,由于动态功耗与电源电压成二次关系,在不影响系统性能的前提下,通过降低电压就可能额外大大降低功耗。
不过,对于特定任务集,降低 CPU 时钟速率也会成比例地延长执行该任务集的时间,因此必须仔细分析应用以确保满足其实时需求。
静态功耗主要是由于晶体管漏电流造成的。一般说来,CMOS 电路的静态功耗很低,与其动态功耗相比可以忽略不计。嵌入式应用在不工作期间通常会“闲置”CPU 时钟以减少动态功耗,从而显著降低总体功耗。
而在未来的设计中必须特别关注静态功耗问题,因为更高性能的新型晶体管的漏电流将显著提高 [参考资料 13]。
嵌入式系统常用技术
常用电源管理技术可以分为两类:通过早期硬件设计决策实现或在系统运行时实现。
设计早期的决策对满足性能及功耗至关重要,下面列出了设计中需要考虑的十大要素,其中包括硬件选择、设计策略及架构选择。大多数要素都是嵌入式系统的基本要求,其它要素则需要单独考量。尽管下列决策是在设计早期制定的,但有些仍需在整个设计周期中进行再验证。如下所列:
- 选择低功耗组件
- 分割电压与时钟域;
- 支持电压及时钟缩放功能;
- 启用保持电压门控功能;
- 利用软件中断减少轮询;
- 采用分级存储器模型;
- 降低输出负载;
- 引导时关闭非关键无动力资源;
- 尽量减少活动 PLL 数量;
- 使用时钟分割器快速变换频率。
有关上述列表的详细信息如表 1 所示。
表 1. 通过早期硬件设计决策降低功耗
确定系统架构以后,设计团队需要将注意力转向系统运行时环境。虽然以下列出的仅 14项,但在设计过程中要始终关注其中大部分内容。
- 不需要时则关闭门时钟
- 引导过程中主动关闭不必要的功耗
- 仅在需要时用门向子系统供电
- 激活外设低功耗模式
- 充分利用外设活动检测器
- 使用自动刷新模式
- 通过基准应用确定最小必需频率及电压
- 根据总体活动情况调整 CPU 频率及电压
- 动态调度 CPU 频率及电压以匹配预测工作负载
- 优化代码的执行速度
- 使用低功耗代码序列及数据模型
- 使用代码覆盖技术减少对高速内存的需求
- 更换电源时进入简化性能模式
- 平衡精确度与功耗的关系
老练的设计团队必须至少要从概念上熟悉上述嵌入式系统应用设计要素(其中一项与 DSP电路有关),有关上述列表的详细信息如表 2 所示。
表 2. 通过常用运行时技术降低功耗
实现表 1 及表 2 所述做法及策略并不容易。任何降低功耗的设计都有可能对性能产生负面影响或导致系统不稳定。下表列出了使用基本电源管理技术所面临的主要难题。
表 3. 实际嵌入式系统设计面临的主要难题
DSP RTOS 如何解决难题
大多数老练的嵌入式系统设计师都知道,表 2 中列出的许多技术问题都可以在操作系统中解决,而不必让每个新的设计项目都“从零开始”。
上述最有价值并且得到普遍认可的技术中的一个子集已包括在 RTOS 中,相关技术包括:闲置、关闭活动电源、器件驱动器通知、内存管理、V/F 缩放。由于设计目标不尽相同,将这些技术构建到 RTOS 中需要很多技巧。设计师必须可以选择混合或匹配子集。关键的设计目标就是高效性、灵活性以及操作系统的松耦合。
TI 的 DSP/BIOS™ 操作系统的电源管理器 (PWRM) 非常适于用作现有 RTOS 的电源管理模块 [参考资料 4]。尽管以下描述的实施是就特定 DSP/BIOS 而言的,但其概念可简单地运用其他操作系统,甚至用于无操作系统的应用环境。
电源管理器的要求
电源管理器实施的关键要求如下:
- 管理决策必须由应用触发,而不是操作系统触发;
- 电源管理活动应当针对大部分应用代码透明;
- 电源管理器必须支持电压与频率 (V/F) 缩放,并充分利用芯片空闲与睡眠模式;
- 电源管理器必须在应用代码、驱动器以及操作系统本身范围内协调电源事件处理,并在发生特定事件时向客户端发出通知;
- 电源管理特性必须在任何线程环境中可用,并且还必须对特定客户端的多个实例可用(如一个器件驱动器的多个实例);
- 在向客户端发出电源事件通知时,电源管理器必须支持事件处理的延迟完成,并在等待延迟客户端的完成信号的同时通知其他客户端;
- 对具有不同功能的不同平台,电源管理器必须是可扩展的和便携性的。
为满足上述的关键要求,可将电源管理器作为 DSP/BIOS 的附属模块被添加,如图 1 所示。
图 1. 电源管理器分区 [!--empirenews.page--]
电源管理器位于内核之外,其不是系统中的一项任务,而是一系列可在应用控制线程以及器件驱动器环境中执行任务的 API。
这意味着无需修改内核。但在 CPU 时钟与操作系统定时器时钟相耦合的平台上,DSP/BIOS 时钟模块 (CLK) 需要补充例行程序,这对频率缩放非常重要,因为这些例行程序能够作为 PWRM 的客户端程序适应操作系统时钟。
电源管理器写入并读取时钟空闲配置寄存器,并通过控制 CPU 时钟速率及稳压电路的平台特定型功率扩展库 (PSL) [参考资料. 5]直接与 DSP 硬件相连接。PSL 将电源管理器及应用的其他部分与频率和电压控制硬件的低级实施细节相隔离。
电源管理器拥有若干个与应用相关的任务。由设计工程师对其进行静态配置,并在运行时进行动态调用:
- 空闲时钟域 —— 电源管理器提供的接口可使特定时钟域处于空闲状态,从而降低有效功耗。此外,其还可以在 OS 空闲环路 (idle loop) 的适当点提供能自动使 DSP CPU 和高速缓存处于空闲状态的机制。
- 降低引导时间的功耗——电源管理器包含一个钩子机制 (hook mechanism),这使开发人员能够设定省电功能,以便在引导时间实现自动调用。
- 电压及频率 (V/F) 缩放——电源管理器提供的接口可使应用动态更改 DPS 内核的工作电压及频率。因此,应用可利用该特性根据相关的处理要求相应调整功耗。电源管理器 API 可设定应用中的电压是否应随同频率进行缩放,以及在降压 (down-voltage transition) 转换过程中是否可继续执行任务,转换时延由负载而定,有可能会较长;如果处理器在降压转换期间工作正常,则允许继续执行应用;此外,电源管理器还包含用于查询 V/F 设定点属性及时延的 API。
- 睡眠模式——电源管理器包含的配置接口及运行时接口使开发人员可唤醒自定义睡眠模式,以便在非工作状态期间节省电能。
- 电源事件的注册及通知——为了调整整个应用中的 V/F 缩放比例、睡眠模式以及其他事件,电源管理拥有一套注册及通知机制 (registration and notification mechanism),以使诸如应用代码、外设驱动器、封装内容以及 OS 时钟模块等实体能够进行注册,用于通知会影响这些实体的特定事件,例如“即将更改 V/F 设定点”、“完成更改V/F 设定点”、“进入睡眠模式”、“从睡眠模式中唤醒”以及出现“电源故障”等。通知进程 (notification process) 是电源管理器的重要特性。当无需通知时可使用“未登记”功能。
电源管理器 API
表 4 对运行时应用编程接口进行了汇总。
函 数 |
功 能 |
PWRM_changeSetpoint |
对最新的 V/F 设定点进行初始化更改 |
PWRM_configure |
为 PWRM 设置新的配置参数 |
PWRM_getCapabilities |
在该平台上获取有关 PWRM 性能的信息 |
PWRM_getCurrentSetpoint |
获取当前的有效设定点 |
PWRM_getNumSetpoints |
获取该平台上可用设定点的数量 |
PWRM_getSetpointInfo |
获取设定点的相应频率及电压值 |
PWRM_getTransitionLatency |
获取两个设定点之间比例缩放的时延 |
PWRM_idleClocks |
使特定时钟域立即进入空闲模式 |
PWRM_registerNotify |
注册可在发生特定功耗事件时进行调用的函数 |
PWRM_sleepDSP |
将 DSP 转换至新的睡眠状态 |
PWRM_releaseDependency |
解除此前声明的资源依赖性 |
PWRM_setDependency |
声明对电源的可管理资源具有依赖性 |
PWRM_unregisterNotify |
未注册来自 PWRM 的事件通知 |
表 4. 电源管理运行时 API 的汇总
战略实施
由于已经建立了提高电源效率的基础,下一步工作就应该进行战略定义,以便开发低功耗应用,并充分利用 OS 中的部分技术及支持。
所建议的策略包括以下 11 个步骤。该战略具有可重复性:
当无法满足电源管理目标,也就是说需要采用额外的运行时方案才能满足应用电源预算时,就可重复访问这些步骤。
- 从初始就考虑到电源效率;
- 选择低功耗组件;
- 对电源进行建模和估测,并进行相应的硬件测试;
- 针对电源管理和测量设计具备钩子机制的 HW;
- 构建可大幅提高工作效率的 SW;
- 启用简单的电源管理“开/关机切换”特性;
- 在无需电源管理的情况下也可率先进入工作;
- 重复开启“开机”特性,并测量功耗开销 (payoff);
- 开启代码生成优化功能、重置代码及数据,并调整 “热点” 监测;
- 进行校准,以实现频率及电压的最小化;
- 激活所有的电源管理特性,并进行相应部署。
表 5 对上述战略进行了非常详尽的汇总说明。我们将在下文讨论如何高效应用上述策略。
表 5. 低功耗应用开发的详细策略
音频应用范例
选用现成的 DSP 评估板 5509A EVM PLUS 板作为测试平台,该评估板不仅支持 V/F 缩放 ,还包含针对 DSP 内核与总体系统电源测量的钩子机制。
需要注意的是,EVM 作为易于使用的评估平台,并未在出厂时提供最佳功耗配置。另外,在评估效果时应谨记由于其易于配置,所以 EVM 上测量的总体系统电源数量就应多于通常情况下部署的平台。EVM 还能以 DSP 内核级与系统级两种方法测量各种技术的有效性。
步骤 1 无需解释。步骤 2 及 4 基本上都由这种特殊 EVM 完成,这充分表明了该平台的广泛适用性。步骤 3(试验)在 EVM 上进行,目的是测量各种技术的效果(如片上与片外存取的内核及系统电源、DMA 与 CPU 传输的比较、空闲外设及时钟域的作用等等)。 [!--empirenews.page--]
架构
应用范例如图 2 所示。如欲获得该应用的详细信息(包括独立的应用手册及源代码),请查阅参考资料 15。
图 2. 音频应用
音频信号经过采样通过多信道缓冲串行端口 (McBSPs) 回放到 DSP。DSP DMA 引擎向McBSP 输入或读出采样信号。立体声音频数据通过 RxSplit 任务与 Processing Task(正在处理的任务)分离为两个数据流。DIP 开关用于选择 G726 编码/解码处理或简单音量控制。两个通道随后在 TxJoin 任务中组合,然后输出至扬声器。
Control(控制)任务被周期性触发,检查 DIP 开关以确定是否需要进行模式切换(如改变处理模式或进入睡眠状态)。根据应用模式的不同,Control(控制)任务可能会检查 CPU 负载,如果合适还会更改 V/F 设定点。
与电源相关的关键设计决定包括:
- 使用 OS 线程及阻塞原语 (blocking primitive) 空闲时钟;
- 使用 DMA 提高后台数据 (background data) 传输效率。在 DMA 块中完成传输(而不是每次数据采样都从串行端口导入或读出)后即中断 CPU;
- 使用共享的外部时钟控制串行端口(无需对串行端口进行重新编程,即可进行 DSP CPU 的频率缩放);
- 注册回叫以便为编解码器驱动程序设定钩子机制,当应用进入深度睡眠模式时关断编解码器;
- 在音频质量下降前使用校准功能恢复设定点频率(及电压);
- 使用电源管理器的时钟适应功能,使周期函数在频率缩放后继续以特定速率工作;
- 使用 DSP 再引导间的电源管理器“深度睡眠”接口。
结论
总体效果总结如表 6 所示。前后模式的主要差异用黑体表示。
设置 |
DSP 内核 (mW) |
DSP 节省 (%) |
电路板 (mW) |
电路板节省 (%) |
1. CPU 工作频率为 192MHz、电压为1.6v |
207.8 |
-- |
2219 |
-- |
2. CPU 工作频率为192MHz、电压为 1.6v |
203.3 |
2.17 |
1789 |
|
3. CPU 工作频率为192MHz、电压为1.6v |
155.2 |
|
1663 |
25.1 |
4. CPU 工作频率为144MHz、电压为 1.4v |
99.5 |
|
1605 |
27.7 |
5. DSP 处于深度睡眠(完全空闲)状态 |
0.361 |
|
1352 |
|
表 6. 节电效果
- 模式 #1 为基准测量,全部使用片外代码。
- 模式 #2 消除所有片上代码,DSP 级节电效果较小,但板级节电达到 19%。
- 模式 #3 包括一些引导时间节电配置(如关闭 DSP 的 CLKOUT 信号、未用计时器的自动空闲配置以及关闭板上 LED)及在 BIOS 空闲环路中的闲置,从而可实现25% 的 DSP 内核级节电。
- 模式 #4 为设定点在 1.4v 下降至 144MHz 时的功耗,在该模式下可进行音频处理,同时仍能满足实时最低要求,从而实现 52% 的 DSP 内核级节电。
- 模式 #5 为应用处于待机模式下的功耗,该模式配置包括外部编解码器关断、设定点支持以最小电压最大频率快速启动驱动、DSP 处于门控时钟深度睡眠模式,该模式下的待机功耗仅为 361µW。
设计人员可根据特定应用的要求选择适用的技术,从而更有利于支持 RTOS 集成高回报技术。借助 OS 的这种支持功能,设计人员能够以低开销方便安全地提高应用电源效率。
本文讨论的电源优化策略是一种从嵌入式项目之初即可用于降低与调节应用功耗的通用模型。当测量功耗无法满足要求或需要采用额外的运行时技术时,上述策略可重复使用,先期步骤也可重复进行。例如,在音频应用中采用这种策略,仅需几种高回报的节电技术,即可节省大量电能。