账号:
密码:
最新动态
产业快讯
CTIMES / 文章 /
加速32位微控制器转移热潮
 

【作者: Joseph Yiu】2010年04月21日 星期三

浏览人次:【9880】

为什么要转换?


最主要理由就是市场与消费者对嵌入式产品复杂度的要求升高。随着嵌入式产品连网需求增加,并提供更多功能,目前的8位与16位微处理器已不敷处理需求。就算8位或16位微处理器可勉强满足目前的要求,但很有可能限制未来的产品升级机会,并限制开发程序代码的再利用。



第二个常见的理由就是嵌入式系统开发商发现转换至32位微控制器的好处。32位微控制器不仅可提供10倍以上的效能,并能降低功耗、缩小程序体积、加快软件开发时程且提升软件之再使用率。另外则是内建ARM装置提供的多选择性、范围与可取得性。现在越来越多微控制器供货商开始供应采用ARM架构的微控制器。这些产品在外围设备、效能、内存大小、封装与成本方面,皆提供更多选择。



此外,采用ARM Cortex-M系列处理器有一些功能是专门针对微控制器应用所设计。这些功能使采用ARM微控制器的应用范围更广且为数更多。同时,过去五年来采用ARM微控制器的价格已大幅下降,且有越来越多低成本甚至免费的开发工具可供开发人员使用。



指令长度


许多人认为8位微控制器使用8位指令,而32位微控制器则使用32位指令。事实上,许多8位微控制器使用指令为16位、24位或其他大于8位的长度,举例来说,PIC18的指令长度为16位。即便是已过时的8051基础架构,有些指令为1字节,但其他许多指令则是2或3字节。这道理也适用于16位架构,举例来说,有些MSP430指令需要6字节(SP430X甚至需要8字节)。



ARM Cortex-M3与Cortex-M0处理器采用Thumb-2技术,提供绝佳的程序代码密度。处理器运用Thumb-2技术可支持Thumb指令集,包括16位指令以及32位指令,当中32位指令的功能为16位版本的超集(uperset)。多数情况下,除非只能执行32位,C编译程序(C compiler)都会使用16位版本的指令。




《图一 各处理器中单一指令的长度》




在Cortex-M处理器的编译程序中,32位指令的数量仅占总指令的一小部分。例如,针对Cortex-M3编译的Dhrystone编译程序中,32位指令仅占总指令的15.8% (平均指令长度为18.53位)。就Cortex-M0而言,32位指令所占比例更低,仅5.4%(平均指令长度为16.9位)。



指令集效率


ARM Cortex-M微控制器所使用之Thumb指令集效率相当高。例如,ARM微控制器的多重加载指令(multiple load instructions)、多重储存指令(multiple store instructions)、stack push与stack pop指令都允许单一指令执行传输多个数据。



强大的内存寻址模式(memory addressing modes)亦允许ARM微处理器简化内存存取序列(memory access sequences)。举例来说,内存可在单一指令下以缓存器偏移(register offset)、立即值偏移(immediate offset)、PC相关或堆栈指针(stack pointer)相关(可用于局部变量)之寻址模式来存取。额外功能还包括内存指针(memory pointers)之自动调整。所有的ARM处理器皆能以高效率处理8位与16位数据。



也有针对带正负号(signed)与未带正负号(unsigned)的8位、16位与32位数据之紧凑记忆存取指令。还有加入一些专门针对数据类型转换的指令。整体来说,ARM处理器中,8位和16位数据的处理,与32位数据的处理一样容易有效。



ARM Cortex-M微控制器亦提供强大之条件执行(conditional execution)功能。除了针对带正负号(signed)与未带正负号(unsigned)数据提供完整的ARM微控制器之分支条件(branch conditions)选择,ARM Cortex-M3微控制器亦提供条件执行、结合比较及分支指令。



Cortex-M0与Cortex-M3皆支持32位单一循环乘法运算(singe cycle multiple operation)。此外,Cortex-M3微控制器亦支持带正负号与未带正负号整数除法(signed and unsigned integer divide)、饱和(saturation)、32与64位乘法累加(multiply-accumulate, MAC)运算,以及许多位字段(bit field)运算指令。



8位应用迷思


许多嵌入式开发人员误以为他们的应用程序只执行8位数据处理,因此毋须改为32位处理器。但深入了解C编译程序手册后便会发现,humble integer其实是8位微控制器上之16位,所以每次执行整数运算或存取需要整数运算的C Library功能时,您其实是在处理16位数据。8位处理器核心必须使用序列的指令以及更多频率周期,以执行同等需求之处理量。



