MCU导入DSP/FPU,别的不说,被偷的功耗得拿回来!
微控制器(MCU)深入人们应用生活,几乎大小设备都看得到MCU踪影,在MCU导入DSP数字信号处理器、FPU浮点运算单元功能后,MCU更大幅扩展元件可适用范围,这几年来,在众多MCU大厂纷纷针对旗下商品推出多样整合方案,不管是产品策略还是市场区隔,也让MCU市场更加丰富多元。
MCU深入生活应用是不容易质疑的趋势,尤其是MCU在功能优化或市场区隔目的下,进行DSP(Digital Signal Processor)数字信号处理器或FPU(Floating Point Unit)浮点运算单元功能整合,使得MCU的可应用场域大幅扩展。MCU整合FPU可以在进阶数值运算的精密度大幅提升、处理效能也能获得改善。针对IoT应用开发的MCU方案,整合DSP可优化感测器数据撷取品质与提升信号处理效能。
如果以FPU或DSP导入目的,一般在MCU中追加FPU、DSP整合架构,主要目的还是在考量成本下的设计方向,尤其在早期半导体元件,SOC(System on Chip)系统单芯片与MCU存在一段价格差距,如果仅需要SDP或FPU进行运算加速,又不想选用高单价SOC,这时整合DSP或FPU硬件加速单元的MCU产品、不仅可以更好的提供运行效能,同时又能在成本控制上表现更加优异。
首先明白,是什么偷走了MCU的功耗?
1、掐断外设命脉——关闭外设时钟
先说最直观的,也是工程师都比较注意的方面,就是关闭MCU的外设时钟,对于现在市面上出现的大多数的MCU,其外设模块都对应着一个时钟开关。只需要打开这个外设的时钟,就可以正常的使用这个外设了,当然,此外设也就会产生相应的功耗;反之,如果想要让这个外设不产生功耗,只需关闭它的时钟即可。
2、让工作节奏慢下来——时钟不要倍频
除了外设模块功率消耗之外,还有一个功耗大户需要注意一下,这就是PLL和FLL模块。PLL和FLL主要是用来对原始的时钟信号进行倍频操作,从而提高系统的整体时钟,相应的,其功耗也会被提上去。所以在进入低功耗之前,需要切换是种模式,旁路掉PLL和FLL模块,从而尽可能的降低MCU的功耗,等到MCU唤醒之后再把时钟切换回去。
3、围堵涓涓细流——注意I/O口的电平状态
如果认为只要关闭外设时钟就能够保证外设不再耗电,那么你就太天真了。如果IO口没有做好处理的话,它就会在暗地里偷走功耗,而你却浑然不知。具体原因是这样的,一般的IO的内部或者外部都会有上下拉电阻,举个例子,如下图所示,假如某个IO口有个10KΩ的上拉电阻,把引脚拉到3.3V,然而当MCU进入低功耗模式的时候,此IO口被设置成输出低电平,根据欧姆定律,此引脚就会消耗3.3V/10K=0.33mA的电流,假如有四、五个这样的IO口,那么几个mA就贴进去了,太可惜了。所以在进入低功耗之前,请逐个检查IO口的状态。
4、睦邻友好合作——注意I/O与外设IC的统筹
IO口的上下拉电阻消耗电流这一因素相对比较明显,下边咱来说一个不明显的因素:IO口与外部IC相连时的电流消耗。假如某个IO口自带上拉,而此与IO相连的IC引脚偏偏是自带下拉的,那么无论这个引脚处于什么样的电平输出,都不可避免的产生一定的电流消耗。所以凡是遇见这一类的情况,首先需要阅读外设IC的手册,确定好此引脚的的状态,做到心中有数;然后在控制MCU睡眠之前,设置好MCU的IO口的上下拉模式及输入输出状态,要保证一丝儿电流都不要被它消耗掉。
5、断开调试器连接,不要被假象所迷惑
还有一类比较奇特,检测出来的电流消耗很大,可实际结果是自己杞人忧天,什么原因呢?是因为在测试功耗的时候MCU还连接着调试器呢!这时候大部分电流就会被调试器给掳走,平白无故的让工程师产生极度郁闷的心情。所以在测低功耗的时候,一定不要连接调试器,更不能边调试边测电流。
MCU的低功耗设计是一个细致活,要养成良好的习惯,做到每添加一个功能都要重新验证一下低功耗是否符合要求,这样就可以随时随地干掉消耗功率的因素。如果把所有功能都设计好了才去考虑低功耗的问题,一个不小心,就可能要更改程序的架构——即便如此也不一定能把功耗给彻底降下去。
那MCU为什么要导入DSP/FPU?
其一,MCU整合芯片封装成本骤降 增加MCU功能扩充应用空间
以早期的SOC产品来看,搭载DSP与FPU硬件加速器是SOC产品的重要特性,其中DSP与FPU的应用方向主要以音讯、影像等处理加速运算为主,而在制程技术持续优化,SOC的成本逐步与MCU拉近,MCU在32位元甚至64位元架构下,也开始有结合DSP或是FPU硬件加速单元的解决方案。
先看看MCU加上硬件加速单元的优点,在MCU追加FPU导入,最直接的效益是早期利用MCU处理类似FPU运算内容,会因为MCU本身的运算架构限制,让运算结果得出时间会相对拉长,而在导入硬件加速器处理浮点运算时,因为硬件呼叫或是资料传递就能透过硬件算出数据,MCU本身耗在浮点运算的记忆体资源可以因硬件加速整合减少至少10%。
其二,高阶数值运算 运用硬件加速满足设计需求
在实际应用中,FPU硬件加速器本身并无法完全解决误差扩大问题,所以会有FPU、DSP等不同硬件加速整合架构下的应用目的考量,举例来说,透过DSP硬件加速器,可针对特殊数据类型更高速、可靠的运算处理输出,像是DSP可利用指令来进行多种运算,处理如快速快速傅立叶转换(fast Fourier transform;FFT)或有限脉冲回应(Finite impulse response;FIR)进阶运算中重要且耗资源的运算需求,甚至透过单周期的指令便能处理单一指令多重资料(Single Instruction Multiple Data;SIMD)运算需求,MCU在进行进阶数值处理方面还可获得进阶增强效益。
其三,FPU/DSP不同硬件加速单元具互补作用
虽说整合FPU或DSP基本在架构与应用方向就不同,但实际上两者分别是针对数据运算、讯号处理对应至各式演算法应用,两者功能可以说是各有互补效用,比较难被独立拆分。以ARM Cortex-M4来看,若仅提供DSP硬件加速处理器反而没设置FPU浮点运算加速器反而会造成应用限制,因为在Cortex-M4应用场合如果仅有数字信号处理加速硬件支援,少了浮点运算支援,对开发需求端若碰到需要数值进阶运算加速,就会造成设计上的弹性限制,或是导致还需透过外部功能芯片支援,或利用原有的运算资源因应数值进阶计算需求,反而会因为数值处理效能限制了Cortex-M4的应用可能性。
同样的状况也发生在仅有FPU而没有设置DSP的微控制器应用方案上,对DSP或是FPU应用功能是相辅相成,独立整合对于微控制器的配置并未能产生综效,反而会成为发展路径的限制。
其四,DSP数字滤波应用 可提升感测讯号撷取品质
此外,在MCU整合FPU的另一个优势在于可在系统中善用其运算特性,例如,运用数字演算法进行撷取数值的数字滤波应用,针对处理讯号进一步以基于硬件加速的数字演算法进行波形或数据再处理,形成一提升数据噪讯比(SNR)的便捷作法,数字滤波器还可利用演算机制优化提供不同程度大小的滤波效果,这在于微控制器用于感测热门的心率、血液含氧量、运动数值等生理资讯,或是数字电表、智能电表等应用,解决末端数据因为杂讯或环境噪讯影响,倒置讯号失真的数据优化回补效用,优化终端取得的讯号波形信号品质,更利于后续处理或数据使用。
为了优化末端应用,微控制器整合硬件加速单元也蔚为一股风潮,不只是DSP或是FPU硬件加速单元,例如就有微控制器在架构上加入了VMU硬件加速单元,处理因应马达应用重点的三角函数数值运算需求,或是对应无线电通讯需求整合的数据分析演算支援,与现有FPU浮点运算硬件加速功能区隔,采取协同分工的方式加速整体微控制器的应用效能。
另一个微控制器整合DSP、FPU硬件加速单元的目的,其实加入硬件加速单元整合而不采行外部解决方案来组构硬件加速运算需求,其最大的优点在于成本方面的极致优化,因为电子电路板可以更节省载板空间,运用单一芯片就能改善运算的整体效率,而在软件开发层面,可在整合架构下运用简单呼叫与资料传递的再处理,便能满足应用服务的数据计算产出效能要求,甚至于开发完成的成品还可运用一致性侦错分析工具,直接针对系统进行全面分析与勘误,在开发设计的效率与速度都能获得改善。