Arm 架构已经主导了当今嵌入式处理和计算市场,但在过去的几十年里,Arm 架构却走过了漫长的道路。从20世纪80年代开始,它起初是作为家用电脑处理器,然后在20世纪90年代成为手机芯片的基础。如今,在几乎所有技术细分市场,Arm都是一个强有力的竞争者。许多人认为,Arm 架构已成为 32 位或 64 位处理器的首选。由于这种广泛应用,现在已经有成千上万种基于Arm架构的变体。了解这些内核彼此之间的不同是做出选择决策的重要一环。

 

早在 2004 年,最初的 Cortex 家族就使 Arm架构分化为三个内核产品组,每个产品组都针对不同类型的应用。最早集成到芯片的是Cortex-M,它已成为基于Arm微控制器(MCU)生态系统的支柱。尽管Cortex-M系列首次推出的是基于版本7架构的内核,但后来针对超低成本设备(即M0、M0+和M1)的新产品则是基于早期版本6架构。所有Cortex-M处理器仅执行Thumb指令集。另外两个系列被设计为支持Thumb和完整的A32指令集。

 

arm多核处理器编程架构 arm处理器内核_缓存

 

图1:Silicon Labs的EFM Tiny Gecko(小壁虎)。

 

自推出以来,Cortex-M3已经得到许多MCU供应商的采用,Cortex-M3内核帮助这些MCU厂商定义其32位产品。现在市场可用的MCU包括相对简单但又具备高性价比的产品,例如针对低功耗系统的Silicon Labs 的 EFM Tiny Gecko,以及赛普拉斯(Cypress)半导体的 PSoC5片上系统,它使传统的MCU外设与高度灵活的可编程模拟功能结合在一起。

 

随着MCU应用开始要求提供更高的数字信号处理(DSP)性能,Arm推出Cortex-M4以满足市场的需求。该内核可为浮点运算提供支持,得到许多厂商的采用。一种常见的配置是将强大的Cortex-M4F内核与较为简单的Cortex-M0或Cortex-M0+整合在一起,为用户提供高效的电源管理和资源分配。

 

在赛普拉斯 PSoC6 或恩智浦(NXP)LPC5411x等器件中,M0+内核可以处理中断(interrupts),使M4或M4F可自由处理 DSP 任务,而不会产生中断,从而能够最大限度地提高数据吞吐量。这种责任划分也使更强大的M4内核能够在活动突发之间进行较长时间睡眠。低功耗M0+ 可在相对有限的运行期间处理比较简单的系统管理任务。

 

arm多核处理器编程架构 arm处理器内核_缓存_02

 

图 2:来自赛普勒斯半导体的 PSoC6。

 

2014 年,Arm推出了M7内核,将 Cortex-M 的性能提高到新的层级。此内核采用六级超标量(superscalar)流水线架构,支持乱序操作,并通过完整的浮点运算单元来进一步增强。意法半导体的STM32F730x8集成了M7内核、各种外设和公司专有的ART加速器技术(能够实现闪存的零等待状态执行)。

 

Cortex-A

 

2005 年,出于满足手机业务向智能手机和平板电脑方向发展的需求变化,Arm推出了Cortex-A家族的首个成员。Cortex-A 旨在提供一系列针对应用处理器定制的功能,也为在服务器和其他高端计算系统中部署 Arm内核铺平了道路。

 

Cortex-A 处理器与其他系列处理器之间的一个主要区别是支持分页内存管理单元(MMU)。Linux和类似的操作系统都需要MMU,因为它能够将程序及其数据在现实内存中映射到不同虚拟地址空间,这提供了一定程度的安全保护功能,可防止不同任务使用的数据被破坏,此外还能够将物理内存视为大型缓存。尽管程序是动态加载和卸载,它还能够避免内存碎片化引起的问题。

 

使用分页虚拟地址的一个潜在缺点是它们可能干扰实时操作,因此在Cortex-A处理器中增加了MMU,但在具有更强嵌入式系统功能的产品系列中却没有。Cortex-A架构从诞生之初的一个关键创新是TrustZone,由此可实现一个基于硬件的安全层,如果没有所需的安全证书,虚拟设备管理器(hypervisor)能够拒绝任何任务对处理器和内存某些部分的访问。TrustZone可将加密操作和其他敏感操作纳入受硬件防火墙保护的虚拟处理器。

 

在内核方面,范围从相对简单的Cortex-A5到高性能超标量处理器,如Cortex-A72整合了同时发出三个指令的能力和执行无序操作,简化了调度以实现最高效率。

 

