简介

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 多核配置如下:

a73架构 arm a73架构功耗_arma

Cortex-A7 MPCore 的 L1 可选择 8KB、 16KB、 32KB、 64KB, L2 Cache 可以不配,也可以选择 128KB、 256KB、 512KB、 1024KB。

ARMv7-A架构,主要特性:

  1. SIMDv2 扩展整形和浮点向量操作。
  2. 提供了与 ARM VFPv4 体系结构兼容的高性能的单双精度浮点指令,支持全功能的IEEE754。
  3. 支持大物理扩展(LPAE),最高可以访问 40 位存储地址,也就是最高可以支持 1TB 的内存。
  4. 支持硬件虚拟化。
  5. 支持 Generic Interrupt Controller(GIC)V2.0。
  6. 支持 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寄存器得备份。

a73架构 arm a73架构功耗_a73架构 arm_02


Cortex-A7 有9种运行模式,每一种运行模式都有一组与之对应的寄存器组。每一种模式可见的寄存器包括 15 个通用寄存器(R0~R14)、一两个程序状态寄存器和一个程序计数器 PC。

有些是所有模式所共用的同一个物理寄存器,有些是各模式独立拥有。如下图:

a73架构 arm a73架构功耗_arma_03

图中,浅色的为与User模式所共有的寄存器,蓝绿色的是各个模式所读有的寄存器

总结:Cortex-A内核寄存器共有43个寄存器,分别为:

  1. 34个通用寄存器(32位),包括R15程序计数器(PC)
  2. 8个状态寄存器,包括CPSR和SPSR
  3. 1个ELR_Hyp寄存器(Hyp模式下)

通用寄存器

R0~R15为通用寄存器,分为以下三类:

  1. 未备份寄存器,R0~R7
  2. 备份寄存器,R8~R14
  3. 程序计数器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),主要有以下两种用途:

  1. 每种处理器模式使用 R14(LR)来存放当前子程序的返回地址,如果使用 BL 或者 BLX来调用子函数的话, R14(LR)被设置成该子函数的返回地址,在子函数中,将 R14(LR)中的值赋给 R15(PC)即可完成子函数返回。
  2. 当异常发生以后,该异常模式对应的 R14 寄存器被设置成该异常模式将要返回的地址,
    R14 也可以当作普通寄存器使用。

程序计数器R15

程序计数器R15也叫做PC,R15保存着当前执行的指令地址值加8个字节,这是因为ARM的流水线机制导致的。
ARM处理器3级流水线:

  1. 取值
  2. 义马
  3. 执行
    这三个过程循环执行。比如当前正在执行第一条指令的同时也对第二条指令进行译码,第三条指令也同时被取出存放在 R15(PC)中。我们喜欢以当前正在执行的指令作为参考点,也就是以第一条指令为参考点,那么R15(PC)中存放的就是三条指令,换句话说就是 R15(PC)总是指向当前正在执行的指令地址再加上 2 条指令的地址。对于 32 位的 ARM 处理器,每条指令是 4 个字节,所以:
R15(PC)值 = 当前执行的程序位置 + 8个字节

程序状态寄存器

所有的模式都共用一个CPSR物理寄存器,CPSR可以在任何模式下被访问。
该寄存器包括: 条件标志位、中断禁止位、当前处理器模式标志等一些状态位以及一些控制位。

除了 User 和 Sys 这两个模式以外,其他7个模式每个都配备了一个专用的物理状态寄存器,叫做SPSR(备份程序状态寄存器),当特定的异常中断发生时, SPSR寄存器用来保存当前程序状态寄存器(CPSR)的值,当异常退出以后可以用 SPSR 中保存的值来恢复 CPSR。

a73架构 arm a73架构功耗_寄存器_04

  • 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)模式