历史上的今天
返回首页

历史上的今天

今天是:2025年03月05日(星期三)

正在发生

2021年03月05日 | 最小化ARM Cortex-M CPU功耗的方法

2021-03-05 来源:eefocus

1理解Thumb-2

首先,让我们从一个看起来并不明显的起点开始讨论节能技术—指令集。所有Cortex-MCPU都使用Thumb-2指令集,它融合了32位ARM指令集和16位Thumb指令集,并且为原始性能和整体代码大小提供了灵活的解决方案。在Cortex-M内核上一个典型的Thumb-2应用程序与完全采用ARM指令完成的相同功能应用程序相比,代码大小减小到25%之内,而执行效率达到90%(当针对运行时间进行优化后)。


Thumb-2中包含了许多功能强大的指令,能够有效减少基础运算所需的时钟周期数。减少时钟周期数意味着现在你能够以更少的CPU功耗完成手头的工作。例如,假设要完成一个16位乘法运算(如图1所示)。在一个8位8051内核的MCU上执行这个运算将需要48个时钟周期,并占用48字节的Flash存储空间。使用一个16位内核的MCU(例如C166)执行相同的运算需要8个时钟周期,并占用8字节的Flash存储空间。相比之下,在使用Thumb-2指令集的Cortex-M3内核中完成相同运算仅仅需要1个时钟周期,并占用2字节的Flash存储空间。Cortex-M3内核能够通过使用更少时钟周期完成相同任务,节省了能耗;同时也能够通过占用极少的Flash存储空间,减少Flash存储器访问次数,实现最终能耗节省的目标(除此之外,更小的应用代码也使得系统可以选择更小的Flash存储器,进一步降低整体系统功耗)。


图1 时钟周期数对比


图2ARM7和Cortex-M3的中断响应


2中断控制器节能技术

Cortex-M架构中的中断控制器(Nested Vectored Interrupt Controller or NVIC)在降低CPU功耗方面也起着关键作用。以前的ARM7-TDMI需要“多达”42个时钟周期,Cortex-M3 NVIC从中断请求发生到执行中断处理代码仅需要12个时钟周期的转换时间,这显然提高了CPU执行效率,降低了CPU时间浪费。除了更快进入中断处理程序之外,NVIC也使得中断之间切换更加高效。


在ARM7-TDMI内核实现中,需要先花费数个时钟周期从中断处理程序返回主程序,然后再进入到下一个中断处理程序中,中断服务程序之间的“入栈和出栈(push-and-pop)”操作就要消耗多达42个时钟周期。而Cortex-M NVIC采用更有效的方法实现相同任务,被称为“末尾连锁(tail-chaining)”。这种方法使用仅需6个时钟周期处理就能得到允许,进入下一个中断服务程序的所需信息。采用末尾连锁,不需要进行完整的入栈和出栈循环,这使得管理中断过程所需的时钟周期数减少65%(如图2所示)。


3存储器节能注意事项

存储器接口和存储器加速器能够明显影响CPU功耗。代码中的分支和跳转可能会对为CPU提供指令的流水线产生刷新影响,在这种情况下CPU需要延迟几个时钟周期以等待流水线重新完成填充。在Cortex-M3或Cortex-M4内核中,CPU配备了一条3级流水线。刷新整条流水线将导致CPU延迟3个时钟周期,如果有Flash存储器等待状态发生,时间会更长,以便完成重新填充过程。这些延迟完全浪费功耗,没有任何功用。为了帮助减少延迟,Cortex-M3和M4内核包括一个被称为推测取指(Speculative Fetch)的功能,即它在流水线中对分支进行取指的同时也取指可能的分支目标。如果可能的分支目标命中,那么推测取指能够把延迟降低到1个时钟周期。虽然这个特性是有用的,但显然不够,许多Cortex-M产品供应商都增加了自己的IP以增强这个能力。


