在物联网的推动下,业界对各种电池供电设备产生了巨大需求。这反过来又使业界对微控制器和其他系统级器件的能源效率要求不断提高。因此,超低功耗(ULP)已成为一个过度使用的营销术语,特别是用于描述微控制器时。作为理解ULP背后真正意义的第一步,应考虑其各种含义。
本文我们将考察ADI公司的两款微控制器,以帮助大家了解如何在此背景下解读超低功耗的真正意义。我们还会讨论EEMBC联盟的认证机制,因为它确保了得分的准确性,可帮助系统开发人员为其解决方案选择最合适的微控制器。
测量和优化超低功耗
作为了解ULP的出发点,我们首先解释如何测量它。开发人员通常会查看数据手册,在其中可以找到每MHz的电流值,以及不同睡眠模式下的电流值。
第一个问题是,查看工作功耗时,数据手册通常不会解释获得该值的条件。例如代码、电压和闪存上的等待状态。有些供应商使用工作模式参考,例如EEMBCCoreMark,而有些供应商则使用像while1语句一样简单的操作。如果闪存上有等待状态,则微控制器单元的性能会降低,增加执行时间,从而提高执行任务的能耗。有些供应商提供典型电压时的数值,有些提供最低电压时的数值,还有些供应商不指定任何电压。也许这些差异很微妙,但没有一个标准的话,比较只能是大致上的对比。
通常,深度睡眠模式在数据手册中有相当详细的解释,但同样,获得这些模式下的电流消耗的条件因供应商而异(例如保留的内存量或电压)。此外,在实际应用中,用户还必须考虑进入和退出这些模式所消耗的电能。这可能是一个微不足道的值,也可能事关重大,取决于器件是大部分时间处于睡眠模式还是频繁唤醒。
第二个问题是器件有多长时间处于睡眠状态?工作模式和睡眠模式之间的平衡对于确定ULP测量非常重要。为了简化该过程,EEMBC对其ULPMark-CoreProfile(ULPMark-CP)使用1秒钟时间;这是一项基准测试,许多微控制器厂商将其用作数据手册的标准。注意:使用1秒的决定被视为EEMBC工作组的共识。考虑到ULPMark-CoreProfile工作负载的工作时间,占空比将为98%左右。在该基准测试中,器件每秒唤醒一次,执行少量工作(工作周期),然后回到睡眠状态。
通常,在工作模式下,模拟电路会导致电流消耗存在偏移;因此,使工作电流最小并有效使用深度睡眠模式对优化整个系统的电能使用是有意义的。请注意,降低频率会降低工作电流,但时间会增加,前面提到的模拟电路造成的偏移在微控制器处于工作状态时保持不变。但是,微控制器不同选择的利弊是什么?应用的占空比和深度睡眠电流对消耗的电能有何影响?
每周期的电能是占空比D(以睡眠模式时间占总时间的百分比给出)的函数,可由一个简化的公式来定义,假设开启和关闭转换的电能很小。
其中,斜率由ION定义,因为ISLEEP远小于ION,y轴截距就是ISLEEP。此公式可以帮助理解占空比,其中工作电流比睡眠电流更重要。
图1.ULPMark-CP的占空比为1秒。在此期间,器件从深度睡眠模式唤醒,执行固定的工作负载,然后返回深度睡眠模式。
超低功耗测试平台
比较ADI公司的两款微控制器ADuCM4050和ADuCM302x的超低功耗(电能)特性。在ULPMark节课表中,ADuCM4050和ADuCM302x的得分分别为203和245.5。请记住,该基准测试仅操作微控制器单元的核心(因此得名CoreProfile)。如何解释18%的差异?
ADuCM4050包含一个采用ARMv7E-M架构的ARMCortex-M4F。ADuCM302x包含一个采用ARMv7-M架构的ARMCortex-M3。虽然两个内核均有带分支推测的三级流水线,并且两者的指令集架构相似,但只有Cortex-M4F支持DSP和浮点指令。ULPMark-CoreProfile没有DSP指令,因此Cortex-M4F器件没能发挥FPU的优势。
对于基准分析,ADuCM4050和ADuCM302x分别工作在52MHz和26MHz。ADuCM4050需要大约11,284个周期来执行ULPMark工作负载,ADuCM302x需要10,920个周期,这意味着前者在1秒周期的217s内完成工作模式部分,而后者的工作时间为420s。ADuCM4050使用的周期数比ADuCM3029多的原因是所用频率不同(分别为52MHz和26MHz),ADuCM4050的闪存需要一个等待状态,而ADuCM3029的闪存上没有等待状态。ADuCM4050具有高速缓存,因此在闪存上增加等待状态不会有太大影响,因为许多指令是从高速缓存执行,可以全速(52MHz)存取而无需额外的等待状态。关于执行时间,同预期一样,ADuCM4050执行工作负载的速度比ADuCM3029更快,因为其运行频率是ADuM3029的两倍。
表1.在流行的ARM内核上完成ULP-Mark-CoreProfile工作负载所需的大致周期数。周期数是近似值,因为周期数还与编译器有关。
*这是基于Cortex-M0+和Cortex-M3数字的估计值。
但为什么ADuCM4050比ADuCM3029多消耗10A/MHz?这种增加背后的原因是,前者能以两倍于后者的频率工作,因而需要额外的缓冲器来实现对更高频率的时序约束。同ADuCM3029相比,ADuCM4050还有一些额外特性:
存储器大小加倍(SRAM和闪存均是如此):128kB和512kB,而ADuCM3029只有64kB和256kB。根据应用需求,您可能需要额外的存储空间。频率加倍:52MHz,而ADuCM3029只有26MHz,因此ADuCM4050性能更好。增加了RGB定时器。增加了新的安全特性:带密钥包裹-解包功能的保护密钥存储和带密钥解包功能的键控HMAC。增加了三个额外的SensorStrobe输出。增加了全部SRAM内容保留功能:ADuCM4050最多可保留124kB,而ADuCM3029最多只能保留32kB。
图2.ULPMark-CP结果前10名,位于EEMBC网站(2017年8月18日)。
根据应用需求(功耗优化、额外存储、工作性能、内容保留等),您可以决定使用ADuCM4050还是ADuCM302x产品。
关于深度睡眠模式,ADuCM4050在运行ULPMark-CoreProfile并保留比ADuCM3029多一倍的存储器内容时(前者为16kB,而后者为8kB),实现了更低的休眠功耗。这种改善的原因是较新的ADuCM4050产品采用增强型架构。
编译器的作用
ULPMark包括两种操作状态:工作状态和低功耗状态(器件处于睡眠模式)。这些状态均纳入恰好为1秒的占空比中。在工作状态下,每个器件执行相同的工作负载。但正如我们所看到的那样,工作效率受架构的影响。此外,它也受编译器的影响。编译器可能会选择更改和优化语句,致使指令组合发生变化。
根据应用的需要,您可以针对尺寸和速度进行优化,以平衡尺寸和速度等因素。循环展开是一个简单的例子,执行的分支数与循环体内代码的比例会发生变化。编译器在寻找更好的计算结果方式上仍能起到重要作用,但所做的工作是等价的。例如,ADuCM3029的ULPMark-CP结果可能会因优化程度不同而异:针对速度高度优化时为245.5,中等优化时为232,低度优化时为209。TexasInstrumentsMSP430FR5969的ULPMark结果是说明编译器重要性的另一个例子。通过应用更新版本的IAREmbeddedWorkbench编译器,结果提高了5%尽管不知道内部编译器做了什么改变来实现这一改进(m.eembc.org/ulpbench/)。同样,若不深入了解专有编译器技术,就无法知道为什么STMicroelectronicsSTM32L476RG从使用ARMCC编译器变为IAR编译器后,结果提高了16%。
ADI公司MCU的两个结果均是利用IAR编译器编译的代码生成的,但版本不同。ADuCM4050和ADuCM302x分别使用IAREWARM7.60.1.11216和7.50.2.10505。同样不知道做了哪些内部改变。提交的两个得分使用了与优化速度对应的no_size_constraints选项。
将ULPMark转换为电能值
ULPMark-CoreProfile使用一个取电能值倒数的公式(10个周期,5个每秒平均电能值的中位数)。
电能为器件执行工作负载(处于工作模式)时消耗的电能与器件处于休眠状态时消耗的电能之和。
根据ADuCM3029数据手册,运行质数代码时,工作电流的典型值为980A。此代码装入缓存,以利用其功耗较低的优势。对于ULPMark-CoreProfile代码,由于它主要是线性代码,使能缓存没有什么太大好处,因此电流消耗与数据手册中针对禁用缓存所显示的电流消耗(1.28mA)相似。关于休眠电流,ULPMark-CoreProfile要求使能LFXTAL和RTC,因此睡眠模式下的电流消耗为830nA(根据数据手册)。如上所述,工作时间持续420s。
根据数据手册数字和执行时间,工作电流的电能为1.61J,睡眠期间消耗的电能为2.49J。根据这些值得到的分数与EEMBCEnergyMonitor软件测得的分数相符。
第一代ULPMark的缺点之一是运行规则将工作电压限制在3V(工作组这样做的目的是为所有器件建立一个通用电平)。大多数现代MCU在更低电压下运行的能效要好得多(尽管这可能受温度和工作频率的影响)。例如,利用DC-DC转换器将电压从3V降至1.8V,STMicroelectronicsSTM32L476RG的ULPMark结果提高了19%。
图3.ADuCM4050框图。其集成一个1.2V低压差稳压器(LDO)和一个可选容性降压调节器。
公布的结果受DC-DC转换器使用的影响,STMicroelectronicsSTM32L476RG并非不是唯一这样的器件,但有些器件将转换器集成到器件本身,如ADuCM302x和ADuCM4050,不需要外部IC来提高器件的功耗性能。尽管如此,使用DC-DC转换器有助于创造公平竞争环境,因为它允许器件以最佳能效运行。例如,仅工作在3V的器件不会从DC-DC转换器受益,因为它已经处于最优(或者可能是次优)的效率水平。另一方面,一个可以工作在1.8V但没有利用DC-DC转换器的器件,则会浪费64%的供应电能。此外,对于优先考虑能效的系统设计人员而言,如果系统使用3V电池,则外部DC-DC转换器的附加成本可能并不重要。必须小心使用DC-DC转换器,避免测量转换器而非MCU的能效。尽管如此,必须考虑到在实际应用中,DC-DC工作模式可能有一些缺点,例如工作模式和睡眠模式的相互转换时间会延长。
使用DC-DC转换器时,还需要考虑转换器的类型。一些转换器是基于电感的,可能会带来更大面积、更高成本以及电磁干扰(EMI)之类的问题。ADuCM4050和ADuCM302x器件使用基于电容的转换器,避免了这些问题。
分析ULPMark-CP结果或数据手册值时,重要的是要承认器件差异的存在。换句话说,测量器件的能效时,漏电流是一个重要因素,尤其是在睡眠模式下。虽然传统的性能基准一般不受影响,但温度和湿度等因素对器件的漏电流有一定程度的影响,进而会影响ULPMark-CP的结果。就制造而言,同一供应商在不同日期或从不同晶圆生产的器件会不相同。甚至同一器件的功耗也可能发生变化(根据测量的时间和地点,变化范围在5%到15%)。从根本上说,这意味着给出的ULPMark-CP得分应被用作能效指南。例如,一个器件的ULPMark结果为245,而来自不同晶圆的同款器件的得分可能在233到257之间(假设变化量为5%)。
认证机制建立可信度
为了确保得分的真实性,愿意认证其器件的供应商将电路板和工具同平台特定的配置文件一起发送给EEMBC技术中心(ETC)。EEMBC将平台配置文件集成到其系统文件(包括工作负载)中,并在不同电路板上多次测量得分。认证的得分为所有测量的平均值。
通过这种方式,EEMBC确保所有得分的条件相同(相同工作负载、相同电能监测板、相似的温度等)。
图4显示了用于在ADuCM3029EZ-Kit上测量ULPMark-CP的连接设置。
图4.测量得分的电路板设置。
为了测量得分,EEMBC提供了EnergyMonitor软件。单击RunULPBench(运行ULPBench)按钮后,EnergyMonitor硬件便向ADuCM3029EZ-Kit板供电,并测量配置文件运行的能耗。执行结束时,软件计算得分并将其显示在屏幕上。软件还会在历史窗口中显示之前周期的平均能耗。
图5.EnergyMonitor软件GUI。
下一步MCU效率分析
EEMBC的终极目标是提供多个基准测试套件,使用户能够全面评估MCU。除了关注MCU核心效率的ULP-Mark-CP之外,新发布的ULPMark-PeripheralProfile(ULPMark-PP)聚焦于操作各种MCU外设,如ADC、PWM、SPI和RTC。在ULPMark-PP中,由于器件在工作负载中执行多个外设事务,所以工作功耗和轻度睡眠功耗非常重要。ULPMark-PP的结果可从EEMBC网站获得;ULP-Mark-CP和ULPMark-PP组合可供EEMBC成员使用或授权使用。
接下来开发IoTMark-BLE和SecureMark套件。前者侧重于测量MCU和无线电通过蓝牙发射和接收数据的效率;后者是一种复杂的安全套件,用于测量物联网器件实现各种加密机制的电能和性能开销。二者均会在2017年底提供给成员和被许可人使用。
基准测试如同汽车,需要人来运行。因此,我们鼓励大家敦促所有MCU供应商运行并发布器件结果。我们还需要更多供应商将ULPMark结果包括在其数据手册中。这会显著增加数据手册中规格特性的可信度和实际可比性。如果MCU供应商未公布这些认证结果,那么您就要问:为什么不公布,你们在隐藏什么?