指针(pointers)亦是如此。在多数的8位或16位微控制器中,一个寻址指针至少需要16位。若使用的是8051里的一般内存指针,或用memory bank switching,或以类似的技术来克服64k字节的内存屏障(memory barrier),就还会需要更多位。因此,8位系统的内存指针处理效率相当低。



由于缓存器库(register bank)里的每个整数变量都需要多重暂存,在 8位微控制器里使用整数亦会导致更多内存存取、更多内存读/写指令与更多堆栈运算(stack operations)所需之指令。这些都会大幅增加8位微控制器上的程序代码长度。



该如何用特定指针范例来作统整比较呢?举例来说,针对各个基础架构编译之Dhrystone程序,经过长度优化后会导致以下结果:



(表一) 各个基础架构编译之Dhrystone程序





















微控制器 SiliconLabs C8051F320 Cortex-M0 Cortex-M3
工具 Keil µVision 3.8 PK51 8.18 RVDS 4.0-SP2 RVDS 4.0-SP2
二元输出大小(字节) 3186 912 900




多数嵌入式应用都因改采ARM Cortex-M微控制器而获益,主要因为程序代码长度缩短,因此只需要较少内存的低价装置。由于指令集效率提高、指令长度缩短,以及在多数嵌入式应用中处理16位或更大数据的需求,程序代码长度因而得以缩减。



效能与功耗


促使许多嵌入式系统开发商放弃8位与16位微控制器而改用32位微控制器的原因之一,为需要提升其产品的效能。以下将探讨ARM微控制器与其他微控制器在效能方面的比较,以及ARM微控制器如何协助降低功耗。



效能


一种常见的方式是利用Dhrystone指针来比较微控制器的效能。Dhrystone指针为免费工具,易于使用且体积小,置入微控制器后所占内存空间极少。原始的8051效能仅有0.0094 DMIPS/MHz。较新之8051s效能则略为提升,举例来说,Maxim 80C310装置之DMIPS为0.027,速度最快的8051微处理器宣称其Dhrystone效能为0.1 DMIPS/MHz。此速度还是比ARM Cortex-M微控制器慢的多,ARM Cortex-M的Cortex-M3处理器最大效能为1.25 DMIPS/MHz,而Cortex-M0处理器则可达0.9 DMIPS/MHz。




《图二 使用Dhrystone之基本效能比较》




8位与16位微控制器的限制


一般来说,8位微控制器处理16位与32位数据的效率很低。每次处理整数变量或指针时,便需要一序列的指令,导致效能降低及程序代码加大。



另一个造成许多8位与16位微控制器低效率的原因,在于指令集与程序设计师使用模型之限制。例如,8051大幅仰赖累积器(ACC)与数据指针缓存器(DPTR)进行数据转移与处理。因此需要指令将数据移入/出ACC与DPTR,便成为程序代码大小与执行周期的经常负载。



内存接口本身也会限制8位与16位处理器的效能。例如,许多8051指令需要多个字节。因为程序内存接口为8位,尽管指令本身是很简单的运算,内存仍需多次读取,进而需要多次频率周期来取得指令。



若需存取64K字节以上之内存,8位与16位微控制器之效能将更为降低。这些基础架构是设计来配合16位寻址。若需要64k字节以上之内存,便需额外的硬件与指令负载以产生额外的寻址位。针对需要存取64k字节以上内存的典型8051,内存会分成不同的记忆库,所有的记忆库的开关码(bank switching code)执行都需透过记忆库#0(bank #0)。这将导致程序代码长度增加与频率周期负载变大,进而降低内存使用效率。有些16位微控制器的变通办法,是使用更大的程序计数器或用内存分段(memory segmentation),但操作大型寻址数值仍需额外的处理,因此降低效能并导致程序代码增加。



低功耗


ARM处理器针对低功耗设计,采用许多低耗电技术。举例来说,Cortex-M0与Cortex-M3处理器支持休眠模式,及重返休眠模式(sleep-on-exit)。



为了解Cortex-M微控制器如何降低嵌入式系统的功耗,最好先从典型的微控制器产品内部结构开始研究。新型的微控制器中,处理器核心已不占据最大的面积。




《图三 使用ARM Cortex-M处理器可减少硅面积》




由于8位微控制器的程序代码密度不高,因此便需要更大的闪存,进而增加整体功耗。ARM微控制器的程序代码密度高,可使微控制器利用较小之闪存,并同时降低功耗与成本。



内存存取效率


藉由减少内存存取次数并利用32位总线以降低功耗。若要在内存里拷贝等量的数据,8位微控制器需要四倍的内存存取,且拷贝运算需要更多指令提取(instruction fetches)。因此,即使内存大小相同,8位微控制器需消耗更多电力才能达到同样的结果。