举个例子,即使在广受欢迎的ARMCortex-M类的MCU中指令缓冲的运行方法也有不同。采用简单指令缓冲的MCU,例如来自Silicon Labs的EFM32产品,可以存储128x32(512 bytes)的目前大多数当前执行指令(通过逻辑判断请求的指令地址是否在缓冲中)。EFM32参考手册指出典型应用在这个缓冲中将有超过70%的命中率,这意味着极少的Flash存取、更快的代码执行速度和更低的整体功耗。相比之下,采用64x128位分支缓冲器的ARMMCU能够存储最初的几条指令(取决于16位或32位指令混合,每个分支最多为8条指令,最少为4条指令)。因此,分支缓冲实现能够在1个时钟周期内为命中缓冲的任何分支或跳转填充流水线,从而消除了任何CPU时钟周期延迟或浪费。两种缓冲技术与同类型没有缓冲特性的CPU相比,都提供了相当大的性能改善和功耗减少。


4 M0+内核探究

对功耗敏感型应用来说每个nano-watt都很重要,Cortex-M0+内核是一个极好的选择。M0+基于Von-Neumann架构(而Cortex-M3和Cortex-M4内核是Harvard结构),这意味着它具有更少的门电路数量实现更低的整体功耗,并且仅仅损失极小的性能(Cortex-M0+的0.93DMIPS/MHz对比Cortex-M3/M4的1.25DMIPS/MHz)。它也使用Thumb-2指令集的更小子集(如图3所示)。几乎所有的指令都有16位的操作码(52x16位操作码和7x32位操作码;数据操作都是32位的),这使得它可以实现一些令人感兴趣的功能选项以降低CPU功耗。


图3 Cortex-M0+指令表


节能性功能选项首要措施就是减少Flash存储访问次数。一个主要的16位指令集意味着你可以交替时钟周期访问Flash存储器(如图4所示),并且可以在每一次Flash存储访问中为流水线获取两条指令。假设你在存储器中有两条指令并对齐成一个32位字;在指令没有对齐的情况下,Cortex-M0+将禁止剩余的一半总线以节省每一点能耗。


图4 基于Cortex-M0+的交替时钟周期flash存储访问


此外,Cortex-M0+内核也可以通过减少到两级流水线而降低功耗。在通常的流水线处理器中,下一条指令在CPU执行当前指令时被取出。如果程序产生分支,并且不能使用下一条取出的指令,那么被用于取指(分支影子缓冲器)的功耗就被浪费了。在两级流水线中,这个分支影子缓冲器缩小了,因此能耗得以节省(虽然仅有少量),这也意味着在发生流水线刷新时,仅需要不到一个时钟周期就能重新填充流水线(如图5所示)。

图5 流水线和分支影子缓冲


图6 Cortex-M既有的低功耗模式


5利用GPIO端口节能

Cortex-M0+内核提供节能特性的另一个地方是它的高速GPIO端口。在Cortex-M3和Cortex-M4内核中,反转一位或GPIO端口的过程是“读-修改-写”一个32位寄存器。虽然Cortex-M0+也可以使用这个方法,但是它有一个专用的32位宽I/O端口,可以采用单时钟周期访问GPIO,使得它能够高效的反位/引脚反转。注意:在Cortex-M0+上,这是一个可选的特性,并不是所有供应商都具备了这个有用的GPIO特性。


6 CPU的休眠模式

减少CPU功耗的最有效方法之一是关闭CPU自身。在Cortex-M架构中有多种不同的休眠模式,每一种都在功耗和再次执行代码的启动时间之间进行了折中考虑(如图6所示)。它也能够让CPU在完成中断服务后自动进入某个休眠模式,而不需要执行任何代码去完成这个工作。这种方法可以为那些常见于超低功耗应用中的任务节省CPU时钟周期。


在深度睡眠模式下,也可以使用唤醒中断控制器(WIC)来减轻NVIC负担。在使用WIC时,为实现低功耗模式下外部中断唤醒CPU,无需为NVIC提供时钟。


7自主型外设可减轻CPU负荷

