ARM体系架构—ARMv7-A协处理器
- 一、ARMv7-A协处理器
- 二、CP15协处理器
-
- 2.1、CP15协处理器寄存器
- 2.2、CP15协处理器寄存器组织
- 2.3、c0-c15寄存器具体组织
- 2.4、虚拟内存控制寄存器组
- 2.4、异常处理寄存器组
- 2.6、cache寄存器组
- 2.7、TLB寄存器组
- 2.8、CPACR
一、ARMv7-A协处理器
ARM体系架构支持协处理器,用于扩展ARM处理器功能。协处理器指令用于访问协处理器。协处理器支持16个协处理器,编 0-15,使用CP0-CP15(Coprocessor)描述。
CP0-CP15协处理器的基本功能如下:
- CP15:提供系统控制功能。包括架构和特性ID,以及控制,状态信息和配置支持。
- CP14:提供硬件Debug功能。
- CP10,CP11:共同支持浮点运算和向量操作。控制和配置浮点和高级SIMD扩展架构。
- CP8,9,12,13:为ARM架构保留协处理器。
- CP0-7:由厂家定义协处理功能。
二、CP15协处理器
CP15协处理器称之为系统控制协处理器,被用于控制和配置ARM处理器系统。其主要功能在于对系统内存的控制,包括cache,页表,TLB(Translation Lookaside Buffer),MMU(Memory Management Unit)等组件的控制。
除了对系统内存的控制外,CP15处理器还负责控制CP0-CP13的访问。CP0-CP13对于ARMv7-A架构可能是可选特性,其中CP10-CP11用于支持浮点运算指令,而CP0-CP7的实现由厂家定义。
2.1、CP15协处理器寄存器
CP15寄存器的实现和ARM体系架构的实现强相关:
- ARMv7-A实现VMSA (Virtual Memory System Architecture),支持虚拟地址,使用MMU(Memory Management Unit)管理地址空间;
- ARMv7-R实现PMSA (Protected Memory System Architecture),支持虚拟地址,使用MPU(Memory Protection Unit)管理地址空间;
CP15提供了16个32位主寄存器,命名为c0-c15。c0-c15寄存器可能对应多个不同的物理寄存器,常见的寄存器见下表。
register | physical register | 描述 |
---|---|---|
c0 | MIDR | 主ID寄存器,用于记录厂商版本信息 |
MPIDR | Multiprocessor Affinity Register | |
c1 | SCTLR | 系统控制寄存器 |
ACTLR | 辅助控制寄存器 | |
CPACR | 协处理器访问控制寄存器,控制访问除了CP14和CP15的协处理器 | |
SCR | 安全配置寄存器 | |
c2 c3 | TTBR0 | 一级转换页表基址寄存器0 |
TTBR1 | 一级转换页表基址寄存器1 | |
TTBCR | 页表转换控制寄存器 | |
c5 c6 | DFSR | 数据异常(Data Fault)状态寄存器 |
IFSR | 指令异常(Instruction Fault)状态寄存器 | |
DFAR | 数据异常(Data Fault)地址寄存器 | |
IFAR | 指令异常(Instruction Fault)地址寄存器 | |
c7 | predictor | cache及分支预测 |
barrier | 数据及指令屏障 | |
c8 | TLB | TLB操作 |
c9 | performance monitors | 性能监视器 |
c12 | VBAR | 非安全模式异常基址寄存器 |
MVBAR | 安全模式异常基址寄存器 | |
c13 | ASID | 上下文ID寄存器,软件线程ID寄存器 |
c15 | CBAR | 配置基址寄存器,用于GIC(Generic Interrupt Controller)和定时器类型外设 |
2.2、CP15协处理器寄存器组织
CP15协处理器保护c0-c15共16个寄存器,寄存器32位的组织形式如下:
CRn,opc1,CRm,opc2 {CRn, opc1, CRm, opc2}CRn,opc1,CRm,opc2
- CRn:第一个协处理器寄存器;
- opc1:协处理器操作码;
- CRm:第二个协处理器寄存器;
- opc2:协处理器操作码。
寄存器64位的组织形式如下:
CRm,opc1 {CRm, opc1}CRm,opc1
- opc1:协处理器操作码;
- CRm:协处理器寄存器;
各字段的具体取值如下图所示。以c0寄存器为例,第一个协处理器寄存器CRn为c0,协处理器操作码opc1取值为[0-2],第二个协处理器寄存器CRm为c0-c7,协处理器操作码opc2取值为[0-7]。
2.4、虚拟内存控制寄存器组
CP15协处理器的重要功能在于内存控制,虚拟内存控制寄存器组包含了页表转换基址寄存器和页表转换控制寄存器等重要的寄存器。
虚拟内存控制寄存器其组如下表所示。
- EAE[31]:地址扩展使能。值为0表示32bit物理地址空间寻址,TTBCR寄存器为短描述符格式;值为1表示40bit物理地址空间寻址,TTBCR寄存器为长描述符格式。
- N[2:0]:指示TTBR0页表基址寄存器基址位宽,同时指示使用TTBR0还是TTBR1作为页表基址寄存器,以及TTBR0页表尺寸。
TTBCR.N的详细作用如下表所示。
- Bits[31:x]:x=(14-(TTBCR.N))。一级页表地址;
- Bits[x-1:7]:Reserved;
- NOS:非外部共享,TTBR0.S == 0时,该bit无效;
- S:共享位。指示内存共享属性与页表转换的关系;
- RNG:Region bits,指示外部cache属性与页表转换的关系;
- IRGN[6,0]:Inner region bits,指示内部cache属性与页表转换的关系;
TTRB1寄存器的描述如下图所示。只有高位bit不一样,TTRB1的[31:14]一级页表地址长度固定,而TTBR0的长度受TTBCR.N影响。
在Linux中用户空间页表映射基址寄存器使用TTBR0,内核空间页表映射基址寄存器使用TTBR1。在进程切换时,TTBR0内记录的页表基址要刷新成新进程的PGD,而TTBR1的页表基址无需刷新。
2.4、异常处理寄存器组
在实现虚拟化扩展的处理器上,异常上 分可能是处理器处于如下两种模式中的一种:
- PL1特权模式,包括安全模式和非安全模式;
- PL2特权模式( Hyp模式),只有非安全模式。
异常信息寄存器,对于PL2特权模式存放在HSR(Hyp Syndrome Register)寄存器,对于PL1特权模式存放在FSR( Fault Status Register)寄存器。
对于同步异常,异常返回地址存放在FAR(Fault Address Registers)寄存器。
异常信息寄存器和地址寄存器如下表所示。
2.7、TLB寄存器组
TLB(Translation-lookside buffer)是一个硬件单元,用于缓存虚拟地址到物理地址的映射关系。TLB寄存器组主要用于刷新TLB表项。
- ASEDIS[31]:去使能高低SIMD功能;
- D32DIS[30]:去使能D16-D31浮点扩展寄存器;
- [29]:Reserved;
- TRCDIS[28]:去使能CP14 trace寄存器;
- cpn[2n+1, 2n](n=[0,13]):访问CP0-CP13协处理器(PL0和PL特权模式);
CPACR寄存器中cpn[2n+1, 2n](n=[0,13]),每个协处理器占用2bit,存在4中情况:
- 0b00:拒绝访问,任何对CPn的访问都会产生未定义指令异常;
- 0b01:仅PL1特权模式可以访问,在PL0模式下任何对CPn的访问都会产生未定义指令异常;
- 0b10:Reserved;
- 0b11:可以访问,PL0和PL1特权等级都可以访问CPn协处理器。
对CPSR寄存器的访问可以使用协处理器指令MRC和MCR。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!