ARM Cortex A7 架构简介

news/2024/11/15 0:01:52/

Cortex-A7 MPCore 简介

MP表示是多核的意思,Cortex-A7 MPcore 处理器支持 1~4 核,A7主打低功耗,因此多用于运行普通应用,通常和Cortex-A15 组成 big.LITTLE 架构的,Cortex-A15 作为大核负责高性能运算。Cortex-A7 本身性能也不弱,不要看它叫做 Cortex-A7 但是它可是比 Cortex-A8 性能要强大,而且更省电。ARM 官网对于 Cortex-A7 的说明如下:
“在 28nm 工艺下, Cortex-A7 可以运行在 1.2~1.6GHz,并且单核面积不大于 0.45mm2(含有浮点单元、 NEON 和 32KB 的 L1 缓存),在典型场景下功耗小于 100mW, 这使得它非常适合对功耗要求严格的移动设备,这意味着 Cortex-A7 在获得与 Cortex-A9 相似性能的情况下,其功耗更低”。

Cortex-A7 MPCore 支持在一个处理器上选配 1~4 个内核, Cortex-A7 MPCore 多核配置如图
在这里插入图片描述
Cortex-A7 MPCore 的 L1 可选择 8KB、 16KB、 32KB、 64KB, L2 Cache 可以不配,也可以选择 128KB、 256KB、 512KB、 1024KB。 Cortex-A7MPCore 使用 ARMv7-A 架构。

Cortex-A 处理器运行模型

以前的 ARM 处理器有 7 中运行模型: User、 FIQ、 IRQ、 Supervisor(SVC)、 Abort、 Undef和 System,其中 User 是非特权模式,其余 6 中都是特权模式。但新的 Cortex-A 架构加入了TrustZone 安全扩展,所以就新加了一种运行模式: Monitor,新的处理器架构还支持虚拟化扩展,因此又加入了另一个运行模式: Hyp,所以 Cortex-A7 处理器有** 9 种处理模式(上电后默认进入SVC模式),**如表
在这里插入图片描述
除了 User(USR)用户模式以外,其它 8 种运行模式都是特权模式。这几个运行模式可以通过软件进行任意切换,也可以通过中断或者异常来进行切换。大多数的程序都运行在用户模式,用户模式下是不能访问系统所有资源的,有些资源是受限的,要想访问这些受限的资源就必须进行模式切换。但是用户模式是不能直接进行切换的,用户模式下需要借助异常来完成模式切换,当要切换模式的时候,应用程序可以产生异常,在异常的处理过程中完成处理器模式切换
当中断或者异常发生以后,处理器就会进入到相应的异常模式种,每一种模式都有一组寄存器供异常处理程序使用,这样的目的是为了保证在进入异常模式以后,用户模式下的寄存器不会被破坏。
如果学过 ARM-CortexM 和 UCOS、 FreeRTOS 就会知道, CortexM只有两种运行模式,特权模式和非特权模式,但是 Cortex-A 就有 9 种运行模式

Cortex-A 寄存器组

ARM 架构提供了 16 个 32 位的通用寄存器(R0~R15)供软件使用,前 15 个(R0~R14)可以用作通用的数据存储, R15 是程序计数器 PC,用来保存将要执行的指令。 ARM 还提供了一个当前程序状态寄存器 CPSR 和一个备份程序状态寄存器 SPSR, SPSR 寄存器就是 CPSR 寄存器的备份
在这里插入图片描述
上一小节我们讲了 Cortex-A7 有 9 种运行模式,每一种运行模式都有一组与之对应的寄存器组。每一种模式可见的寄存器包括 15 个通用寄存器(R0~R14)、一两个程序状态寄存器和一个程序计数器 PC。在这些寄存器中,有些是所有模式所共用的同一个物理寄存器,有一些是各模式自己所独立拥有的,各个模式所拥有的寄存器如下表
在这里插入图片描述图中浅色字体的是与 User 模式所共有的寄存器,蓝绿色背景的是各个模式所独有的寄存器。可以看出,在所有的模式中,低寄存器组(R0~R7)是共享同一组物理寄存器的,只是一些高寄存器组在不同的模式有自己独有的寄存器,比如 FIQ 模式下 R8~R14 是独立的物理寄存器

通用寄存器

可以将通用寄存器组分为三类,
①、 未备份寄存器,即 R0~R7
②、 备份寄存器,即 R8~R14
③、程序计数器 PC,即 R15

未备份寄存器

未备份寄存器指的是 R0~R7 这 8 个寄存器,因为在所有的处理器模式下这 8 个寄存器都是同一个物理寄存器,在不同的模式下,这 8 个寄存器中的数据就会被破坏。所以这 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),LR 寄存器在 ARM 中主要用作如下两种用途,
①、每种处理器模式使用 R14(LR)来存放当前子程序的返回地址,如果使用 BL 或者 BLX来调用子函数的话, R14(LR)被设置成该子函数的返回地址,在子函数中,将 R14(LR)中的值赋给 R15(PC)即可完成子函数返回
②、当异常发生以后,该异常模式对应的 R14 寄存器被设置成该异常模式将要返回的地址,R14 也可以当作普通寄存器使用

