2.ARM Architecture and Processors
ARM 并不制造硅设备。相反,ARM 创建微处理器设计,这些设计授权给半导体公司和原始设备制造商(OEM),由他们将其集成到系统级芯片(SoC)设备中。
为了确保不同实现之间的兼容性,ARM 定义了架构规范,规定了符合标准的产品应如何表现。实现 ARM 架构的处理器必须符合特定版本的架构。
ARM 架构支持在非常广泛的性能点上进行实现。其简洁性使得实现非常小,并且这使得其能够实现非常低的功耗。
本书涵盖的 Cortex-A 系列处理器符合 ARMv7-A 架构。也可能存在多个具有不同内部实现和微架构的处理器,这些处理器的循环时间和时钟频率不同,但符合相同版本的架构,它们执行为该架构定义的 ARM 指令集,并通过 ARM 验证系统测试。
2.1 Architectural profiles
ARM 会定期发布架构的新版本。这些新版本增加了新功能或对现有行为进行了更改。这样的更改几乎总是向后兼容的,这意味着在旧版本架构上运行的用户代码将继续在新版本上正常运行。当然,为利用新功能而编写的代码将无法在缺少这些功能的旧处理器上运行。
在架构的所有版本中,一些系统特性和行为是由实现定义的。例如,架构未定义缓存大小或单个指令的周期时间。这些由各个核心和SoC(片上系统)来决定。
每个架构版本还可以定义可选扩展。这些扩展可能会在处理器的特定实现中进行。例如,在 ARMv7 架构中,先进的 SIMD(NEON)技术作为一种可选扩展提供。
ARMv7 架构还引入了“配置文件”的概念。这些配置文件是架构的变体,用于描述面向不同市场和用途的处理器。
这些配置文件包括:
A (应用配置文件):应用配置文件定义了面向高性能处理器的架构,支持使用内存管理单元(MMU)的虚拟内存系统,因此能够运行功能齐全的操作系统。它支持 ARM 和 Thumb 指令集。
ARMv7-A 是应用配置文件,由所有 Cortex-A 系列处理器以及基于 ARM 架构的公司开发的处理器实现。截至 2014 年初,已有不到 30 亿个 Cortex-A 系列芯片出货。R (实时配置文件):实时配置文件定义了面向需要确定性定时和低中断延迟的系统的架构。它不支持虚拟内存系统,但可以使用简单的内存保护单元(MPU)保护内存区域。
M (微控制器配置文件):微控制器配置文件定义了面向低成本系统的架构,其中低延迟中断处理非常重要。它使用与其他配置文件不同的异常处理模型,并仅支持 Thumb 指令集的一个变体。
2.2 Architecture history and extensions
ARM 架构从20世纪80年代中期第一个硅芯片问世到1990年代早期的首批 ARM6 和 ARM7 设备之间,变化相对较小。在架构的第一个版本中,除了寄存器集外,大多数加载、存储和算术操作都是由 ARM1 实现的。版本 2 添加了乘法累加指令以及对协处理器的支持,以及其他创新。最早的处理器仅支持 26 位的地址空间。版本 3 将程序计数器和程序状态寄存器分离,并引入了新的模式,从而支持 32 位的地址空间。版本 4 添加了对半字加载和存储操作的支持,以及额外的内核级特权模式。
ARMv4T 架构引入了 Thumb(16 位)指令集,由 ARM7TDMI® 和 ARM9TDMI® 处理器实现,这些产品的出货量已达数十亿。
ARMv5TE 架构改进了对数字信号处理(DSP)类型操作和饱和算术的支持,并改善了 ARM/Thumb 的互操作性。
ARMv6 进行了多项增强,包括对未对齐的内存访问的支持、对内存架构和多核支持的重大更改,以及对在 32 位寄存器内对字节或半字操作的 SIMD 操作的一些支持。它还提供了许多可选扩展,尤其是 Thumb-2 和安全扩展(TrustZone)。Thumb-2 将 Thumb 扩展为一种混合长度(16 位和 32 位)的指令集。
ARMv7-A 架构将 Thumb-2 扩展设为强制性,并添加了高级 SIMD 扩展(NEON)。
多年来,ARM 为处理器采用了连续的编号系统,例如 ARM9(继 ARM7 之后)和 ARM8。各种数字和字母附加到基本系列中以表示不同的变体。例如,ARM7TDMI 处理器有 T 代表 Thumb,D 代表调试,M 代表快速乘法器,I 代表 EmbeddedICE。
对于 ARMv7 架构,ARM Limited 为其处理器采用了品牌名称 Cortex,并用补充字母表示该处理器支持的三个配置文件(A、R 或 M)之一。下图展示了架构的不同版本如何对应于不同的处理器实现。该图并非全面的,不包含所有的架构版本或处理器实现。
在下图中,我们展示了架构随时间的发展,说明了每个新版本对架构的新增内容。几乎所有的架构更改都是向后兼容的,这意味着为ARMv4T架构编写的软件仍然可以在ARMv7处理器上使用。
2.2.1 DSP multiply-accumulate and saturated arithmetic instructions
这些指令在 ARMv5TE 架构中添加,提升了数字信号处理和多媒体软件的能力,并由字母 E 表示。新指令提供了多种带符号的乘加、饱和加减、计数前导零的变体,并在架构的所有后续版本中都有出现。在许多情况下,这使得能够将简单的独立 DSP 从系统中移除。
2.2.2 Jazelle
Jazelle-DBX(直接字节码执行)在 ARMv5TEJ 中引入,以加速 Java 的性能并节省能耗。增加的内存可用性和即时编译器(JIT)的改进后来降低了其在应用处理器中的价值。因此,许多 ARMv7-A 处理器没有实现这种硬件加速。
Jazelle-DBX 最适合在内存非常有限的系统中为 Java 提供高性能(例如,功能简单的手机或低成本嵌入式应用)。在当前系统中,主要用于向后兼容性。
2.2.3 Thumb Execution Environment (ThumbEE)
ThumbEE 是在 ARMv7-A 中引入的,有时也被称为 Jazelle-RCT(运行时编译目标)。它对 Thumb 指令集进行了一些小的更改,使其在运行时在受控环境中生成代码时成为更好的目标,例如在 Java、Dalvik、C#、Python 或 Perl 这样的托管语言中。
ThumbEE 旨在由即时编译器(JIT)或提前编译器(AOT)使用,在这种情况下,它可以减少重新编译代码的代码大小。ARM 已不再推荐使用 ThumbEE。
2.2.4 Thumb
ARMv7 架构包含两种主要的指令集:ARM 指令集和 Thumb 指令集。两者的功能基本相同。Thumb 指令集是最常用的 32 位 ARM 指令的子集。Thumb 指令每条都是 16 位长,并且有一个对应的 32 位 ARM 指令,具有相同的效果。使用 Thumb 代码的主要原因是减少代码密度。由于其改进的密度,Thumb 代码比等效的 ARM 代码更有可能缓存,并且可以减少所需内存量。您仍然可以使用 ARM 指令集,但对于需要最高性能的特定代码部分,可以使用 Thumb。
2.2.5 Thumb-2
尽管有相反的传闻,但实际上并没有 Thumb-2 指令集。Thumb-2 技术在 ARMv6T2 中引入,并且在 ARMv7 中是必需的。该技术扩展了原始的 16 位 Thumb 指令集,使其包含 32 位指令。包含在 ARMv6T2 的 32 位 Thumb 指令使 Thumb 代码能够达到类似于 ARM 代码的性能,并且其代码密度比纯 16 位 Thumb 代码更好。
2.2.6 Security Extensions (TrustZone)
可选的安全扩展,称为 TrustZone,是在 ARMv6K 中引入的,已在所有 ARM Cortex-A 处理器中实现。TrustZone 提供了一个独立的安全世界,用于将敏感代码和数据与包含操作系统和应用程序的普通世界隔离开来。因此,安全世界中的软件旨在为普通(非安全)世界的应用程序提供安全服务。
2.2.7 VFP
在 ARMv7 之前,VFP 扩展被称为矢量浮点架构,支持矢量操作。VFP 是一种扩展,实现了符合 ANSI/IEEE 标准的单精度和可选的双精度浮点运算。
2.2.8 Advanced SIMD (NEON)
ARM NEON 技术提供了高级 SIMD 指令集的实现,并具有独立的寄存器文件(与 VFP 共享)。一些实现提供了独立的 NEON 流水线后端。它支持 8、16、32 和 64 位整数,以及单精度(32 位)浮点数据,可以在 64 位和 128 位寄存器中作为矢量进行操作。
2.2.9 Coprocessors
T
ARM 架构支持使用协处理器扩展指令集,以扩展 ARM 处理器的功能。数字范围从 0 到 15,有16个协处理器。在早期的 ARM 核心中,提供了专用硬件接口以允许外部协处理器的连接。在 Cortex-A 系列处理器中,仅支持内部协处理器。这些包括用于缓存和 MMU 的 CP15(系统控制),用于调试的 CP14,以及用于 NEON 和 VFP 操作的 CP10 和 11。
2.2.10 Large Physical Address Extension (LPAE)
LPAE 是 v7-A 架构中的可选功能,目前支持 Cortex-A7、Cortex-A12 和 Cortex-A15 处理器。它使得原本只能处理最大 4GB 地址空间的 32 位处理器能够通过将 32 位虚拟内存地址转换为 40 位物理内存地址,访问最多 1TB 的地址空间。更多信息请参见相关内容。
2.2.11 Virtualization
ARM 虚拟化扩展是 ARMv7-A 架构配置文件的可选扩展。扩展支持使用称为“虚拟机管理程序”(hypervisor)的虚拟机监控器,将一个操作系统与另一个操作系统隔离开来。当在单核或多核系统中实现时,虚拟化扩展支持在单个集群上运行多个虚拟机。
2.2.12 big.LITTLE
big.LITTLE 处理是在 ARMv7 中引入的,旨在平衡高性能和功耗效率的要求。big.LITTLE 使用高性能集群,例如 Cortex-A15 处理器,结合能效集群,例如 Cortex-A7 处理器。
Cortex-A7 处理器。“big”集群可以用于处理繁重的工作负载,而“LITTLE”集群则可以处理大部分移动设备的工作负载。
2.3 Processor properties
在本节中,我们将研究一些 ARM 处理器,并确定哪些处理器实现了哪些架构版本。
2.4 Cortex-A series processors
在本节中,我们将更详细地了解每个实现了 ARMv7-A 架构的处理器。在每个案例中只提供了一个概括性的描述,关于每个处理器的更多详细信息,请参阅相关内容。
2.4.1 The Cortex-A5 processor
Cortex-A5 处理器是最小的 ARM 多核应用处理器。基于该处理器的设备通常成本较低,能够将互联网服务提供给从低成本入门级智能手机和智能移动设备,到嵌入式、消费类和工业设备的广泛设备。
Cortex-A5 处理器具有以下特性:
与其他 Cortex-A 系列处理器具有完整的应用兼容性。
支持多处理,具备可扩展、节能高效的性能。
可选的浮点运算或 NEON 单元,用于媒体和信号处理。
包含缓存和内存管理单元的高性能内存系统。
从旧的 ARM 处理器迁移的高价值路径。
2.4.2 The Cortex-A7 processor
ARM Cortex-A7 处理器是 ARM 开发的最节能的应用处理器,并在入门级智能手机、平板电脑和其他高级移动设备中进一步巩固了 ARM 在低功耗方面的领先地位。
Cortex-A7 处理器具有以下特性:
与 Cortex-A15 处理器的架构和特性集相同,支持 big.LITTLE 配置。
使用 28nm 工艺技术,面积小于 0.5mm²。
与所有 Cortex-A 系列处理器具有完整的应用兼容性。
紧密耦合的低延迟二级缓存(最大可达 4MB)。
支持浮点运算单元。
支持用于多媒体和 SIMD 处理的 NEON 技术。
2.4.3 The Cortex-A8 processor
ARM Cortex-A8 处理器的速度可以从 600MHz 扩展到超过 1GHz。Cortex-A8 处理器能够满足功耗优化的移动设备在低于 300mW 的条件下运行的要求,以及性能优化的消费类应用(需要 2000 Dhrystone MIPS)的需求。它被应用于多种不同的设备中,包括三星的 S5PC100、德州仪器的 OMAP3530 等。
Freescale 的 i.MX515。无论是高端功能手机、上网本、数字电视、打印机,还是车载信息娱乐系统,Cortex-A8 处理器都提供了一种经过验证的高性能解决方案,每年出货量达数百万。
Cortex-A8 处理器具有以下特性:
频率范围从 600MHz 到超过 1GHz。
高性能超标量架构。
支持用于多媒体和 SIMD 处理的 NEON 技术。
与旧的 ARM 处理器兼容。
2.4.4 The Cortex-A9 processor
ARM Cortex-A9 处理器是一款高效节能且受欢迎的高性能选择,适用于低功耗或受热限制且对成本敏感的设备。
目前,Cortex-A9 处理器已大量应用于智能手机、数字电视、消费类和企业级应用。与 Cortex-A8 处理器相比,Cortex-A9 处理器的性能提高了 50% 以上。Cortex-A9 处理器最多可以配置四个核心,以在需要时提供峰值性能。其可配置性和灵活性使得 Cortex-A9 处理器适用于各种市场和应用领域。
包含 Cortex-A9 处理器的设备包括 NVIDIA 的双核 Tegra-2、ST 的 SPEAr1300 以及 TI 的 OMAP4 平台。
Cortex-A9 处理器具有以下特性:
支持乱序推测执行流水线。
16、32 或 64KB 的四路关联 L1 缓存。
支持浮点运算单元。
支持用于多媒体和 SIMD 处理的 NEON 技术。
提供速度或功耗优化的硬宏实现方案。
2.4.5 The Cortex-A12 processor
Cortex-A12 处理器是一款高性能的中端移动处理解决方案,专为移动应用设计,例如用于智能手机和平板设备。Cortex-A12 处理器是成功的 Cortex-A9 处理器的继任者,针对主流移动功耗环境进行了优化,以实现最佳的性能和效率。
Cortex-A12 处理器的高性能和高端特性集适用于多种用例。中端设备可以借鉴高端设备的成功经验,并继续推动移动市场中增长最快的细分领域。
在架构方面,Cortex-A12 处理器基于最新的 ARMv7-A 架构,并具有与 Cortex-A15 处理器类似的扩展特性。
Cortex-A12 处理器具有以下特性:
40 位大物理地址扩展(LPAE),可寻址高达 1TB 的 RAM。
与所有 Cortex-A 系列处理器具有完整的应用兼容性。
支持用于多媒体和 SIMD 处理的 NEON 技术。
支持虚拟化和 TrustZone 安全技术。
2.4.6 The Cortex-A15 processor
ARM Cortex-A15 处理器旨在提供前所未有的灵活性和处理能力。该处理器采用了先进的功耗降低技术,适用于从移动计算、高端数字家庭、服务器到无线基础设施等各种市场的产品。
Cortex-A15 MPCore 处理器与所有其他 Cortex-A 系列处理器具有完整的应用兼容性。
Cortex-A15 处理器具有以下特性:
高度可扩展,性能最高可达 2.5GHz。
与所有 Cortex-A 系列处理器具有完整的应用兼容性。
支持乱序超标量处理。
紧密耦合的低延迟二级缓存(最大可达 4MB)。
支持浮点运算单元。
支持用于多媒体和 SIMD 处理的 NEON 技术。
可作为四核硬宏实现。
2.5 Key architectural points of ARM Cortex-A series processors
Cortex-A 系列设备共有的若干关键点包括:
32 位 RISC 核心,具有 16 × 32 位可见寄存器和基于模式的寄存器分组。
修改的哈佛架构(对指令和数据进行独立、并发访问)。
加载/存储架构。
标准化的 Thumb-2 技术。
支持 VFP 和 NEON。
与以前的 ARM 处理器代码向后兼容。
4GB 的虚拟地址空间和至少 4GB 的物理地址空间。
硬件转换表,用于虚拟到物理地址转换。
虚拟页大小为 4KB、64KB、1MB 和 16MB。可在每页基础上设置缓存属性和访问权限。
支持大端和小端数据访问。
支持非对齐访问的基本加载/存储指令。
支持对 MPCore™ 变体的对称多处理(SMP),即 Cortex-A 系列处理器的多核版本,在 L1 缓存级别提供完整数据一致性。自动缓存和转换旁路缓冲区(TLB)维护传播可实现高效的 SMP 操作。
物理索引、物理标记(PIPT)数据缓存。