一下内容是本人根据英文的PDF自己翻译的,可能对有些想了解一下Cortex-M0的朋友有些帮助。由于英文水平有限,翻译的不好的地方还请见谅,大家有更好的翻译意见也欢迎提出来。
ARM Cortex-M0简介 Dominic Pajak,ARM 随着能源价格的持续增长以及环境的成熟,对于日益普及的嵌入式设备的开发者来说,在平衡产品的性能和功耗方面面临着严峻的挑战。在需要满足低功耗的应用场合,传统上一般使用16位的微控制器,但是16位的微控制器已经不能满足当前的应用需求。面对这个挑战,ARM公司开发出了一款具有32位微控制器的性能,同时在功耗以及逻辑门的数量上又能与传统的16位微控制器媲美的处理器。 1 概述 为了满足市场对于具备较高连接性(如USB、蓝牙、IEEE802.15)和复杂的模拟传感器(如加速器、触摸屏)的低成本产品不断增长的需求,必须在模拟设备中更紧密地集成数字功能,以实现数据的预处理和通信。在不大幅度提升频率和功率的前提下,凭借大多数8位设备的现有性能都无法实现上述目标,因此嵌入式开发人员需要寻找采用更先进的处理器技术的其他设备。16位设备一直以来都被用来提高微控制器应用中的能源效率。但是,由于16位设备的性能效率较低,通常需要延长它们的活跃工作周期,或者提高时钟频率,才能完成一般由32位设备完成的任务。新开发的32位ARM Cortex-M0处理器可以在保持低功耗的前提下改善性能效率,从而满足上述要求,也因而成为下一代超低功耗MCU和精密模拟设备的理想选择。 ARM Cortex-M0处理器。ARM Cortex-M0系列处理器是专为解决需要低功耗和快速中断响应能力的深层嵌入式应用而设计的理想微控制器。目前,该领域的旗舰处理器为ARM Cortex-M3,它具有优异的性能和效率。新的ARM Cortex-M0对其进行了补充,它向上兼容ARM Cortex-M3处理器的所有功能,并且具有更小的面积和更低的功耗。 ARM Cortex-M0处理器是采用精简指令集(RISC)的32位处理器,其具有0.9DMIPS /MHz的指令执行速度,采用了一个只有不到60条指令的小型指令集构架(ISA)。这个小型指令集构架(ISA)是在ARM7TDMI中首次应用的16位的Thumb指令集的一个扩展集,Thumb指令集也是之后的所有ARM处理器的ISA的基础(更多关于ISA的信息,请参见总结)。Thumb指令集之所以能够长期以来受到用户的普遍欢迎,在于它具有非常高的代码密度,这对嵌入式设备来说是非常重要的,它可以减少程序所需的内存,从而节约成本。Cortex-M0只有很少的逻辑门数(最小配置为12000个逻辑门),这使得它非常适用于低成本的使用大硅片加工技术的微控制器和混合信号设备(如0.35μm,0.25μm, 0.18μm)。另人难以置信的是,ARM Cortex-M0在只有ARM7TDMI三分之一的大小和功率的情况下几乎能够达到与其一样的性能。 2 超低功耗设计 尽量减少设备的能耗。在一个微控制器设备中,处理器逻辑需要消耗总电流的一定比例,它可以处于活动或休眠状态。在典型配置的情况下,使用ARM标准单元库的工作于1.8伏、180ULL(超低漏电)执行进程的ARM Cortex-M0处理器有助于减少50μA/MHz的有源电源(取决于实施方法和制作工艺)。 处理器不是设备中唯一消耗能源的部分,对于微控制器中的其他功能部件也必须悉心调节,以实现真正的超低功耗(如内存、外设机构、执行部件、时钟发生器以及电压控制模块等)。然而,处理器对能源消耗的影响依然是至关重要的,这体现在处理器活动期间对外设和内存的访问等方面(例如,使用Thumb指令集的较小规模的代码可以降低访问flash时的能源消耗)。尽量减少有功电流同样有利于拓宽实际应用中可使用的电源的类型,使其可使用比普通电源更小、更便宜的电池作为有效能源,当然也可以使用可再生的能源作为设备的有效能源。而且,在降低能耗同时也可以降低供电的复杂性。 降低系统功率。在一个减少能源消耗的系统中,在传感器节点处使用数字处理器是一种有效的方法。例如,压缩、过滤或分析模拟传感器的节点处的采样数据,可以大大减少IEEE 802.5无线传感器中活动的RF收发器的数量。在一个光学心率显示器应用中,这就意味着只有一个BMP(每分钟心跳数)值需要通过无线传输,而不是整个传感器的采样数据流。另一个例子是,通过分析模拟传感器传来的数据以确保一个系统中的高性能应用处理器只有在用户需要使用到它的时候才处于活动状态(例如,对于一个具备触摸屏的智能手机,只有当用户点击触摸屏的时候才向主处理器传递信号并唤醒手机)。目前,在汽车应用中,使用越来越多的传感器和驱动器用于提高CAN总线的速度,通过上诉方法可以大大的减少系统的通信量。以上这些所有的应用都是受益于处理器能力的提升,而通过与模拟传感器的紧密结合,Cortex-M系列处理器能够轻而易举的达到这些要求。 衡量能源的使用效率。降低微控制器的功耗的一个常用方法是,尽可能的使微控制器处于低功耗的休眠模式,只有在需要使用它的时候才将其唤醒。此时,微控制器的功耗为其处于休眠状态和活动状态时的平均电流功率。(如图 1所示,在一个基于IEEE 802.5的无线传输系统中,在实际应用时,活动状态的占空比可以小于0.05%,并且,同一个设备其活动状态是的电流大小与休眠是的电流大小甚至成指数关系。) 图 1 平均电流由三个变量决定,它们分别是:活动占空比(即,设备处于活动状态的时间所占总时间的百分比),设备活动状态下的电流和设备休眠状态下的电流。选择一个低功耗的微控制器,其处理器对这三个变量都会有影响。在接下来的一节里,我们将看到是怎么设计ARM Cortex-M0以使其达到这三个方面的要求的。 3 能智能的运行,更长的休眠 ARM Cortex-M0(以及更高性能的Cortex-M3)相对于8位或16位构架的处理器的一个重大优势在于执行效率——它能更快的完成任务,从而缩短处理器的活动时间。这个性能上的优势源于Cortex-M0能够单周期的执行32位的算术和逻辑操作(包括单周期的32位乘法操作),并且能够通过索引定址在单周期内完成8位、16位或者32位的数据的传输。这使得其在对处理器的时钟频率的需求上达到非常理想的效果,此外在对用于存储关联程序的内存要求上也是如此。 Cortex-M0比之8位和16位处理器的性能上的优势也使得具有逻辑传感功能的器件受益匪浅——时钟频率的减小意味着低噪音以及高精度的模拟量。在考虑到RF(射频)应用时,减少伴随的电磁干扰同样非常重要。最后,对于软件开发者来说,Cortex-M0对于使用和建立及支持构架有着非常大的好处,关于这点我们将在接下来的小结讨论。 更小的代码空间以及更高的执行效率¬¬¬——以16位乘法为例。许多模数转换器(ADC)都拥有10位或12位的采样精度,这要求对16位的数据进行传输和操作。如表 1所示,我们进行一次16×16的乘法操作,从表中可以看出,ARM Cortex-M0不仅仅是具有更高的执行效率,同时将运算编译为更小的代码。然而大多数用户都选择用C语言编写程序,因此大家都比较关心与8位和16位的处理器相比Cortex-M0的汇编程序(对C语言的反汇编程序)会简洁多少。由于使用了24位的高精度计算,(在使用C语言编程,经编译器反汇编后)ARM Cortex-M0的汇编代码仍然保持不变,但是8位和16位处理器的汇编代码会越来越复杂,需要更多的时钟周期来执行。 表 1 8位处理器(8051) 16位处理器 ARM Cortex-M0 MOV A, XL ; 2 bytes MOV B, YL ; 3 bytes MUL AB; 1 byte MOV R0, A; 1 byte MOV R1, B; 3 bytes MOV A, XL ; 2 bytes MOV B, YH ; 3 bytes MUL AB; 1 byte ADD A, R1; 1 byte MOV R1, A; 1 byte MOV A, B ; 2 bytes ADDC A, #0 ; 2 bytes MOV R2, A; 1 byte MOV A, XH ; 2 bytes MOV B, YL ; 3 bytes MUL AB; 1 byte ADD A, R1; 1 byte MOV R1, A; 1 byte MOV A, B ; 2 bytes ADDC A, R2 ; 1 bytes MOV R2, A; 1 byte MOV A, XH ; 2 bytes MOV B, YH ; 3 bytes MUL AB; 1 byte ADD A, R2; 1 byte MOV R2, A; 1 byte MOV A, B ; 2 bytes ADDC A, #0 ; 2 bytes MOV R3, A; 1 byte MOV R4,&0130h MOV R5,&0138h MOV SumLo,R6 MOV SumHi,R7 (操作数由映射到存储器的硬件乘法单元取读取或写入) MULS r0,r1,r0 耗时: 48个时钟周期 代码大小: 48 bytes 耗时: 8个时钟周期 代码大小:8 bytes 耗时: 1个时钟周期 代码大小: 2 bytes ARM Cortex-M0 相对于16位构架的处理器来说至少具有两倍的优势,这意味着使用Cortex-M0处理器的设备能够以使用16位构架的处理器的设备两倍的速度进入超低功耗的休眠状态。 4 超低功耗 低活动电流。除执行性能之外,还有一个方面使得ARM Cortex-M0区别于其他32位处理器,那就是Cortex-M0具有非常低的有功功率(85μW/MHz on 180ULL)。这得益于其高度优化的指令集与微型结构的完美结合,更重要的是它使用的ARM 物理IP大大的增强了其执行能力。极低的活性电流意味着该设备能够由比普通电源更小更经济的电池来驱动,同时更加省电。尽管在一个设备(比如微控制器)中处理器并不是唯一一个消耗能源的部分,但是日益增加能源成本和对低功耗器件的需求使得每一μA都是非常珍贵的。 超低功耗休眠。ARM Cortex-M0处理器中微小的硅片面积(只有0.25毫米每180ULL)使得微控制器设备中处理器的休眠功耗微乎其微。在某些应用场合,设备99%的时间都是处于休眠状态的,因此这点对于降低设备功耗也是非常重要的。与Cortex-M3一样,Cortex -M0支持休眠模式,软件可以使处理器进入休眠状态并且等待一个中断将其唤醒,这通过WFI(等待中断)指令完成。PMK(电源管理单元)中的状态**技术使得处理器的休眠状态大获益处,它意味着处理器会一直保持当前的状态,并能在瞬间被唤醒。缩短唤醒处理器所需的时间以及处理器响应外部中断的时间对于提高处理器的活性非常重要。与指令集紧密结合的嵌套向量中断控制器(NVIC)使得Cortex-M0 的中断响应能力非常出色。处理器的出口休眠特征(exit feature)意味着,如果Cortex-M0被某个中断唤醒以为其服务,那么一旦中断服务程序一完成处理器又马上回到休眠状态。 5 简单并且兼容 Cortex-M0纳入了在ARM Cortex-M3处理器中首次应用的技术,这使得它能够加快软件的开发速度,并使其能够与使用ARM Cortex-M3以及更高层次的处理器的器件相兼容。这是每个Cortex-M系列处理器共有的特性。使用Cortex-M0进行软件开发的软件开发人员并不需要对处理器有深刻的了解,甚至根本不用编写任何汇编代码。例如,在传统的处理器构架中,中断服务程序需要使用汇编语言编写一个具有最高优先级的中断处理程序来处理其他优先级的次序、进行上下文切换以及调用所有C程序的次优先级中断服务程序。相比之下,Cortex-M0通过其嵌套向量中断控制器(NVIC)以硬件的方式实现该首级处理,这大大的降低了低优先级中断的等待时间,使其能够零抖动的得到响应。对于软件开发人员来说,这样做的一个巨大好处是,他们可以直接使用惯用的C语言来编写Cortex-M0的中断服务程序。这可以减少代码的大小以及复杂程度,此外还免除了以往需要编写汇编程序的烦恼。Cortex-M0的简单的线性地址空间包含数据页或代码页,这意味着通过它,可以简单而直接的访问任何现有的Flash或SRAM器件中的任何存储单元。Cortex-M0中包含了标准硬件定时器(SysTick),这使得在将实时操作系统(RTOS)移植到基于Cortex-M0处理器的微控制器器件时不必再专为实时操作系统而改写系统的定时器代码,从而使实时操作系统的移植更加容易。ARM Cortex-M0 的小型指令集构架(ISA)是基于16位的Thumb指令集的。同时出于对电源管理(如中断等待)和向上兼容性的考虑,Cortex-M0 的小型指令集构架(ISA)中也加入了少量的Thumb-2系统指令。对于开发者而言,使用Thumb指令接意味着软件拥有更小规模的代码,对器件的内存空间的更低需求,这也是Cortex-M0相对于8位和16位构架处理器的一个重大优势。考虑到将来的发展,ARM Cortex-M系列处理器为那些使用Cortex-M0处理器进行长期来看需要更高性能的设计,而使用Cortex-M3处理器提供理想的高性能使产品进一步升级的用户提供了一个向上兼容的途径。在FPGA原型方面,ARM Cortex-M1处理器与Cortex-M0处理器采用了同样的ISA结构,并且实现了100%的兼容。Cortex-M1处理器和Cortex-M0处理器的不同之处在于,它们采用了两种高度优化的不同的制作技术(FPGA和ASIC),但是他们的指令集是完全兼容的。Cortex-M系列处理器的设计思想,加上ARM公司合作伙伴提供的广泛的软件开发工具和操作系统的支持,对于那些以该系列处理器为内核的MCU、SOC和FPGA的开发具有莫大的益处。 6 总结 我们已经看到,ARM Cortex-M0处理器已经把处理器的活动周期以及活性/待机电流降低极低的程度,这对降低峰值电流和延长电池的寿命有着极大的好处。这些技术上的优势结合ARM公司优秀的设计思路以及ARM公司的合作伙伴提供的软件开发工具,使ARM Cortex-M0处理器必将成为在长寿命电池供电以及节能应用中使用的下一代MCU和混合信号器件的理想选择。
PS:另附上英文原文PDF,感兴趣的朋友可以看一下。 相关链接:https://bbs.21ic.com/upfiles/img/20095/20095172545696.pdf |