程序计数器 R15

程序计数器 R15 也叫做 PC, 下边我们介绍下ARM的三级流水线机制,ARM 处理器 3 级流水线:取指->译码->执行,如下图
在这里插入图片描述
PC始终指向正在取指的地址,由于流水线的存在,导致PC的值比当前正在执行的值要大两条指令的地址,而在arm状态下,由于是四字节的指令因此PC保存着当前执行的指令地址值加 8 个字节,而在thumb状态下,是两字节的指令因此加4字节即可

程序状态寄存器psr

所有的处理器模式都共用一个 CPSR 物理寄存器,因此 CPSR 可以在任何模式下被访问。CPSR 是当前程序状态寄存器,该寄存器包含了条件标志位、中断禁止位、当前处理器模式标志等一些状态位以及一些控制位。所有的处理器模式都共用一个 CPSR 必然会导致冲突,为此,除了 User 和 Sys 这两个模式以外,其他 7 个模式每个都配备了一个专用的物理状态寄存器SPSR(备份程序状态寄存器),当特定的异常中断发生时, SPSR 寄存器用来保存当前程序状态寄存器(CPSR)的值,当异常退出以后可以用 SPSR 中保存的值来恢复 CPSR。
因为 User 和 Sys 这两个模式不是异常模式,所以并没有配备 SPSR,因此不能在 User 和Sys 模式下访问 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)位一起表示当前所使用的指令集,00-ARM,01-Thumb,11-ThumbEE,10-Jazelle
GE[3:0](bit19:16): SIMD 指令有效,大于或等于。
IT[7:2](bit15:10): 参考 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]: 处理器模式控制位,如下表
在这里插入图片描述
注:出处多为引用《正点原子》出品相关文档!
注:出处多为引用《正点原子》出品相关文档!
注:出处多为引用《正点原子》出品相关文档!


http://www.ppmy.cn/news/157701.html

相关文章

ARM Cortex-A77架构解读

Cortex-A76是2018年的亮点产品,无论是高通还是华为,都利用这个先进的架构设计出了极为出色的产品,使得移动计算设备的性能又大大向前推进了一步,并且依旧保持了极高的能耗比。在2019年,ARM并没有松懈下来,而…

ARM发布Cortex-A78参数细节

面向7nm工艺的Cortex-A77架构发布2年多之后,ARM公司今晚正式推出了新一代CPU架构——Cortex-A78,适用于5nm工艺,性能提升20%,功耗则降低了50%。Cortex-A78就是前两年曝光的Hercules(大力神)处理器&#xff…

“微商城”项目(4首页)

1.显示轮播图 首页和商品详情页都有图片轮播图展示&#xff0c;考虑到Vue组件代码的复用性&#xff0c;把轮播图相关代码单独放置在src\components\swiper.vue文件中。 在src\pages\Home.vue文件中&#xff0c;编写HTML结构代码&#xff0c;示例代码如下。 <template>…

StackLLaMA: A hands-on guide to train LLaMA with RLHF

Paper name StackLLaMA: A hands-on guide to train LLaMA with RLHF Paper Reading Note Project URL: https://huggingface.co/blog/stackllama Code URL: https://huggingface.co/docs/trl/index TL;DR Huggingface 公司开发的 RLHF 训练代码&#xff0c;已集成到 hugg…

Android - 线程 Thread

一、概念 1.1 主线程 一个线程总是由另一个线程启动&#xff0c;所以总有一条特殊的线程即主线程。 1.2 UI线程 APP启动时系统会为它创建一条执行线程即主线程&#xff0c;主线程用来处理所有与用户界面相关的操作&#xff08;触摸、布局、绘制、动画&#xff09;以及UI组件的…

音视频基础 及 海思sample_venc解读

1、sample的整体架构 (1)sample其实是很多个例程&#xff0c;所以有很多个main (2)每一个例程面向一个典型应用&#xff0c;common是通用性主体函数&#xff0c;我们只分析venc (3)基本的架构是&#xff1a;venc中的main调用venc中的功能函数&#xff0c;再调用common中的功…

linux中断

一 Linux中断原理 Linux中断&#xff08;Interrupt&#xff09;是指在计算机执行过程中&#xff0c;由于某些事件发生&#xff08;例如硬件请求、错误、异常等&#xff09;&#xff0c;CPU暂停当前正在执行的程序&#xff0c;转而执行相应的处理程序的过程。中断是计算机多任务…

java虚拟机性能分析和故障解决工具

一&#xff1a;工具概述 二&#xff1a;命令行工具 jps(jvm process status tool):显示指定系统内所有虚拟机的进程。 jstat&#xff08;jvm statices monitoring tools&#xff09;&#xff1a;用于收集虚拟机各方面的运行数据。 jinfo&#xff08;configuration info for ja…