1
ARM体系结构是什么?
ARM体系结构,又称ARM架构,是一种硬件规范。主要用来约定指令集、芯片内部体系结构(如内存管理、高速缓存管理)等。
ARM指令集在结构体系中没有约定每一条指令在硬件描述语言(VHDL或Verilog HDL)中如何实现,而只约定了每条指令的格式、行为规范、参数等。
ARM指令集一直在变化和发展中。Armv8体系结构最大的改变是增加了一个新的64位指令集,这是对原来指令集的有益补充和增强。A64指令集可以处理64位宽的寄存器和数据,并使用64位的指针来访问内存。
Armv8架构在AArch64运行状态下使用A64指令集,在AArch32运行状态下使用A32指令集。A64指令集和A32 指令集是不兼容的,它们是两套完全不一样的指令集,它们的指令编码是不一样的。
2
Armv8-A体系结构的基本概念
2.1 执行状态(Execution State):处理器运行时的环境,包括寄存器的位宽、支持的指令集、异常模型、内存管理以及编程模型等。
Armv8体系结构定义了AArch64和AArch32两个执行状态。
2.2 系统寄存器命令
AArch64 执行状态支持31个64位的通用寄存器,分别是X0-X30;如果使用Xn(如X0,X1,X2…)表示64位寄存器,如果使用Wn(如W0,W1,W2…)表示Xn寄存器的低32位数据。

AArch32 执行状态支持16个32位的通用寄存器。
2.3 特殊寄存器
ZR零寄存器内容全是0,可以用做源寄存器,也可以用作目标寄存器。
PC指针寄存器通常用来指向当前运行指令的下一条指令的地址,用于控制程序中指令的运行顺序,但编程人员不能通过指令来直接访问。
SP堆栈指针寄存器,Armv8体系结构支持4个异常等级,每个等级都有一个专门的SP寄存器SP_ELn.
SPSR备份程序状态寄存器,当我们运行一个异常处理程序时,处理器会把PSTATE寄存器的值暂时保存在备份程序状态寄存器(SPSR)里,当异常处理完成并返回时,再把SPSR的值恢复到PSTATE寄存器。
ELR异常链接寄存器,用于存放异常返回地址。
2.4 AArch64异常等级
ARMv8-A架构定义了一组异常级别(Exception Level,EL),从EL0到EL3,其中: 如果ELn为异常级别,n的值越大表示软件执行权限越高。
3
Cortex-A72处理器举例

3.1 指令预取单元
指令预取单元从L1指令高速缓存中提取指令,并在每个周期将多达3个指令传送到指令解码单元。它支持动态和静态分支预测。
3.2 指令译码单元
指令解码单元支持A32/T32/A64和高级SIMD及浮点指令集。指令解码单元还执行寄存器重名,通过消除写后写(WAW)和读后写(WAR)的冲突来实现乱序执行。
3.3 指令分配单元
指令分配单元控制译码后的指令何时被分配到执行流水线以及返回的结果何时终止。
组成:
-
ARM核心通用寄存器
-
SIMD和浮点寄存器集
-
AArch32 CP15 和AArch64系统寄存器
3.4 加载/存储单元
加载/存储单元(LSU)执行加载和存储指令,包含L1数据存储系统,并为L2内存子系统的内存一致性请求提供服务。
组成:
-
32K两路组关联的L1高速缓存,缓存行为64字节。
-
支持32个全关联的数据后备缓存区(TLB)
-
自动硬件预取器,生成针对L1数据缓存和L1缓存的预取。
3.5 L1内存系统
L1内存系统保留指令内存系统和数据内存系统。
3.6 MMU
内存管理单元MMU用来实现虚拟地址到物理地址的转换。在AArch64状态下支持长描述符的页表格式,支持不同大小的页面。例如4KB/16KB/64KB。
3.7 L2 内存系统
L2内存系统不仅负责处理每个处理器内核的L1指令和数据缓存仲裁,还通过一致性扩展(ACE) 或 一致性集线接口(CHI)连接到内存系统。
重点回顾
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!