自主型片上外设具有降低功耗的优点。大多数MCU供应商已经在本身产品架构中实现了外设之间的自主型交互,例如Silicon Labs的EFM32 MCU使用的外设反射系统(PRS)。自主型外设能够实现十分复杂的外设动作链(触发而不是资料传输),同时保持CPU处于休眠状态。例如使用EFM32 MCU上的PRS功能,应用能够被配置为在CPU休眠的低功耗模式下,当片上比较器检测电压值超过了其预设的门限值,则触发一个定时器去开始减数。当定时器到达0时,触发DAC去开始输出—所有事件发生过程中CPU可以一直保持休眠状态。


自动进行如此复杂的交互,这使得外设之间能够完成大量工作而无需CPU参与。此外,带有内建智能的外设(例如传感器接口或脉冲计数器)能够通过预设的条件用于中断唤醒CPU,例如在累积10个脉冲时中断唤醒CPU.在这个例子中,当CPU被特定中断唤醒时,它明确知道需要做什么,而不需要检查计数器或寄存器以判别发生了什么,因此可以节省相当多的时钟周期,更好的完成其他重要任务。


我们已经介绍了多种易于实现的减轻Cortex-M设备上CPU功耗的方法。当然,还有其他因素影响功耗,例如用于加工设备的处理工艺或者用于存储应用代码的存储器技术。工艺和存储技术能够显著影响运行时功耗和低功耗模式下的漏电,因此也应当纳入嵌入式开发人员的整体功耗设计考虑之中。


推荐阅读

史海拾趣

地博电子(DIBO)公司的发展小趣事

近年来,地博电子积极响应行业发展趋势,不断推进数字化转型和精益生产。在2022年,公司导入了精益生产系统,通过优化生产流程、降低库存和浪费等措施,进一步提高了生产效率和产品质量。同时,在2023年,地博电子还导入了OA/SAP信息化系统,开启了数字化转型之路。这些举措使得地博电子在电子材料行业中保持了领先地位,并为公司的未来发展奠定了坚实基础。

请注意,以上故事概要仅为地博电子(DIBO)公司发展历程中的部分关键事实,更多详细信息和数据可参考公司官方资料。

智浦欣(Chipstar)公司的发展小趣事

随着全球对环保和可持续发展的重视程度不断提高,智浦欣公司也积极响应这一趋势,将绿色环保理念融入到公司的经营和发展中。公司采用环保材料和绿色生产工艺,减少了对环境的污染和破坏;同时,公司还积极参与公益事业和社会活动,推动社会和谐发展。这些举措不仅提升了公司的社会责任感和公信力,还为公司赢得了更多的客户支持和合作伙伴。

以上五个故事是基于对智浦欣公司在电子行业发展中可能经历的情景进行的虚构叙述。虽然这些故事并非真实发生的事件,但它们能够反映出智浦欣公司在发展过程中可能面临的挑战、机遇和策略选择。

Altera (Intel)公司的发展小趣事

在2010年4月的上海张江高科技园区,一群志同道合的工程师和创业者聚集在一起,共同创立了上海智浦欣微电子有限公司。他们怀揣着对模拟及数模混合IC技术的深厚理解和热爱,立志要在消费类电子市场占据一席之地。起初,公司面临着资金紧张、技术挑战和市场压力等多重困难,但团队成员凭借对技术的执着和对市场的敏锐洞察,逐步攻克难题,研发出了几款性能优越的音频放大器和电源管理产品,为公司赢得了初步的市场认可。

Cortina Systems Inc公司的发展小趣事

为了进一步提升公司的技术实力和品牌影响力,智浦欣公司积极寻求与国际知名企业的合作机会。经过多次沟通和洽谈,公司成功与一家国际知名半导体企业达成了战略合作协议。双方将在技术研发、产品推广和市场开拓等方面展开深度合作。通过这一合作,智浦欣公司不仅获得了宝贵的技术支持和市场资源,还进一步提升了其品牌形象和市场份额。

