简介
Cortex-A7 MPCore 处理器支持1~4核,通常是和Cortex-A15组成 big.LITTLE架构。
在此架构中,Cortex-A15 作为大核负责高性能运算,而Cortex-A7负责普通应用(相对来说较为省电)
官方性能说明:
在 28nm 工艺下, Cortex-A7 可以运行在 1.2~1.6GHz,并且单核面积不大于 0.45mm2(含
有浮点单元、 NEON 和 32KB 的 L1 缓存),在典型场景下功耗小于 100mW, 这使得它非常适
合对功耗要求严格的移动设备,这意味着 Cortex-A7 在获得与 Cortex-A9 相似性能的情况下,
其功耗更低
Cortex-A7 MPCore 多核配置如下:
Cortex-A7 MPCore 的 L1 可选择 8KB、 16KB、 32KB、 64KB, L2 Cache 可以不配,也可以选择 128KB、 256KB、 512KB、 1024KB。
ARMv7-A架构,主要特性:
- SIMDv2 扩展整形和浮点向量操作。
- 提供了与 ARM VFPv4 体系结构兼容的高性能的单双精度浮点指令,支持全功能的IEEE754。
- 支持大物理扩展(LPAE),最高可以访问 40 位存储地址,也就是最高可以支持 1TB 的内存。
- 支持硬件虚拟化。
- 支持 Generic Interrupt Controller(GIC)V2.0。
- 支持 NEON,可以加速多媒体和信号处理算法
运行模型
一共有9种处理模式。
模式 | 描述 |
User(USR) | 用户模式,非特权模式,大部分程序运行的时候就处于此模式。 |
FIQ | 快速中断模式,进入 FIQ 中断异常 |
IRQ | 一般中断模式。 |
Supervisor(SVC) | 超级管理员模式,特权模式,供操作系统使用。 |
Monitor(MON) | 监视模式,这个模式用于安全扩展模式。 |
Abort(ABT) | 数据访问终止模式,用于虚拟存储以及存储保护。 |
Hyp(HYP) | 超级监视模式,用于虚拟化扩展 |
Undef(UND) | 未定义指令终止模式。 |
System(SYS) | 系统模式,用于运行特权级的操作系统任务 |
除User用户模式外,其余8种模式都是特权模。
大多数程序都运行在用户模式,用户模式下有些资源是受限制,用户模式不能直接进行切换,用户模式需要借助异常来完成模式的切换。
寄存器组
ARM架构提供了16个32位得通用寄存器(R0R15)供软件使用,前15个(R0R14)可以用作通用得数据存储,R15是程序计数器PC,用来保存将要执行得指令。ARM还提供了一个当前程序章台寄存器CPSR和一个备份程序状态寄存器SPSR,SPSR寄存器就是CPSR寄存器得备份。
Cortex-A7 有9种运行模式,每一种运行模式都有一组与之对应的寄存器组。每一种模式可见的寄存器包括 15 个通用寄存器(R0~R14)、一两个程序状态寄存器和一个程序计数器 PC。
有些是所有模式所共用的同一个物理寄存器,有些是各模式独立拥有。如下图:
图中,浅色的为与User模式所共有的寄存器,蓝绿色的是各个模式所读有的寄存器
总结:Cortex-A内核寄存器共有43个寄存器,分别为:
- 34个通用寄存器(32位),包括R15程序计数器(PC)
- 8个状态寄存器,包括CPSR和SPSR
- 1个ELR_Hyp寄存器(Hyp模式下)
通用寄存器
R0~R15为通用寄存器,分为以下三类:
- 未备份寄存器,R0~R7
- 备份寄存器,R8~R14
- 程序计数器PC,R15
未备份寄存器
在所有的处理模式下,这8个寄存器都是同一个物理寄存器。切换模式,数据就会被破坏掉
备份寄存器
备份寄存器中的R8~R12这5个寄存器有两种物理寄存器,在快速中断模式下(FIQ)它们对应着 Rx_irq(x=8~12)物理寄存器,其他模式下对应着 Rx(8~12)物理寄存器。 FIQ 是快速中断模式。 FIQ模式下中断处理程序可以使用 R8~R12寄存器,因为FIQ模式下的 R8~R12是独立的,因此中断处理程序可以不用执行保存和恢复中断现场的指令,从而加速中断的执行过程。
备份寄存器R13一共有8个物理寄存器,其中一个是用户模式(User)和系统模式(Sys)共用的,剩下的7个分别对应7种不同的模式。R13也叫做SP,用来做为栈指针。基本上每种模式都有一个自己的 R13物理寄存器,应用程序会初始化R13,使其指向该模式专用的栈地址,这就是常说的初始化SP指针。
备份寄存器R14一共有7个物理寄存器,其中一个是用户模式(User)、系统模式(Sys)和超级监视模式(Hyp)所共有的,剩下的6个分别对应6种不同的模式。
R14也称为连接寄存器(LR),主要有以下两种用途:
- 每种处理器模式使用 R14(LR)来存放当前子程序的返回地址,如果使用 BL 或者 BLX来调用子函数的话, R14(LR)被设置成该子函数的返回地址,在子函数中,将 R14(LR)中的值赋给 R15(PC)即可完成子函数返回。
- 当异常发生以后,该异常模式对应的 R14 寄存器被设置成该异常模式将要返回的地址,
R14 也可以当作普通寄存器使用。
程序计数器R15
程序计数器R15也叫做PC,R15保存着当前执行的指令地址值加8个字节,这是因为ARM的流水线机制导致的。
ARM处理器3级流水线:
- 取值
- 义马
- 执行
这三个过程循环执行。比如当前正在执行第一条指令的同时也对第二条指令进行译码,第三条指令也同时被取出存放在 R15(PC)中。我们喜欢以当前正在执行的指令作为参考点,也就是以第一条指令为参考点,那么R15(PC)中存放的就是三条指令,换句话说就是 R15(PC)总是指向当前正在执行的指令地址再加上 2 条指令的地址。对于 32 位的 ARM 处理器,每条指令是 4 个字节,所以:
R15(PC)值 = 当前执行的程序位置 + 8个字节
程序状态寄存器
所有的模式都共用一个CPSR物理寄存器,CPSR可以在任何模式下被访问。
该寄存器包括: 条件标志位、中断禁止位、当前处理器模式标志等一些状态位以及一些控制位。
除了 User 和 Sys 这两个模式以外,其他7个模式每个都配备了一个专用的物理状态寄存器,叫做SPSR(备份程序状态寄存器),当特定的异常中断发生时, SPSR寄存器用来保存当前程序状态寄存器(CPSR)的值,当异常退出以后可以用 SPSR 中保存的值来恢复 CPSR。
- N(bit31):当两个补码表示的 有符号整数运算的时候, N=1 表示运算对的结果为负数, N=0表示结果为正数。
- Z(bit30): Z=1 表示运算结果为零,Z=0表示运算结果不为零,对于CMP指令,Z=1表示进行比较的两个数大小相等
- C(bit29):在加法指令中,当结果产生了进位,则C=1,表示无符号数运算发生上溢,其它情况下C=0。在减法指令中,当运算中发生借位,则 C=0,表示无符号数运算发生下溢,其它情况下C=1。对于包含移位操作的非加/减法运算指令, C 中包含最后一次溢出的位的数值,对于其它非加/减运算指令, C 位的值通常不受影响。
- V(bit28): 对于加/减法运算指令,当操作数和运算结果表示为二进制的补码表示的带符号数时,V=1表示符号位溢出,通常其他位不影响 V 位。
- Q(bit27): 仅 ARM v5TE_J 架构支持,表示饱和状态, Q=1 表示累积饱和, Q=0 表示累积不饱和。
- IT1:0: 和 IT7:2一起组成 IT[7:0],作为 IF-THEN 指令执行状态。
- J(bit24): 仅 ARM_v5TE-J架构支持,J=1表示处于Jazelle状态,此位通常和T(bit5)位一起表示当前所使用的指令集。
J | T | 描述 |
0 | 1 | ARM |
0 | 1 | Thumb |
1 | 1 | ThumbEE |
1 | 0 | Jazelle |
- GE3:0: SIMD 指令有效,大于或等于。
- IT7:2: 参考 IT[1:0]。
- E(bit9): 大小端控制位, E=1 表示大端模式, E=0 表示小端模式。
- A(bit8): 禁止异步中断位, A=1 表示禁止异步中断。
- I(bit7): I=1 禁止 IRQ, I=0 使能 IRQ。
- F(bit6): F=1 禁止 FIQ, F=0 使能 FIQ。
- T(bit5): 控制指令执行状态,表明本指令是 ARM 指令还是Thumb 指令,通常和J(bit24)一起表明指令类型,参考 J(bit24)位。
- M[4:0]: 处理器模式控制位,如下表所示:
M[4:0] | 处理器模式 |
10000 | User 模式 |
10001 | FIQ 模式 |
10010 | IRQ 模式 |
10011 | Supervisor(SVC)模式 |
10110 | Monitor(MON)模式 |
10111 | Abort(ABT)模式 |
11010 | Hyp(HYP)模式 |
11011 | Undef(UND)模式 |
11111 | System(SYS)模式 |