ARM v8架构
这篇文章主要描述ARM体系结构相关内容,记录工作中用到的头天arm体系结构相关的知识,主要是关于V8-A版本的知识,会不定期的进行更新。
概述
ARM体系结构从最初的V1版本到现在已经有很大的变化,总共有8个版本:v1~v8,不过目前正在使用的只有v4 ~ v8,最被的3个版本已经被废弃。
从ARMv7开始,ARM将其体系结构分成3大不同应用,称之为ARM-A、ARM-R、ARM-M
- A:高性能应用处理器(本文主要描述这种)
- R:实时操作应用
- M:微处理器应用
目前最新的版本是v8,在v7的基础上做了很大的改动:
- 支持64位工作模式,64位工作模式时称之为AArch64,32位工作模式时称之为AArch32(兼容以前的版本)
- 取消了CPU的工作模式,采用”异常级别”,有E0~E3 4种级别
异常级别
ARM v8的AArch64时取消了ARM v7的工作模式(User/FIQ/IRQ/…),相应的也取消了CPSR寄存器,改用EL0 - EL3 总共4种异常级别,其中:
EL3级别权限最高,EL0级别权限最低
EL0级别为非特权级别,EL1-EL3称为特权级别,通常应用程序在EL0级
通常EL0级用于application,EL1用于kernel,EL2用于Hypervisor或虚拟化,EL3用于安全应用
EL3级别通过SCR_EL3控制EL2-EL0,EL2级别通过HCR_EL2控制EL1-EL0,
CPU必须实现EL0,EL1功能,EL2,EL3可以选择性实现,通过ID_AA64PFR0_EL1寄存器可看否实现了EL2及EL3
状态说明
- AArch64状态
- 31个通用的64位寄存器:x0~x30,基中x30通常用于LP寄存器
- 1个64位PC寄存器
- 各种系统寄存器,比如SP、SPSR寄存器,每个系统寄存器有多个(异常类型不同),使用_ELx作为后缀
- 32个128位的SIMD向量
- 使用armv8的异常模式,有4种异常模式:E0~E3
- 支持64位虚拟地址总线宽度
- 有1个PE(处理器)状态寄存器PSTATE
- 系统寄存器使用添加下标方式来访问不同模式下的寄存器,具体形式:\<register_name>_ELx
通用定时器
ARMv8核心提供了4个定时器
- Hypervisor Physical Timer
- Virtual Timer
- Physical Timer(linux默认使用这个作为系统时钟)
- Physical Secure Timer
所有定时器都使用同一个时钟源——系统时钟,一般CNTFRQ_EL0寄存器中会保存定时器的频率
有2个累加寄存器CNTPCT_EL0、CNTVCT_EL0,分别用于Physical 和Virtual定时器,在CPU运行时累加寄存器会一直累加,寄存器是64位的,就算是10Ghz的主频来说可以运行57.4年,理论是够用的
每个定时器有独立的控制寄存器、比较寄存器、计数寄存器
可以通过适当的配置产生想的定时器及中断