Cortex-M微控制器里的指令提取效率也远比8位与16位微控制器更高,由于每一次指令提取是32位,每次循环允许提取最多两个16位Thumb指令,并让数据存取有更高的总线带宽。针对同样长度的指令序列,8位微控制器需要使用四倍的内存存取次数,16位微控制器需两倍指令提取次数。因此,8位与16位微控制器所需之功耗远比ARM微控制器高。



降低操作频率以降低功耗


32位微控制器的高效能允许在低频率频率下执行应用程序以降低功耗。举例来说,某应用程序在8051上以30MHz执行,但在ARM Cortex-M3微控制器上只需3MHz频率频率,且效能仍可达到同样水平。



减少动态循环以降低功耗


此外,工作处理完成后,可利用ARM微控制器的休眠模式进一步降低耗电量。与8位及16位微控制器相比,Cortex-M微控制器的效能更高,因此完成工作后可更快进入休眠模式,进而降低整体系统动态循环数量。




《图四 Cortex微控制器可藉由减少动态循环来降低系统功耗 》




软件开发与总结


ARM Cortex M0微控制器的软件开发,较8位微控制器产品容易。Cortex-M处理器不仅可做完全的C程序语言设计,亦有各种进阶除错功能,协助搜寻软件中产生的问题。网络上亦有许多范例与教学,包括ARM微控制器供货商的网站,以及微控制器开发工具组等额外资源。



将软件从8位或16位微控制器移至ARM


与简单的8位微控制器相较,ARM Cortex-M微控制器在外围设备拥有较多缓存器。ARM微控制器的外围设备通常具备较多功能,因此有更多可排程缓存器。但是ARM微控制器供货商可提供设备驱动器数据库,利用几个函数调用(function calls)就能协助设定外围设备。



与大部分的8位与16位基础架构相比,ARM微控制器程序设计更具弹性。举例来说, 它没有硬件堆栈限制,函式可以递归方式存取,除此之外,软件部分不用特别去对针对缓存器中的数据做储存的动作,因为在进入中断时,CPU会以硬件的方式储存这些缓存器值。举例来说,若是MSP430,可能需在乘法运算过程中关闭中断;若是PIC,软件人员则需在中断处理前储存table pointers及乘数缓存器中的数据。



针对基础架构正确使用数据种类,将对程序代码长度与效能带来重大影响。某些数据种类的大小在ARM微控制器与8位/16位微控制器分别是不同的。



(表二)




























数据种类 8位/16位微控制器 ARM微控制器
整数 16位 32位(16位则使用短整数short int)
列举型别 8位/16位 8位/16位/32位
指针 16位或更多 32位
双精度浮点数 32位(使用单精准度) 64位(32位则使用浮点)




举例来说,若某应用程序在8位/16位微控制器的整数溢位(overflow)在16位范围内,那么该程序代码变量宣告型态需经调整才能在ARM微控制器上达到优化执行。



另一个数据大小差异带来的影响在于数据数组(data array)大小。举例来说,在8位微控制器应用程序之ROM整数数组定义如下:



const int mydata = { 1234, 5678, ...};



但若是在ARM微控制器上执行,为了避免不必要的ROM大小增加,该定义则应修改如下:



const short int mydata = { 1234, 5678, ...};



浮点指令的差异也会导致计算结果产生些微差距。由于8位与16位微控制器的效能差异限制,若使用双精度(double),它会以单精度(32位)处理。在ARM微控制器里,双精准度(double)数据类型为64位,因此对于32位浮点应改用单精准度类型(float)。这个差异也会影响数学函式。举例来说,以下来自Whetstone之程序代码会在ARM微控制器上产生双精度数学函式:



X=T*atan(T2*sin(X)*cos(X)/(cos(X+Y)+cos(X-Y)-1.0));



若为单精度,该程序代码应改为



X=T*atanf(T2*sinf(X)*cosf(X)/(cosf(X+Y)+cosf(X-Y)-1.0F));



除错


对某些用户来说,选择微控制器的关键考虑之一为除错支持。ARM Cortex-M微控制器支持全面的除错功能,包括硬件断点、观察点、缓存器存取与实时内存存取。除错方式采用JTAG或Serial Wire协议,以及标准化的Cortex除错阜安排,使得目标板易于与除错软件(debug hosts)链接。




《图五 Cortex-M微控制器的除错功能》




