嵌入式系统 低功耗设计

摘要

本文简述嵌入式系统中主要功耗的分类、来源,及如何从软件、硬件方面进行低功耗设计。文中提到的低功耗设计方法会比较简单,因为把最重要的指令缓存、数据缓存部分给简要跳过了,这部分实在是太复杂、太抽象,需要研究这部分的朋友可以直接去看指令存储、数据存储相关的论文。
在这里插入图片描述

特性

与通用系统相比,嵌入式系统在功耗方面具有不同的特性。首先,嵌入式系统的软件和硬件都是基于特定场景而单独设计的,例如多媒体消费设备、工业、航天、军工等系统,特性跨度非常大,需要不同的硬件架构,以便根据目标应用的预期目标在性能和成本之间进行最佳权衡。其次,与通用系统不同,嵌入式系统的特点是资源有限且能耗预算低。在未连接电源的限制下,使用集成电源(例如电池)限制了它们的运行时间。第三,为了可靠和可预测,嵌入式系统提供了高计算能力,以满足各系统任务的实时性要求。
嵌入式系统的小尺寸特性会限制散热的可管理量性,散热一般较差,而整体功率过高时会导致系统发热。据统计,每上升15度,设备故障率将会增加2倍,这种特性对医疗设备等特殊系统的影响至关重要,另外一些医疗嵌入式系统接触人体或直接植入到身体内,稍微温度过高就会对人体产生影响,这就对系统的功耗有了更高的要求。

功耗分类

想想看,抛开虚无的软件不管,嵌入式系统运行时,其实就是电源驱动晶振产生时钟,然后芯片内部的各种晶体管在时钟信号的作用下不断地翻转,组合出各种逻辑,然后驱动外设工作。最终,电能就被这些动态变化和静态不动的部分给慢慢消耗了。
所以,嵌入式系统的功耗大致可分为两类,即动态功耗和静态功耗。动态功耗由负载电容的充电和放电、晶体管的翻转产生,漏电功耗是由于即使在器件处于非活动状态时也会流动的漏电流而产生的。
动态行为可以视为数据计算,静态行为可以视为数据存储,而一个典型的嵌入式硬件系统由指令集处理器内核、数据缓存、SRAM、DRAM等几部分组成,数据的计算和存储在其中的分布如图所示
在这里插入图片描述

据专业人士统计,各部分功耗大小是不同的,具体情况如下图所示,其中功耗最明显的是指令存储架构(IMO: Instruction Memory Organization)和数据存储架构(DMH: Data Memory Hierarchy),这两个部分几乎由快70%的占比了,因为从外部存储中取指令和数据很消耗能量。
所以很多大佬会在提高指令和数据的缓存的命中率入手,以此减少系统的功耗。在这两个方面研究的论文实在是太多了,而且都是满篇公式、图标乱飞的情况,咱现在还是小小的嵌入式软件工程师一枚,没到那个层次,现在还不想研究那么深入的东西,有感兴趣的小伙伴可以去深入研究。
在这里插入图片描述

低功耗设计

低功耗的设计核心思想

  • 芯片外硬件方面:
    • 降低电压,只要能够正常驱动系统工作,且能够防止电压波动导致的性能衰退或丧失即可。
    • 不需要某些功能运转时,停掉对应的硬件供电
  • 芯片内软件方面
    • 单位时间内尽可能的少做计算,无计算需求时进入低功耗,少干活多睡觉。

功耗评价

任何设计都需要一个标准体系进行评价,那如何评价功耗设计呢?
功耗(Power Consumption):这是最直接的衡量标准,指的是电路或系统在工作时消耗的总能量。它可以通过静态功耗(即使不进行任何操作也会消耗的能量,主要由漏电流引起)和动态功耗(Dynamic Power,与电路状态转换相关的能量消耗)来评估。
性能功耗比(Performance per Watt):这个指标反映了单位功耗下系统的性能表现。对于许多应用来说,特别是移动设备和高性能计算领域,这是一个非常重要的考量因素。

硬件低功耗设计

局部断电

使用load switch芯片,负载开关(Load Switch)芯片用于高效地接通或断开电源到负载的路径,实现对负载供电的精确管理,在不需要时切断某些部分的电力供应,减少静态和动态功耗。这种方式能够有效减少系统待机时的整体功耗,特别是对于那些偶尔才用到的功能模块,如串口、ADC、蓝牙、Wi-Fi等无线通信模块或者传感器组件,而且这种芯片用于切换电路通断的能源非常小。需要注意,这些模块即使没有驱动其工作,但基本供电电压存在,仍然会有会有小部分的静态损耗。

局部降压技术

通过调整不同子系统的电压水平来优化能量效率,因为较低的工作电压通常意味着更低的能量消耗,使用高效的DC-DC降压转换器为不同的电路区域提供所需的电压。现代降压转换器可以达到非常高的效率(90%以上),减少了因电压转换带来的能量损失。

软件低功耗设计

几十年前,硬件被视为系统中唯一可以改变功耗的地方,于是所有低功耗设计都是集中在硬件部分。然而这种范式现在已发生变化,因为高度集成的处理器依赖的外部器件越来越少,而且软件逻辑固定后,我们能够精准预测出程序对特定输入的反应,以此更好的进行全局优化。

启动低功耗模式

