ARMv7 和 ARMv8 是 ARM 架构的两个不同版本。ARMv7 主要是 32 位架构,而 ARMv8 引入了 64 位支持。它们在设计目标、处理能力、安全性、指令集等方面存在明显的区别。以下是 ARMv7 和 ARMv8 的主要区别:
1. 架构位数
- ARMv7:ARMv7 是 32 位架构,这意味着它的寄存器、地址总线、数据总线等都是 32 位。处理器的寄存器宽度为 32 位,寻址空间也限于 4GB((2^{32}))。
- ARMv8:ARMv8 是一个 64 位架构,并且向下兼容 ARMv7。这意味着 ARMv8 可以运行 ARMv7 的 32 位代码,同时它具有 64 位寄存器,处理器可以直接访问更大的寻址空间,理论上能够支持最大 16EB((2^{64}))的虚拟地址空间。
2. 指令集
- ARMv7:
- 主要支持 ARM(A32) 和 Thumb 两种指令集。
- Thumb 指令集是 ARM 指令集的压缩版本,用较少的位表示常用的指令,适用于低功耗环境。
- ARMv7 只支持 32 位指令。
- ARMv8:
- 引入了新的 64 位指令集,称为 A64,并继续支持 ARM(A32)和 Thumb(T32)指令集,这样可以提供向下兼容性。
- ARMv8 在性能和效率方面改进了指令集,并且 A64 指令集进行了重新设计,优化了指令的表达,使得执行性能更高。
3. 寄存器集
- ARMv7:
- 拥有 16 个通用寄存器,每个寄存器宽度为 32 位,其中包含 R0 - R15(R15 通常是程序计数器)。
- 另外还有一些专用寄存器,比如状态寄存器(CPSR)。
- ARMv8:
- 扩展为 31 个通用寄存器,每个寄存器宽度为 64 位。寄存器名称为 X0 到 X30。
- 增加了寄存器宽度,寄存器 X0-X30 可以同时支持 32 位和 64 位操作。ARMv8 的指令能够同时访问 32 位的 W0-W30 和 64 位的 X0-X30。
4. 内存寻址能力
- ARMv7:由于其是 32 位架构,ARMv7 只能使用 32 位地址进行内存寻址,这使得它的最大寻址空间为 4GB。这种限制对于需要访问更大内存的高性能系统是个瓶颈。
- ARMv8:ARMv8 支持 64 位内存地址,可以使用更大的寻址空间,最大可支持 16EB(Exabytes)。这种扩展使得 ARMv8 更适合需要大量内存的大型计算任务和服务器环境。
5. 性能和效率
- ARMv8 在多个方面对架构进行了改进,使得整体性能、功耗比都有了显著提升。
- ARMv8 的指令集(A64)针对 64 位进行了优化,有更多的通用寄存器和更高的计算能力,使得执行效率比 ARMv7 高得多,特别是处理复杂计算任务时。
6. 安全扩展 (TrustZone)
- ARMv7:引入了 TrustZone 安全技术,用于安全和非安全模式的隔离。这有助于在单个处理器上同时运行普通操作系统和受保护的安全操作系统。
- ARMv8:在 ARMv7 的基础上进一步增强了安全功能,继续支持 TrustZone,但同时改进了指令集的处理能力以支持现代安全需求,如更强的密码学功能。
7. 浮点和 SIMD 扩展
- ARMv7:
- 支持 VFP (Vector Floating Point) 和 NEON(单指令多数据)来加速浮点和向量运算。NEON 是可选的 SIMD 扩展,用于多媒体处理和加速计算。
- VFPv3 是 ARMv7 中常见的浮点扩展。
- ARMv8:
- 对 NEON 的支持成为了标准,并且增强了其功能和性能。
- ARMv8 引入了 浮点运算扩展 (FP),其性能优于 ARMv7 中的 VFP,且使得 64 位的浮点计算更加高效。
8. 操作模式
- ARMv7:ARMv7 支持几种模式,包括用户模式、FIQ 模式、IRQ 模式、管理模式、系统模式、未定义模式和中止模式。不同的模式用于处理不同类型的系统事件和中断。
- ARMv8:简化了操作模式结构,支持 EL0, EL1, EL2, EL3 四个特权级,分别代表用户空间、内核空间、虚拟化扩展(Hypervisor)和 Secure Monitor(类似 TrustZone)。这些执行级别(Exception Level,EL)使得系统更容易实现虚拟化和安全特性。
9. 兼容性
- 向下兼容:
- ARMv8 是向下兼容 ARMv7 的,这意味着 ARMv8 可以在 64 位模式下运行新的 A64 指令,也可以在 32 位模式下运行 ARMv7 的 A32 和 T32 指令。
- 指令的简化和优化:
- ARMv8 在保持向下兼容的同时,对指令进行了优化,增强了 ARMv7 的一些性能瓶颈。开发者可以在 64 位模式下获得更好的指令集架构和性能优化。
10. 应用场景
- ARMv7:
- ARMv7 通常应用在低功耗的嵌入式设备中,如移动设备、路由器和智能家居等领域。
- 它适用于那些内存较小、计算需求较低、功耗敏感的应用。
- ARMv8:
- ARMv8 被广泛应用于更高性能的设备,例如智能手机、平板电脑、高端嵌入式系统、服务器、物联网设备以及超算系统等。
- 由于支持 64 位运算,ARMv8 能够满足服务器和需要大内存寻址的高端应用的需求。
总结
- 架构:ARMv7 是 32 位架构,ARMv8 是 64 位架构,且 ARMv8 向下兼容 32 位代码。
- 指令集:ARMv8 引入了新的 A64 指令集,增加了 64 位支持,同时支持 ARMv7 的 A32 和 T32。
- 寄存器和内存寻址:ARMv8 增加了更多的通用寄存器,并具有 64 位内存寻址能力,大大增加了可用内存空间。
- 浮点和 SIMD:ARMv8 改进了浮点和 NEON 的实现,性能上优于 ARMv7。
- 应用场景:ARMv7 主要用于低功耗的嵌入式设备,而 ARMv8 由于其强大的计算和 64 位支持,被应用于更广泛的设备,包括服务器和高端消费电子产品。
ARMv8 在计算能力、安全性、寻址能力和扩展性方面都比 ARMv7 有了显著的提升,因此在现代的计算设备中,ARMv8 已经逐渐成为主流架构,特别是在需要高计算性能和更大内存的设备中。