追踪支持为Cortex-M3用户提供额外的除错功能。基本的Cortex-M3处理器支持可选择之数据追踪、事件追踪、例外追踪以及纯文本输出追踪。追踪数据可由单一pin脚直接收集,此种方式称为Serial Wire Output (SWO),SWO和JTAG/SWD接头共享pin脚。如此一来,程序执行信息可被低成本之除错硬件纪录,而不需额外之追踪硬件。



许多Cortex-M3微控制器亦支持Embedded Trace Macrocell(ETM),扩大追踪支持至完整之指令追踪。此功能可详细分析应用程序代码执行,并允许执行程序代码剖析(code profiling)。因为Cortex-M0与Cortex-M3的相似性,可在Cortex-M3上用指令追踪来开发应用程序并加以除错,稍作修改后便可将该应用程序汇入Cortex-M0。




《图六 追踪功能提供高能见度》




司法


采用ARM微控制器最大的优势之一为多样选择性。可提供Cortex-M微控制器的厂商越来越多,搭配各种外围设备、接口、内存大小、封装以及频率范围。可提供之编译程序套件包括从免费或低成本套件,到多项进阶功能之专业编译程序套件。嵌入式操作系统、编码器与中间件厂商也提供更多的支持服务。



软件可移植性


ARM Cortex-M微控制器亦提供高度软件可移植性。虽然微控制器厂商为数众多,但都有各自的设备驱动器数据库,也有许多C编译程序厂商提供的各种编译程序套件,但仍可透过Cortex微控制器软件接口标准(Software Interface Standard, CMSIS)轻松导出/汇入软件。



许多微控制器厂商提供之微控制器设备驱动器数据库皆有CMSIS。它为核心函式与核心缓存器提供软件接口,并为标准化系统提供例外处理器名称。用CMSIS开发的软件可轻易在不同Cortex-M微控制器之间转移,并允许嵌入式操作系统或中间件产品同时支持多家厂商与多个编译程序套件。它亦提供更高的软件再使用率,以确保软件开发投资。



转移成本


近年来,技术的进步使ARM Cortex微控制器所需成本与8位及16位微控制器相当。这也是因为越来越多用户对于高效能、多功能微控制器需求增加,导致产量大幅上升,进而降低单位成本。




《图七 32位微控制器价格大幅降低》




目前已针对ARM Cortex-M微控制器提供许多低成本开发系列及免费开发工具包。同时,由于Cortex-M微控制器易于使用且效能良好,也缩短了产品开发时间,因此可降低整体产品开发成本。



总结


从8位微控制器转换至ARM Cortex-M微控制器,可提供更高的效能,并能以低成本开发进阶软件,亦可降低功耗及缩短程序代码长度。转换至16位基础架构或32位基础架构则无法提供同等效益。



(表三) ARM架构为控制器比较表



























































































  8051 其他8位 基础架构 16位基础架构 其他32位 基础架构 ARM Cortex


微控制器

效能

低功耗

程序代码密度

>64k字节内存


(原始、效率)

向量中断

低中断延迟

低功耗

多来源


(非专有基础架构)

编译程序选项

软件可移植性




从8位转至16位基础架构仅能解决部分8位微控制器带来的限制。16位基础架构在处理大内存(> 64k字节)时同样会产生效率不足的问题,且通常为专有基础架构,限制了装置选择性及软件可移植性。其它32位微控制器基础架构的中断功能、能源效率、系统功能与软件支持等亦十分落后。



展望未来,市场上将有更多Cortex-M微控制器产品,并且会有更多嵌入式系统项目改采ARM架构。



---本文作者为ARM工程师---



相关文章
以协助因应AI永无止尽的能源需求为使命
智慧家居大步走 Matter实现更好体验与可靠连结
车载软体数量剧增 SDV硬体平台方兴未艾
低功耗MCU释放物联网潜力 加速智慧家庭成形
AI赋能智慧边缘 行动运算处理器的时代革命
comments powered by Disqus
相关讨论
  相关新闻
» 贸泽技术资源中心协助因应严峻环境的挑战及提供解决方案
» 微星充电桩导入全国电子通路 合力打造新能源生活样貌
» 调研:2024年OLED显示器出货将成长 123%
» 调研:新资安漏洞一旦被揭露 平均不到5天将遭骇客利用
» 是德、新思和Ansys共同开发支援台积电N6RF+制程节点射频设计迁移流程


刊登廣告 新聞信箱 读者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 远播信息股份有限公司版权所有 Powered by O3  v3.20.1.HK85ADBPZ4CSTACUK0
地址:台北数位产业园区(digiBlock Taipei) 103台北市大同区承德路三段287-2号A栋204室
电话 (02)2585-5526 #0 转接至总机 /  E-Mail: webmaster@ctimes.com.tw