低功耗模式通过调整芯片的工作状态来实现节能目的,例如,STM32低功耗的模式说明如下

  1. 外设门控时钟,在运行模式下,可随时停止各外设和存储器的 HCLKx 和 PCLKx 以降低功耗
  2. 睡眠模式,执行 WFI(等待中断)或 WFE(等待事件)指令即可进入睡眠模式。在这种模式下,只有CPU内核停止运行,而所有外设继续工作。可以通过任何被配置为唤醒源的中断或事件来唤醒CPU。整体表现为MCU不在执行代码,但保留睡眠前的内核寄存器、内存的数据,被唤醒后接着执行WFI或WFE后的指令。无唤醒延迟时间。
  3. 停止模式,睡眠模式和外设门控时钟的整合,所有的外设停止工作,但内核的寄存器、内存的信息会被保留,所以被唤醒后,时钟恢复后,还能在原来的位置启动。注意:从停止模式唤醒后,系统会使用HSI,如果需要使用HSE,还需要额外运行时钟配置代码,如果FLASH设置为低功耗模式,唤醒还需要额外的时间,停止模式下,ADC 或 DAC 也会产生功耗。
  4. 待机模式,待机模式下可达到最低功耗,1.2 V 域断电,PLL、HSI 振荡器和 HSE 振荡器也将关闭。除备份域( RTC 寄存器、 RTC 备份寄存器和备份 SRAM)和待机电路中的寄存器外, SRAM 和寄存器内容都将丢失,再启动后对芯片复位,重新检测 boot条件,从头开始执行程序。
    在这里插入图片描述
动态频率调节 (DVFS)

根据当前的工作负载自动调整处理器的电压和频率,以最小化能量消耗

  1. 降低任务频率:对于非实时或计算量小的任务,主动降低其运行频率。
  2. 电压联动:降低频率通常允许降低工作电压(Vcore),而功耗与V²成正比,因此降压带来的节能效果远大于降频。
    DVFS 的局限性在于它会损害性能,因此可能会增加执行时间或导致错过最后期限。另外,在使用多核处理器而不是增加时钟频率的趋势下,DVFS 的收益正在减少。
任务优化

将短的任务间空闲间隔合并到几个大的空闲时间间隔中。较大的空闲间隔可以减少模式转换开销,因为处理器可以长时间连续保持空闲或活动状态。

特定应用存储器

将最常访问的位置映射到可以放置在片上的小内存上,由于这样的内存非常靠近处理器,因此访问它比访问大型后台内存造成的开销要小得多。例如STM32的CCM-SRAM,直接连接内核,访问快速、高效、低耗。

代码优化
  1. 循环优化:减少循环内部不必要的操作,如尽量将不变的计算移出循环体外;使用高效的数据访问模式以减少缓存未命中情况。
  2. 分支预测优化:编写易于预测的条件语句(例如,尽量保持if-else结构简单,在switch case 结构中前面放访问率高的case),以便于CPU的分支预测器工作得更准确,减少因预测错误导致的流水线清空和重新加载指令的开销。
  3. 避免浮点运算:如果可能的话,使用定点数代替浮点数进行计算,因为浮点运算通常比整数运算消耗更多的能量。
算法效率
  1. 选择高效的算法:不同的算法可能在时间复杂度和空间复杂度上有显著差异,选择时间复杂度较低的算法可以减少CPU执行指令的数量,从而降低能耗。
  2. 数据结构的选择:合适的数据结构能够简化算法逻辑,减少不必要的计算和内存访问次数。例如访问二维数组的成员时,优先按照行的方式去访问。
异步算法与并行处理
  1. 多线程:合理利用多核处理器的能力,通过并行处理来加速任务完成速度,同时注意同步开销不要抵消了性能增益带来的节能效果。
  2. 异步I/O:对于I/O密集型应用,采用异步I/O模型可以让CPU在等待I/O操作完成的同时执行其他任务,提高资源利用率。
编译器优化

使用高级编译器选项,如GCC中的-O2, -O3优化级别,可以帮助生成更加高效的机器码,但需要注意这些优化有时可能会增加代码大小,或改变原有程序逻辑设计。

内存管理
  1. 减少内存访问:频繁的内存访问是高能耗的行为之一,通过优化数据布局和访问模式来减少不必要的内存读写操作。
  2. 缓存友好性:设计程序使其具有良好的缓存局部性,即尽量让最近被访问的数据保留在缓存中,减少从主存获取数据的需求。
Tickless 模式

Tickless模式(也称为无滴答模式)允许RTOS根据实际需求动态调整定时器中断的发生频率,而不是固定周期地触发。这意味着当没有活动的任务需要调度时,系统可以进入更深的睡眠状态,从而节省电力。例如UCOS的无滴答模式下,设置延时3毫秒时,不再每毫秒发生一次时钟中断,而是在3ms后再发生时钟中断。
在这里插入图片描述
在这里插入图片描述

参考文献

  • Survey of Low-Energy Techniques for Instruction Memory Organisations in Embedded Systems A Artes, JL Ayala, J Huisken, F Catthoor - Journal of Signal Processing …, 2013 - Springer
  • A Survey of Hardware Design Techniques and Issues for Energy-Efficient Embedded Systems Sparsh Mittal,Int. J. Computer Aided Engineering and Technology, Vol. 6, No. 4, 2014
  • STM32F4中文参考手册
  • UCOS-III手册
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值