ARM Cortex系列是ARM公司推出的新一代微处理器的内核,分为三个系列,分别是Cortex-A,Cortex-R,Cortex-M
其中A系列用于高端应用处理,譬如说现在最火的苹果的两大拳头产品都是A系列的内核,支持指令集为ARM,Thumb,Thumb2
R系列用于实时系统中,属于中级应用,对于实时场合能够快速响应,满足最苛刻的实时要求,
M系列属于低端应用了,就是一个32位的MCU,主要用于对成本敏感的产品上,据说ARM公司是想用M系列的产品取代传统的8位,16位MCU,M系列是同类产品中门数最少,功耗最低,性能最好的了,一般国内提到M系列的产品都是首推ST的。支持的指令集只有Thumb2
ARM 是 32 位嵌入式微处理器的行业领先提供商,已推出各种各样基于通用架构的处理器,这些处理器具有高性能和行业领先的功效,而且系统成本也有所降低。与业界最广泛的体系(拥有超过 750 个可提供芯片、工具和软件的合作伙伴)相结合,已推出的一系列 20 多种处理器可以解决所有应用难题。迄今为止,ARM 已生产超过 200 亿个处理器,每天的销量超过 1000 万,是真正意义上的 The Architecture for the Digital World®(数字世界的架构)。ARM Cortex有Cortex™-A 系列 - 开放式操作系统的高性能处理器、Cortex-R 系列 - 面向实时应用的卓越性能、Cortex-M 系列 - 面向具有确定性的微控制器应用的成本敏感型解决方案三个种类。
ARM Cortex 应用程序处理器
Cortex™-A 系列 - 开放式操作系统的高性能处理器
Cortex 应用程序处理器在高级工艺节点中可实现高达 2GHz+ 标准频率的卓越性能,从而可支持下一代的移动 Internet 设备。这些处理器具有单核和多核种类,最多提供四个具有可选 NEON™ 多媒体处理模块和高级浮点执行单元的处理单元。
应用包括
智能手机
智能本和上网本
电子书阅读器
数字电视
家用网关
各种其他产品
ARM Cortex 嵌入式处理器
Cortex-R 系列 - 面向实时应用的卓越性能
Cortex-M 系列 - 面向具有确定性的微控制器应用的成本敏感型解决方案
Cortex 嵌入式处理器旨在为各种不同的市场提供服务。
Cortex-M 系列处理器主要是针对微控制器领域开发的,在该领域中,既需进行快速且具有高确定性的中断管理,又需将门数和可能功耗控制在最低。
而 Cortex-R 系列处理器的开发则面向深层嵌入式实时应用,对低功耗、良好的中断行为、卓越性能以及与现有平台的高兼容性这些需求进行了平衡考虑。
应用包括
Cortex-M 系列
微控制器
混合信号设备
智能传感器
汽车电子和气囊
Cortex-R 系列
汽车制动系统
动力传动解决方案
大容量存储控制器
联网和打印
经典 ARM 处理器
ARM11™ 系列 - 基于 ARMv6 架构的高性能处理器
ARM9™ 系列 - 基于 ARMv5 架构的常用处理器
ARM7™ 系列- 面向普通应用的经典处理器
ARM 经典处理器适用于那些希望在新应用中使用经过市场验证的技术的组织。这些处理器提供了许多的特性、卓越的功效和范围广泛的操作能力,适用于成本敏感型解决方案。这些处理器每年都有数十亿的发货量,因此可确保设计者获得最广泛的体系和资源,从而最大限度地减少集成过程中出现的问题并缩短上市时间。
架构
CPU架构,目前没有一个权威和准确的定义,简单来说就是CPU核心的设计方案。目前CPU大致可以分为X86、IA64、RISC等多种架构,而个人电脑上的CPU架构,其实都是基于X86架构设计的,称为X86下的微架构,常常被简称为CPU架构。
更新CPU架构能有效地提高CPU的执行效率,但也需要投入巨大的研发成本,因此CPU厂商一般每2-3年才更新一次架构。
ARM 架构支持各种性能点上的实现。在许多细分市场中它都占有主要架构的地位。ARM 处理器架构简单,因而可以进行极小规模的实现,而小规模的实现则意味着设备的功耗可以很低。实现规模、性能和非常低的功耗是 ARM 架构的关键特性。
32 位 ARM 指令集基于 RISC 原理,其中包括:
- 大型统一寄存器文件
- 加载/存储架构,其中的数据处理操作只针对寄存器内容,并不直接针对内存内容
- 简单寻址模式,所有加载/存储地址只通过寄存器内容和指令字段确定。
此外,ARM 架构还包括某些可改进代码密度和性能的其他主要特性:
- 可组合使用转换与算术或逻辑运算的指令
- 用于优化程序循环的自动递增和自动递减寻址模式
- 加载和存储多个指令以使数据吞吐量最大化
- 几乎所有指令都采取条件执行的方式以使执行吞吐量最大化。
这些对基本 RISC 架构的增强使 ARM 处理器可以实现较高性能、较小代码大小、较低功耗和较小硅面积的良好平衡。
ARM 架构一方面在各个实现之间保持了很高的兼容性,一方面也在不断地改进。
- ARMv4T 架构引进了 16 位 Thumb® 指令集和 32 位 ARM 指令集,目的是在同一个架构中同时提供高性能和领先的代码密度。16 位 Thumb 指令集相对于 32 位 ARM 指令集可缩减高达 35% 的代码大小,同时保持 32 位架构的优点。
示例处理器- ARM7TDMI®
- ARMv5TEJ 架构引进了数字信号处理 (DSP) 算法(如饱和运算)的算术支持和 Jazelle® Java 字节码引擎来启用 Java 字节码的硬件执行,从而改善用 Java 编写的应用程序的性能。与非 Java 加速内核比较,Jazelle 将 Java 执行速度提高了 8 倍,并且减少了 80% 的功耗。许多基于 ARM 处理器的便携式设备中已使用此架构,目的是在游戏和多媒体应用程序的性能方面提供显著改进的用户体验。
示例处理器 - ARM926EJ-S™ 和 ARM968E-S™
- ARMv6 架构引进了包括单指令多数据 (SIMD) 运算在内的一系列新功能。SIMD 扩展已针对多种软件应用程序(包括视频编解码器和音频编解码器)进行优化,对于这些软件应用程序,SIMD 扩展最多可将性能提升四倍。此外,还引进了作为 ARMv6 架构的变体的 Thumb-2 和 TrustZone 技术。
示例处理器 - ARM1176JZ 和 ARM1136EJ
- ARMv6M 架构为低成本、高性能设备而设计,向以前由 8 位设备占主导地位的市场提供 32 位功能强大的解决方案。其 16 位 Thumb 指令集架构允许设计者设计门数最少却十分经济实惠的设备。始终如一的中断处理结构和编程器模式为所有 Cortex-M 系列处理器(从 Cortex-M0 处理器到 Cortex-M3 处理器)提供了完全向上兼容的途径。
示例处理器 - Cortex™-M0 和 Cortex-M1
- ARMv7 架构向目标应用提供一组自定义配置文件。所有 Cortex 处理器都实现了 ARMv7 架构(实现 ARMv6M 的 Cortex-M 系列处理器除外)。所有 ARMv7 架构配置文件都实现了 Thumb-2 技术(一个经过优化的 16/32 位混合指令集),在保持与现有 ARM 解决方案的代码完全兼容的同时,既具有 32 位 ARM ISA 的性能优势,又具有 16 位 Thumb ISA 的代码大小优势。ARMv7 架构还包括 NEON™ 技术扩展,可将 DSP 和媒体处理吞吐量提升高达 400 个百分比,并提供改进的浮点支持以满足下一代 3D 图形和游戏物理学以及传统嵌入式控制应用程序的需要。Cortex 架构旨在横跨各种应用领域(从成本少于 1 美元的微控制器到功能强大,运行速度超过 2GHz 的多核设计)。此架构分为 3 种配置文件:
-
- Cortex-A - 应用程序配置文件,它在 MMU(内存管理单元)、用于多媒体应用程序的可选 NEON 处理单元以及支持半精度、单精度和双精度运算的高级硬件浮点单元的基础上实现了虚拟内存系统架构。它适用于高端消费电子设备、网络设备、移动 Internet 设备和企业市场。
示例处理器 - Cortex-A9, Cortex-A8 和 Cortex-A5
- Cortex-R - 实时配置文件,它在 MPU(内存保护单元)的基础上实现了受保护内存系统架构。它适用于高性能实时控制系统(包括汽车和大容量存储设备)。
示例处理器 - Cortex-R4(F)
- Cortex-M - 微控制器配置文件,可快速进行中断处理,适用于需要高度确定的行为和最少门数的成本敏感型设备。
示例处理器 - Cortex-M3
软件兼容性
由于所有架构变体都具有通用的指令集,因此用户可通过 ARM 架构构建具有最佳兼容性的软件,从而保护其软件投资。ARM 架构受所有领先的软件工具供应商的支持,允许跨多个项目使用通用工具链,甚至允许交叉使用由这些工具链生成的代码,前提是这些项目和代码遵循 ARM 架构的应用程序二进制接口规格。
未来版本的 ARM 架构将保留此兼容性。
指令集
ARM 32 位指令集是 ARMv4T、ARMv5TEJ 和 ARMv6 体系结构中使用的基本 32 位 ISA。在这些体系结构中,该指令集用于需要高性能的应用领域,或用于处理硬件异常,如中断和处理器启动。
对于关键性能应用和旧代码,Cortex 体系结构的 Cortex™-A 和 Cortex-R 配置文件也支持 ARM 32 位 ISA。其多数功能都包括在 Thumb-2 指令集中,该指令集也从改进的代码密度中获益。
ARM 指令的长度为 32 位,需要 4 字节边界对齐。
还可对所有 ARM 指令进行“条件化”,使其仅在以前的指令设置了特定条件代码时执行。这意味着,如果应用程序状态寄存器中的 N、Z、C 和 V 标记满足指令中指定的条件,则指令仅对程序员的模型操作、内存和协处理器发挥其正常作用。如果这些标记不满足此条件,则指令会用作 NOP,即执行过程正常进入下一指令(包括将对异常进行任意相关检查),但不发挥任何其他作用。此条件化指令允许对 if 和 while 语句的一小部分进行编码,而无需使用跳转指令。
条件代码包括:
条件代码 |
含义 |
N |
否定条件代码,如果结果为否定的,则设置为 1 |
Z |
零条件代码,如果指令的结果为 0,则设置为 1 |
C |
进位条件代码,如果指令生成进位条件,则设置为 1 |
V |
溢出条件代码,如果指令生成溢出条件,则设置为 1。 |
ARM指令集比较简单,本文介绍ARM指令集中需要注意和不易理解的地方。
一、ARM指令集是32位的,程序的启动都是从ARM指令集开始,包括所有异常中断都是自动转化为ARM状态,并且所有的指令都可以是有条件执行的。
二、ARM指令集是Load/Store型的,只能通过Load/Store指令实现对系统存储器的访问,而其他的指令都是基于处理器内部的寄存器操作完成的,这和INTEL汇编是不同的,初学者很不易理解。
三、指令的后缀:
"S" 可选后缀,若指定S,则根据指令执行的结果更新CPSR中的条件码。很多初学着不知道怎么更新,若这条指令执行完以后,对ARM程序状态寄存器的条件码标志(N,Z,C,V)的影响。
"! " 表示在完成数据操作以后,将更新基址寄存器,并且不消耗额外的时间。
如:LDR R0, [R1, #4] 他相当于 R0 <- mem32[R1+4]
R1 = R1+4;
"^" LDMFD R13!, (R0-R3, PC)^ //"^"表示一条特殊形式的指令。(在从存储器中装入PC的同时,CPSR也得到恢复)。
四、#号后面加0x或&表示十六进制:#0xFF, #&FF
#号后面加0b表示二进制。
#号后面加0d表示十进制。
*******************************************************************************
五、立即数寻址
每个立即数都是采用一个8位的常数循环右移偶数位间接得到。
初学者不易理解:一个32位的指令不可能全部用来保存32位的立即数,所以从指令的编码格式上分析,在指令编码中只分配了12位来存储立即数,其中4位用来保存右循环值,8位用来保存一个常数,所以并不是每一个32位的立即数都是合法的。
六、寄存器寻址
ADD R3,R2,R1,LSR #2 //寄存器R1的内容右移了两位,但是注意本指令执行完毕以后R1的内容并不改变。
七、前变址、自动变址和后变址
1、前变址:LDR R0,[R1,#4] //R1寄存器的内容先加4,然后执行操作,
但操作完毕以后,R1的内容不变。
2、自动变址:上面总结指令后缀时提到"!",表示自动变址(参考上面 三 )。
3、后变址:LDR R0,[R1],#4 //先进行操作然后R1+4->R1,操作完毕后,R1 = R1+4。
不需要"!"号。
八、堆栈寻址
一定要注意:堆栈操作总是要指定自动变址的,否则会覆盖以前保存的内容。
********************************************************************************
九、乘法指令
1、乘法指令不支持第二操作数为立即数。
2、结果寄存器不能同时作为第一源寄存器。
32位:MUL Rd,Rm,Rs
MUL Rd,Rm,Rs //Rd和Rm不能为同一寄存器
64位:MUL RdHi,RdLo,Rm,Rs //RdHi、RdLo和Rm不能为同一寄存器,RdHi和RdLo不能为同一寄存器。
十、跳转指令
1、BL和BLX跳转是硬件自动将下一条指令地址保存到LR(R14)中,不需要自己写指令。
2、当指令跳转到32MB地址空间以外时,将产生不可预料的结果。
ARM的指令集比较简单,肯定还有其他需要注意的地方,欢迎网友们积极参与补充。
**************************************************************************************************************************************************
Thumb指令集
Thumb指令可以看做是ARM指令压缩形式的子集,是针对代码密度【1】的问题而提出的,它具有16为的代码密度。Thumb不是一个完整的体系结构,不能指望处理程序只执行Thumb指令而不支持ARM指令集。因此,Thumb指令只需要支持通用功能,必要时,可借助完善的ARM指令集,例如:所有异常自动进入ARM状态。
在编写Thumb指令时,先要使用伪指令CODE16声明,而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。编写ARM指令时,可使用伪指令CODE32声明。
【1】.代码密度:单位存储空间中包含的指令的个数。例如
ARM指令是32位的,而Thumb指令时16位的,如果在1K的存储空间中,可以放32条ARM指令,就可以放64条Thumb指令,因此在存放Thunb指令时,代码密度高。
Thumb指令集与ARM指令集的区别
Thumb指令集没有协处理器指令、信号量指令以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;除了跳转指令B有条件执行功能外,其他指令均为无条件执行;大多数Thumb数据处理指令采用2地址格式。Thumb指令集与ARM指令集的区别一般有如下几点:
Ø 跳转指令
程序相对转移,特别是条件跳转与ARM代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移。
Ø 数据处理指令
数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第三个寄存器中。
数据处理操作比ARM状态的更少,访问寄存器R8—R15受到一定限制。
(除MOV和ADD指令访问寄存器R8—R15外,其他数据处理指令总是更新CPSR中ALU状态标志)
访问寄存器R8—R15的Thumb数据处理指令不能更新CPSR中的ALU状态标志
Ø 单寄存器加载和存储指令
在Thumb状态下,单寄存器加载和存储指令只能访问寄存器R0—R7
Ø 批量寄存器加载和存储指令
LDM和STM指令可以将任何范围为R0——R7的寄存器子集加载或存储
***************************************************************************************************************************************8888
改进了代码密度,具有性能效率和功效
Thumb-2 技术是以 ARM Cortex 体系结构为基础的指令集,它提升了众多嵌入式应用的性能、能效和代码密度。
Thumb-2 技术以获得成功的 Thumb(ARM 微处理器内核的创新型高代码密度指令集)为基础进行构建,以增强 ARM 微处理器内核的功能,从而使开发人员能够开发出低成本且高性能的系统。
该技术与现有 ARM 和 Thumb 解决方案向后兼容,同时显著扩展了 Thumb 指令集的可用功能。这将使得更多应用程序从 Thumb 的同类最佳代码密度中获益。
为获得性能优化的代码,Thumb-2 技术使用少于 31% 的内存以降低系统成本,同时,提供比现有高密度代码高出 38% 的性能,因此可用于延长电池寿命,或丰富产品功能集。Thumb-2 技术在处理器以及基于 ARMv7 体系结构的所有处理器中扮演了重要角色。
jazelle是ARM体系结构的一种相关技术,用于在处理器指令层次对JAVA加速。 ARM 还开发出一项技术,Jazelle DBX (Direct Bytecode eXecution),允许它们在某些架构的硬件上加速执行Java bytecode,就如其他执行模式般,当呼叫一些无法支援bytecodes的特殊软件时,能提供某些bytecodes的加速执行。它能在现存的 ARM与Thumb模式之间互相执行。 首颗具备Jazelle技术的处理器是ARM926EJ-S:Jazelle以一个英文字母'J'标示于CPU名称中。它用来让手机制造商能够加速执行Java ME的游戏和应用程式,也因此促使了这项技术不断地发展。
用于加速执行环境的 ARM Jazelle
®
技术可向
ARM Connected Community
提供高质量的一流
ARM 体系结构解决方案,该解决方案是高性能、低功耗和低成本的完美组合。
Jazelle 技术是 ARM 提供的组合型硬件和软件解决方案。ARM Jazelle 技术软件是功能丰富的多任务 Java 虚拟机 (JVM),经过高度优化,可利用许多 ARM 处理器内核中提供的 Jazelle 技术体系结构扩展。
可从 50 多个 ARM 芯片合作伙伴那里获取 ARM Jazelle 技术硬件扩展。ARM Jazelle 技术软件预先集成在一系列 ARM 软件合作伙伴提供的完整 Java 平台中。
ARM Jazelle 软件包括在任何现有 JVM 和 Java 平台中支持 Jazelle 硬件的技术。它还包括功能丰富的多任务虚拟机 (MVM),领先的手机供应商和 Java 平台软件供应商提供的许多 Java 平台中均集成了此类虚拟机。通过利用基础 Jazelle 技术体系结构扩展,ARM MVM 软件解决方案可提供高性能应用程序和游戏,快速启动和应用程序切换,并且使用的内存和功耗预算非常低。
SIMD: (Single Instruction Multiple Data,单指令多数据流)能够复制多个操作数,并把它们打包在大型寄存器的一组指令集,例:3DNow!、SSE。 以同步方式,在同一时间内执行同一条指令。 SIMD在性能上的优势: 以加法指令为例,单指令单数据(SISD)的CPU对加法指令译码后,执行部件先访问内存,取得第一个操作数;之后再一次访问内存,取得第二个操作数;随后才能进行求和运算。而在SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。这个特点使SIMD特别适合于多媒体应用等数据密集型运算。 如:AMD公司引以为豪的3D NOW! 技术实质就是SIMD,这使K6-2、雷鸟、毒龙处理器在音频解码、视频回放、3D游戏等应用中显示出优异的性能。
与具有单独可编程 DSP 或加速器的体系结构相比,SIMD 扩展可通过提供一个工具链和处理设备来简化应用软件的开发过程。该工具链环境可缩短上市时间,因为软件在产品开发过程中扮演着越来越重要的角色。SIMD 扩展对操作系统 (OS) 完全透明,因此可以使用现有 OS 端口。可对 OS 上运行的新应用程序进行编写,以显式使用 SIMD 扩展,从而提供额外功率/性能优势
TrustZone
ARM TrustZone
®
技术是
系统范围的安全方法,针对高性能计算平台上的大量应用,包括 安全支付、数字版权管理 (DRM) 和基于 Web 的服务。
TrustZone 技术与 Cortex™-A 处理器紧密集成,并通过 AMBA® AXI™ 总线 和特定 TrustZone 系统 IP 块在系统中进行扩展。此系统方法意味着,现在可保护外设(包括处理器旁边的键盘和屏幕),以确保恶意软件无法记录安全域中的个人数据、安全密钥或应用程序,或与其进行交互。
移动设备已发展为能够从 Internet 下载各种大型应用程序的开放软件平台。这些应用程序通常由设备 OEM 进行验证,以确保质量,但并非可对所有功能进行测试,并且攻击者正在不断创建越来越多以此类设备为目标的恶意代码。
同时,移动设备处理重要数据的需求日益增加。从能够支付、下载和观看某一特定时段的最新好莱坞大片,到能够通过手机远程支付帐单和管理银行帐户,这一切都表明,新的商业模式已开始出现。
这些发展趋势已使手机有可能成为恶意应用程序和恶意软件(如木马和病毒)的下一攻击目标。但是,通过应用基于 ARM TrustZone 技术的高级安全技术并整合 SecurCore™ 防篡改元素,可开发出能够提供功能丰富的开放式操作环境和强大安全解决方案的设备。
应用示例
- 实现安全 PIN 输入,在移动支付和银行业务中加强用户身份验证
- 安全 NFC 通信通道
- 数字版权管理
- 软件许可管理
- 基于忠诚度的应用
- 基于云的文档的访问控制
- 电子售票移动电视
白皮书“ARM 安全技术:使用 TrustZone 技术构建安全系统”中提供了 TrustZone 应用和实现的详细概述,“TrustZone 系统设计”一节演示了相关系统示例
NEON
ARM
®
NEON™ 通用 SIMD
引擎可有效处理当前和将来的多媒体格式,从而改善用户体验。
NEON 技术可加速多媒体和信号处理算法(如视频编码/解码、2D/3D 图形、游戏、音频和语音处理、图像处理技术、电话和声音合成),其性能至少为 ARMv5 性能的 3 倍,为 ARMv6 SIMD 性能的 2 倍。
NEON 技术是通过干净方式构建的,并可无缝用于其本身的独立管道和寄存器文件。
NEON 技术是 ARM Cortex™-A 系列处理器的 128 位 SIMD(单指令多数据)体系结构扩展,旨在为消费性多媒体应用提供灵活强大的加速功能,从而明显改善用户体验。 它具有 32 个寄存器,64 位宽(是 16 个寄存器,128 位宽的双倍视图。)
NEON 指令可执行“打包的 SIMD”处理:
- 寄存器被视为同一数据类型的元素的矢量
- 数据类型可为:签名/未签名的 8 位、16 位、32 位、64 位单精度浮点
- 指令在所有通道中执行同一操作
使用 NEON 技术的 ARM Cortex™-A 系列处理器,以及 ARM 的 Mali 多媒体硬件解决方案可用于多媒体应用,范围从智能手机和移动计算设备到 HDTV。
TCM是一个固定大小的RAM,紧密地耦合至处理器内核,提供与cache相当的性能,相比于cache的优点是,程序代码可以精确地控制什么函数或代码放在那儿(RAM里)。当然TCM永远不会被踢出主存储器,因此,他会有一个被用户预设的性能,而不是象cache那样是统计特性的性能提高。
TCM对于以下几种情况的代码是非常有用、也是需要的:可预见的实时处理(中断处理)、时间可预见(加密算法)、避免cache分析(加密算法)、或者只是要求高性能的代码(编解码功能)。随着cache大小的增加以及总线性能的规模,TCM将会变得越来越不重要,但是他提供了一个让你权衡的机会
那么,哪一个更好呢?他取决于你的应用。Cache是一个通用目的的加速器,他会加速你的所有代码,而不依赖于存储方式。TCM只会加速你有意放入TCM的代码,其余的其他代码只能通过cache加速。Cache是一个通用目的解决方案,TCM在某些特殊情况下是非常有用的。假如你不认为需要TCM的话,那么你可能就不需要了,转而加大你的cache,从而加速运行于内核上的所有软件代码
紧致内存是指片上快速存储区,与片上缓存具有同等的性能,但因为程序可完全控制紧致内存,因而比统计复用的缓存有更好的可预测性。这是ARM5TE引入的特性,目的是通过这一快速的存储区,一方面提高某些关键代码(如中断处理函数)的性能,另方面使存储访问延迟保持一致,这是实时性应用所要求的。ARM6对TCM操作做了进一步的规范。
TCM的应用领域:可预测的实时处理(中断处理)、避免缓存分析(加密算法)、或单纯的性能提高(处理器侧编解码)等。