Cortex-A家族的第二个重大创新是LITTLE框架,它是在2011年推出,这主要反映了针对应用处理器市场的M4引入后不同Cortex-M内核的耦合,增强了支持应用处理器需求的其他功能。

 

对于较大LITTLE,Arm采用了将低端内核(如A5或A7)与高性能,且通常是超标量实施相结合的方法。在可能的情况下,操作系统会保持低功耗处理器的活动时间尽可能长,然后在工作负载超过特定阈值时才激活高功率内核。与传统的双核架构不同,任务可以根据系统条件从一个处理器迁移到另一个处理器。随着对性能需求的增加,越来越多的Cortex-A实施都是围绕处理器复合体采用四个高端内核。通过在性能要求比较平静的期间关闭一个或多个内核,这种安排可以节省功率。

 

Cortex-R

 

Cortex-R是Arm公司第三大系列内核,通过采用实时且高度可靠的功能,能够支持新一代复杂的汽车和网络系统。在一些目标应用中需要一些确定性性能,意味着通常用于加快其他 Arm 处理器的缓存并不总是最佳方案。由于缓存会动态地将指令和数据值替换为最近使用的条目,因此,当中断服务例程或实时任务需要时,关键信息可能不在缓存中。Cortex-R家族通过支持紧密耦合存储器(TCM)库克服了这一问题。因此,关键信息可以在操作过程中存储在其中,并且通过软件管理,避免了指令和数据被缓存管理子系统替换的风险。

 

自从最初的Cortex-R4诞生以来,这个家族已经发生了很多进化,其中Cortex-R5和R7内核具有低延迟外围端口。大多数内核都设计为与Arm 硬件总线 (AHB)等片上总线配合使用,或者在最近的内核中,结合使用高级可扩展接口(AXI)基础架构。低延迟端口将内核直接连接到重要的外围设备,无需对总线进行仲裁,或等待其他总线访问活动完成,即可进行访问。

 

为了支持高度可靠的操作,Cortex-R内核上的缓存、TCM 和系统总线可以使用错误修改编码来透明地更正单位(single-bit)错误并检测双位错误。由于模块化冗余是安全关键型系统的核心部分,Cortex-R 系列内核设计为可使用副本在锁定步骤中工作。如果片上监视器检测到输出差异,它可以警告存在的问题,以便软件能够采取纠正措施。采用Cortex-R 系列而生产的一个芯片例证是赛普拉斯半导体的Traveo S6J33xx系列 MCU,它集成有Cortex-R5F内核,运行在高达240MHz的频率,并集成有针对汽车仪表板中驱动仪表群集而优化的外围设备。

 

Arm v8

 

在2011 年,随着版本8体系架构的创建,迎来了Arm内核产品的第二波更改,包括增强了具体应用在64位模式下运行的能力,极大地扩展了应用处理器的最大可寻址内存空间。具有64位能力的Arm v8 处理器可以在 32位或 64位模式下运行。32位运行与为版本7处理器编写的应用提供向后兼容性。由于Cortex-M 系列中的版本8处理器专注于MCU应用,因而不支持64位寻址。但是,它们确实增加了许多额外的指令和功能,以提高性能并增强安全操作。

 

其中一个重要的进步是重新设计的内存保护单元(MPU),它允许更灵活地管理分区。另一个是完全支持仅执行内存(execute-only-memory),以帮助防止反向工程和黑客攻击。但是,安全性方面最大的变化是支持专门针对深度嵌入式处理器而优化的TrustZone机制。

 

对于Cortex-M 版本中TrustZone,无需软件虚拟设备管理器来管理安全状态和非安全状态之间的转换。相反,可使用专用指令从不安全的任务传递数据到安全的功能,以保护允许在特权模式下运行。如果没有正确的权限,即使高优先级中断也无法读取到寄存器中的安全数据。安全功能允许创建保护良好的 IoT 设备,这些都可以通过基于Cortex-M23和Cortex-M33等内核的MCU实现。

 

Microchip的 SAML11 MCU采用了Cortex-M23增强型片上加密控制器,可为传感器节点和类似设计提供硬件安全保证。Nordic Semiconductor的nRF9160采用Cortex-M33来提供需要安全射频通信的器件处理功能。

 

arm多核处理器编程架构 arm处理器内核_arm多核处理器编程架构_03

 

图 3:Microchip公司的 SAML11 MCU 示例。

 

结论

 

毫无疑问,Arm是全球电子行业中最伟大的成功案例之一。为了满足许多不同市场的需求,Arm提供的广泛产品组合继续向多个方向扩展。Cortex-A、Cortex-M和Cortex-R等细分产品系列的进一步区分,已证明是这种快速增长的基础,并且将继续推动Arm内核在不断出现的新领域得到广泛应用。