低功耗系统设计全方位解析:从硅片工艺到嵌入式软
适合于无线协议的速度。
增加硬件块(如智能DMA)可以进一步改变能耗的折衷情况。很多DMA控制器都需要处理器的频繁干预,如原生ARM Cortex-M3处理器所提供的DMA控制器。但更多智能DMA控制器能支持一种排队与链接的组合,处理器就可以计算报头、加密数据、分组组装,然后以适当的间隔,将数据的传送工作转交给缓冲存储区,供射频前端使用。在射频链路激活的大多数时间内,处理器可以睡眠,节省大量能源。
存储器使用。对于现代32 bit MCU,软件工程师在存储器块的使用方式上有高度自由。通常MCU会提供一组存储器,包括长期保存代码和数据的非易失存储器,以及存放临时数据的 SRAM.多数情况下,访问闪存的功耗要高于SRAM.对于正常使用情况,闪存读取次数是SRAM读取数的三倍。闪存写入消耗的功率更多(需要将整块擦除,然后用一个相对高电压脉冲的漫长序列重新写入)。但对于大多数应用来说,闪存写入操作并不频繁,实际上不会影响到平均功耗。
闪存功耗的一个更进一步因素是如何分配来自处理器的存取。每个闪存块都包含多个页面,每个页面的大小最多可达4k字节。要支持存取,每个页面都必须加电;未被使用的页面则可以维持在低功耗状态。如果一个定期存取的代码段要跨两个闪存页,而不是全在一个页面上,则读取指令相关的能耗就会增加。将跨不同页面的频繁存取代码与数据在内存中重新分配,就可以在一只电池的放电寿命期间节省不小的能量,而不必修改物理硬件。
通常有意义的是复制功能,它更多地使用片上SRAM而不是闪存,无论是读还是写,虽然这种方法看似是对存储容量的低效使用。电池长寿命的优点可以轻易抵消掉更多的内存消耗。
代码优化。能量优化亦可以颠覆传统的代码效率概念。几十年来,嵌入系统工程师很注重针对存储器大小来优化代码,除非性能是压倒一切的指标。能量优化提供了另一种全新的度量标准集。一个重要的考虑是采用32 bit平台上已经普遍提供的片上缓存。
对代码大小的优化能够在缓存中保存更多的可执行代码,从而提高了速度和节省了能耗。不过,函数调用与分支(可重新使用公共代码,从而减少应用的尺寸)会在同列缓存的代码段之间造成不可预期的冲突。这样当需要从主内存中获取指令时,会造成浪费的“缓存颠覆”,以及多闪存页激活。
在产品生命周期内要频繁工作的那些代码,可以充分压缩到能装入缓存中,而不做分支或调用函数,这是有意义的。考虑一个烟雾报警器:即使报警器每周触发一次(也许源于厨房活动所产生的过多烟气),也仅是报警器十年寿命中3.15亿次事件中的520个。绝大部分时间中,代码只要读一下传感器值,然后发现其未超阈值,就让处理器核心返回睡眠状态,等待系统定时器的唤醒。
在警报器获取的所有传感器读数中,只有不到0.0002%的情况才会执行警报生成代码。余下99.9998%的代码执行都是核心传感器读取循环;确保这个代码直接在一个缓存列中执行,就成为最低能量使用的关键。其它代码由于运行得极少,可以使用更传统的技术做优化。
能效工具。对于MCU平台的能效最大化,工具的支持十分重要。要将不同函数分配到闪存的不同页,就需要这样一种链接器,它能够知道目标MCU的存储器详图。链接器可以获得开发人员的输入结果,看这个块是否被分配在了跨页边界上,并生成已经过非易性存储最高能效优化的二进制码。
一般来说,这个代码也用于确保函数与数据的放置方式,即最常执行的部分不会跨多个缓存列。如果MCU供应商提供了这类工具,则实现这种级别的细节要容易得多,因为他们了解每个目标平台的存储器布局与功率需求。而第三方供应商实现这工具则要困难得多。
MCU供应商还详细地了解不同外设与片上总线的组织方式。这一知识可以用于工具中,指导工程师做出不浪费功率的选择。
提示
在工艺技术、IC架构以及软件结构之间的权衡决策,可以得到微妙而有时是无法预期的结果。
电源门控可以减轻泄漏效应,使更先进的工艺结点成为低工作周期系统的较好选择。
片上稳压器为设计人员提供了更多灵活性,能够从一只电池中榨取更多的电荷,而片上dc/dc转换器与性能监控电路则能实现动态的电压缩放。
能感知硬件的软件工具为嵌入系统工程师提供了更多认知能力,从而实现更高的节能。
- SDR助力实现创新车载娱乐(09-18)
- 用基于CMOS技术的接收器芯片设计高性价比的汽车收音机(12-23)
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)