新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 低功耗系统设计全方位解析:从硅片工艺到嵌入式软

低功耗系统设计全方位解析:从硅片工艺到嵌入式软

作者: 时间:2016-09-12 来源:网络 收藏

电源的考虑。片上稳压器为系统设计者提供了更高的灵活性,从而能从一只电池榨取更多电能。例如,片上开关降压转换器(如Silicon Labs公司的SiM3L1xx MCU产品)可以从一只3.6V工业电池获得输入,以高于80%的效率将其转换为1.2V.很多MCU没有这种特性,而是采用线性元件降压到合适电平,会有大量的消耗。在高级的实现中,当电池放电到某个水平,转换器无法做转换工作时,降压稳压器可以关闭。因此,电源可以在设备的整个生命周期上做到优化能效,一切均在软件控制下。

软件的决策

性能的缩放。高能效嵌入应用的实现有赖于软件的设计,软件要以最适当的方式使用硬件资源。什么样才是适合,这不仅取决于应用,而且要看硬件实现。同样,硬件越灵活(包括CPU、时钟、电压和存储器使用),开发者可以获得的节能潜力也越大。能感知硬件的软件工具为嵌入系统工程师提供了更高的认知度,使他们能够更多地了解到哪种更高节能是可实现的。

一种选择是采用动态电压缩放,如图3和图4所示。使该技术得以实现的是片上dc/dc转换器与性能监控电路,当应用不需要以最高速度执行指令时,它们提供了降低电压的能力。在这些情况下,系统就工作在较低的功耗下。最终的益处是一个输入电压的函数,可以在产品的生命周期内变化。图中显示了无电压缩放(VDD固定)、SVS(静态电压缩放),以及AVS(动态电压缩放)之间的相对差别。

低功耗系统设计
低功耗系统设计

AVS有一个有意思的地方,这就是AVS策略可以根据系统输入电压而改变。在本例中,当输入为3.6V时,用一个高效的内部dc/dc转换器为内部逻辑以及闪存供电,效率更高。但随着在产品生命周期内的电池放电,输入电压跌落,用输入电压为闪存子系统直接供电就成了更高效的方法,因为内部逻辑可以工作在较闪存更低的电压下。例如,Silicon Labs公司的SiM3L1xx系列MCU就有一个灵活的电源架构,有六个独立和可变的电源域,能够实现这种动态的优化。

增加硬件块(如DMA)可以进一步改变对能耗的折衷。

通常来说,CMOS逻辑电路工作得较慢,因为它们电压低。如果应用可以容忍较低的性能,则较低电压可以因能耗中的二次项而获得大的节能效果,例如常有这种情况,要处理的通信协议,其提交数据的速度不高于某种标准频率。泄漏为电压缩放提供了下限。如果每次运行花费时间太长,则泄漏就开始占据能耗方程的主要地位,从而增加了总能耗。因此,执行一个功能越快越好,然后就使处理器回到睡眠模式,尽量减少泄漏成份。

考虑一个需要完成相当多数字信号处理的无线传感器应用,例如玻璃破碎探测器。在本例中,应用会通过一个快速富利叶变换来分析由音频传感器拾取的振动,其特性频率来自于玻璃的碎裂。FFT比较复杂,因此,如要降低电压而以较低频率执行这个变换,就会大大增加泄漏,

即使是采用较老的工艺技术。本例的最佳方案是以接近最高频率运行这个变换,然后返回睡眠模式,直到要向主结点报告任何结果时。

不过,无线协议代码会产生不同的要求。射频协议要求事件有固定的时序。在这些情况下,协议可能要完全由硬件处理。这就使降低处理器核心电压有了更大的意义。因此,需要做分组组装与传输的代码要运行在适合于无线协议的速度。

增加硬件块(如智能DMA)可以进一步改变能耗的折衷情况。很多DMA控制器都需要处理器的频繁干预,如原生ARM Cortex-M3处理器所提供的DMA控制器。但更多智能DMA控制器能支持一种排队与链接的组合,处理器就可以计算报头、加密数据、分组组装,然后以适当的间隔,将数据的传送工作转交给缓冲存储区,供射频前端使用。在射频链路激活的大多数时间内,处理器可以睡眠,节省大量能源。

存储器使用。对于现代32 bit MCU,软件工程师在存储器块的使用方式上有高度自由。通常MCU会提供一组存储器,包括长期保存代码和数据的非易失存储器,以及存放临时数据的 SRAM.多数情况下,访问闪存的功耗要高于SRAM.对于正常使用情况,闪存读取次数是SRAM读取数的三倍。闪存写入消耗的功率更多(需要将整块擦除,然后用一个相对高电压脉冲的漫长序列重新写入)。但对于大多数应用来说,闪存写入操作并不频繁,实际上不会影响到平均功耗。

闪存功耗的一个更进一步因素是如何分配来自处理器的存取。每个闪存块都包含多个页面,每个页面的大小最多可达4k字节。要支持存取,每个页面都必须加电;未被使用的页面则可以维持在低功耗状态。如果一个定期存取的代码段要跨两个闪存页,而不是全在一个页面上,则读取指令相关的能耗就会增加。将跨不同页面的频繁存取代码与数据在内存中重新分配,就可以在一只电池的放电寿命期间节省不小的能量,而不必修改物理硬件。

通常有意义的是复制功能,它更多地使用片上SRAM而不是闪存,无论是读还是写,虽然这种方法看似是对存储容量的低效使用。电池长寿命的优点可以轻易抵消掉更多的内存消耗。

代码优化。能量优化亦可以颠覆传统的代码效率概念。几十年来,嵌入系统工程师很注重针对存储器大小来优化代码,除非性能是压倒一切的指标。能量优化提供了另一种全新的度量标准集。一个重要的考虑是采用32 bit平台上已经普遍提供的片上缓存。

对代码大小的优化能够在缓存中保存更多的可执行代码,从而提高了速度和节省了能耗。不过,函数调用与分支(可重新使用公共代码,从而减少应用的尺寸)会在同列缓存的代码段之间造成不可预期的冲突。这样当需要从主内存中获取指令时,会造成浪费的“缓存颠覆”,以及多闪存页激活。

在产品生命周期内要频繁工作的那些代码,可以充分压缩到能装入缓存中,而不做分支或调用函数,这是有意义的。考虑一个烟雾报警器:即使报警器每周触发一次(也许源于厨房活动所产生的过多烟气),也仅是报警器十年寿命中3.15亿次事件中的520个。绝大部分时间中,代码只要读一下传感器值,然后发现其未超阈值,就让处理器核心返回睡眠状态,等待系统定时器的唤醒。



评论


相关推荐

技术专区

关闭