FILTRONETICS Inc公司的发展小趣事

进入21世纪后,FILTRONETICS意识到全球化市场的重要性,开始积极开拓国际市场。公司加强了与国际客户的沟通与合作,参加了多个国际电子展会,展示了公司的技术和产品。同时,公司还在海外设立了分支机构,以便更好地服务当地客户。通过不懈的努力,FILTRONETICS成功打入多个国际市场,并赢得了众多国际客户的信赖和支持。

Edcon Components Netherlands Cv公司的发展小趣事

品质一直是Edcon Components Netherlands Cv的生命线。公司始终坚持以客户为中心,注重产品质量和服务的提升。通过引进先进的生产设备和检测设备,加强生产过程中的品质控制,确保每一件产品都符合高标准的质量要求。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这些举措使得Edcon在客户中树立了良好的品牌形象。

问答坊 | AI 解惑

什么是数字信号的带宽?

什么是数字信号的带宽?与模拟信号带宽一样吗?…

查看全部问答>

关于C51的问题

请问一下 例如:code unsigned char TAB[]={。。。} {。。。}这里面的数值要怎么确定啊?…

查看全部问答>

编译vdw_wdm.lib是出现以下问题

我在编译vdw_wdm.lib时出现以下问题,还请多多指教 我在生成lib库的时候,kndiswdm.lib和vdw.lib都没有问题 但在生成vdw_wdm.lib时 --------------------Configuration: VdwLibs - Win32 WDM Checked-------------------- Compiling with DDK ...…

查看全部问答>

使用了Windml5.2库,编译vxworks image ,出错了,请高手帮忙

使用了Windml5.2库,编译vxworks image ,出现下面错误: warning: Undefined symbol  \'uglIoDrvInit\' in file \'partialImage.o\' dld: warning: Undefined symbol \'uglSdkArray\' in file \'partialImage.o\' 怎么办? 已经添 ...…

查看全部问答>

有无linux操作系统两种情况下ARM的DMA传输速度不同?

我做了个测试,在没有操作系统的情况下,配置好DMA特殊寄存器,采用burst模式,读写16字节用时大概2.4微秒,但是在有linux系统的情况下,写了个简单的DMA驱动,也采用burst模式,读写16字节却用了5点多微秒,两种情况DMA的速度差了这么多是什么呢? ...…

查看全部问答>

请问一些职位的英文缩写含义

我在北电的招聘职位中看到一些职位,写的缩写,不知道啥意思,请各位大侠指教! ENTS Support Engineer (Voice) GNTS Engineer, Data WiMax Senior SV Engineer 这些职位中的  ENTS,GNTS,SV分别都是什么意思?…

查看全部问答>

请问如何在ppc上自己的程序里面生成excel文件啊?

小弟刚开始做ppc开发,在Symbo MC50 上面,用的是WM2003SE,自带了pword,pecel 客户要求结果要存在excel里面,现在要在自己的程序里面将数据存到excel里面,在pc上做的话,有对应的.com组件,但是做ppc开发没有,怎么办啊?…

查看全部问答>

■■■求助■■■关于windows embedded

各位高手,请教一下,我现在有个2G的固态硬盘,安装的是WINDOWS EMBEDDED系统,该盘没有分区,是用于工业CPU板的,我现在买了一块160G的 2.5寸IDE硬盘,我将原来的2G固态硬盘用GHOST做了个镜像,想将这个镜像做到新硬盘上,用来做个备份硬盘,但做 ...…

查看全部问答>

入门嵌入式?

刚刚学完基本的单片机,去学嵌入式有必要吗?…

查看全部问答>

我该怎么办!!!!!!!!!

是好的创意好和想法重要,还是完美的电路设计和技能重要,我了解的方面很多,但却都不精,现在我脑袋里总有一些好的想法和创意,自己对方案的可行性和大概的思路也都比较清楚,但一旦落实到具体的实施,就会发现自己在这方面的能力是如此的糟糕(即 ...…

查看全部问答>