概述
Arm架构新增的功能以扩展的形式提供,这样Arm能够定期发布新功能,以响应合作伙伴的需求,而无需对主架构进行重大更改。
Arm 每年都会发布新的扩展。Cortex CPU 是该架构的 Arm 实现,其会根据发布时间使用相应的扩展。
本指南解释了 Arm 架构的扩展,并提供了阅读和使用指导。
在本指南的最后,您可以检查您的知识。您将学到以下内容:
- 用于标识扩展的命名方案。
- 不同扩展中可以使用哪些功能。
- 如何确定Arm Cortex CPU 实现支持哪些扩展功能。
Armv8.x-A和Armv9.x-A是什么意思?
Arm 架构有不同的版本。这些不同的版本通常展示为 ArmvX,其中 X 是版本号。例如,Armv8‑A 表示 Arm A‑profile 架
构的第8个版本,Armv9‑A 表示 A‑profile 架构的第9个版本。像 Armv8‑A 这样的版本是该架构的主要版本。
但是,也有一些次版本添加到主版本中。这些次版本称为 .x 扩展。例如,Armv8.1‑A 表示 A‑profile 架构的第8个版本,通过 .1 进行扩展。
为什么需要.x扩展?
主版本的Arm架构开发可能需要很多年。例如,Armv7‑A 于 2007 年发布,Armv8‑A 于六年后的 2013 年发布。由于需要在两个主版本之间添加新功能,因此架构添加了次版本(.x 扩展)。
自 Armv8‑A 发布以来,在主版本之间添加架构的过程已经正式化。现在每年都会发布 .x 扩展,从基本 Armv8.0‑A 开始,2015 年添加了 Armv8.1‑A 扩展,然后于 2016 年添加了 Armv8.2‑A 扩展。每个 .x 扩展都建立在上一个扩展的基础上。例如,Armv8.2‑A包含Armv8.1‑A的所有功能,并添加了新功能,Armv9‑A 同理。
扩展命名
扩展功能的命名格式为 FEAT_<name>
,例如:
- FEAT_SHA256:Armv8.2-A添加支持SHA256操作的扩展(其实Armv8.0-A就添加了,只是Armv8.2-A将SHA算法拆成了SHA-256,SHA-512以及SHA-3)
- FEAT_BRBE:Armv9.2-A添加支持分支记录缓冲区的扩展
您可以在 Arm 开发者网站上找到完整的功能列表。
Arm 架构文档经常使用这些标识符。例如,以下是 AMCFGR 寄存器的说明:
该寄存器仅在实现 FEAT_AMUv1 时才存在。否则,对 AMCFGR 的直接访问是未定义的。
Arm 架构参考手册提供了在 Armv8.x-A 和 Armv9.x-A 架构中哪些功能是可选或强制的信息。
处理器实现
每个 .x 扩展都包含一系列功能,其中一些是必需的,一些是可选的。如果处理器实现了该扩展号的所有强制功能以及所有旧版本扩展的强制功能,则该处理器实现了 .x 扩展。
例如,Armv8.2-A的处理器必须实现以下架构版本和扩展中的所有强制功能:
- Armv8.0‑A:基本规范和首个版本
- Armv8.1-A:之前的扩展
- Armv8.2‑A :新的扩展
同样,Armv9.1-A的处理器必须实现如下功能:
- Armv9.0‑A:基本规范和首个版本
- Armv9.1-A:新的扩展
Armv8.x-A 处理器可以实现下一个版本的任何扩展。但是,它无法再实现更高版本中的扩展。
例如,Armv8.1-A的处理器功能:
- 必须实现Armv8.0-A和Armv8.1-A中的所有强制功能
- 允许实现Armv8.2-A中的某些功能
- 不允许实现Armv8.3-A及之后版本的功能
Armv8.x 和 Armv9.x 扩展以及特性
这一部分总结了每个 Armv8.xA 和 Armv9.xA 扩展中添加的新功能。我们不提供完整的功能列表,但我们包含了最重要的功能。请注意,某些功能仅限于 AArch64 状态,而其他功能则在 AArch32 和 AArch64 状态下均可用。
Armv8.1-A
- 原子内存访问指令(AArch64)
- 受限的保序区域(AArch64)
- 增加虚拟机标识符大小和虚拟主机扩展(AArch64)
- 不允许特权访问(AArch32和AArch64)
Armv8.2-A
- 支持52位地址宽度(AArch64)
- PE可以共享TLB页表项(AArch32和AArch64)
- FP16数据处理指令(AArch32和AArch64)
- 统计分析(AArch64)
- 可靠性、可用性和可维护性(RAS)强制支持(AArch32和AArch64)
Armv8.3-A
- 指针身份认证(AArch64)
- 虚拟化嵌套(AArch64)
- SIMD支持复数(AArch32和AArch64)
- 增强支持JavaSript数据类型(AArch32和AArch64)
- 对内存一致性模型的更改(AArch64)
- ID 机制支持更大的系统可见缓存(AArch32和AArch64)
Armv8.4-A
- 安全虚拟化(AArch64)
- 虚拟化嵌套增强 (AArch64)
- 支持小型转换表(AArch64)
- 放宽对⻬限制(AArch32和AArch64)
- 内存分区和监控MPAM (AArch32和AArch64)
- 额外的加密算法支持(AArch32和AArch64)
- 通用计数器伸缩(AArch32和AArch64)
- SHA算法指令加速
Armv8.5-A和Armv9.0-A
- 内存标记(AArch64)
- 分支目标标识(AArch64)
- 随机数生成指令(AArch64)
- 缓存清零到Point of Deep Persistence(AArch64)
Armv8.6-A和Armv9.1-A
- 通用矩阵乘法 (GEMM) 指令(AArch64)
- 虚拟化的细粒度陷入(AArch64)
- 高精度通用计时器
- 数据聚合提示(AArch64)
Armv8.7-A和Armv9.2-A
- 增强支持PCIe热插拔(AArch64)
- 存储和加载指令原子操作64字节(AArch64)
- WFI和WFE指令增加超时(AArch64)
- 分支记录预测(仅限Armv9.2-A)
Armv8.8-A和Armv9.3-A
- 不可屏蔽中断(AArch64)
- 优化memcpy和memset操作指令(AArch64)
- PAC增强提示条件分支(AArch64)
我的处理器实现了哪些扩展
Arm架构有一些特性寄存器,用于报告处理器支持的功能。对于 .x 扩展中增加的功能,这些寄存器中的字段都会指明处理器是否支持。
例如,ID_AA64MMFR2_EL1.AT
告诉你是否支持Armv8.4-A中对宽松对齐的要求。没有字段指明处理器是否是Armv8.1-A,但软件可以读取所有8.1-A中强制功能字段,如果它们全部存在,则处理器符合Armv8.1-A。
Armv8.xA 和 SBSA
服务器基础系统架构 (SBSA) 规定了服务器的硬件要求。 SBSA 确保操作系统、虚拟机管理程序和固件正确运行。对于服务器来说,一定程度的标准化很重要,SBSA 定义了架构必须实施的扩展。
下表总结了与Armv8.x扩展相关的SBSA需求。
检查你的知识
-
Armv8.3 的主版本和.x 扩展是什么?
主版本8,扩展3
-
Armv8.4‑A 中添加了安全虚拟化。 Armv8.1‑A 处理器是否可以实现它?
不能。Armv8.1 处理器必须实现 Armv8.1 的强制功能,并且可以实现 Armv8.2‑A 的功能。但不允许实现 Armv8.3、
Armv8.4 或更高版本的功能,除非做出特殊让步。 -
只有可选功能才有字段来报告其存在?
不是。强制和可选功能均有字段指明。
-
Cortex‑A55 实现了 Arm 架构的哪个主版本和扩展?
Armv8.2-A。
-
SBSA 的哪些等级需要支持 16 位 VMID?
Level3及以上。
相关信息
要了解有关本指南中相关的更多信息,请参阅:
-
安全指南
-
Arm社区(提出开发问题,并查找Arm专家发表的文章和博客)
-
Armv8-x.A 和 SBSA
下一步
每年 Arm 都会发布对其主要架构的扩展,提供新功能来支持合作伙伴的需求。在本指南中,我们解释了 Armv8.x 架构的扩展,描述了如何使用这些扩展,并概述了一些扩展支持的功能。
阅读本指南后,您应该了解扩展的表达方式、哪些功能在哪些扩展中可用,以及如何确定 Arm Cortex CPU 支持哪些功能。
要继续了解 Armv8‑A 和 Armv9‑A 架构,请参阅series of guides。