armv8架构计算机组成与结构.pdf
《armv8架构计算机组成与结构.pdf》由会员分享,可在线阅读,更多相关《armv8架构计算机组成与结构.pdf(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目目 录录 第第 1 1 章章 ARMV8ARMV8 简介简介 .3 3 1.1 基础认识.3 1.2 相关专业名词解释.3 第第 2 2 章章 EXECUTION STATEEXECUTION STATE .4 4 2.1 提供两种EXECUTION STATE.4 2.2 决定EXECUTION STATE的条件.4 第第 3 3 章章 EXCEEXCEPTION LEVELPTION LEVEL .5 5 3.1 EXCEPTION LEVEL 与SECURITY.5 3.1.1 EL3 使用AArch64、AArch32 的对比.5 3.2 ELX 和 EXECUTION STATE
2、组合.6 3.3 路由控制.7 3.3.1 路由规则.7 3.3.2 IRQ/FIQ/SError路由流程图.8 第第 4 4 章章 ARMVARMV8 8 寄存器寄存器 .9 9 4.1 AARCH32 重要寄存器.9 4.1.1 A32 状态下寄存器组织.10 4.1.1 T32 状态下寄存器组织.10 4.2 AARCH64 重要寄存器.11 4.3 64、32 位寄存器的映射关系.11 第第 5 5 章章 异常模型异常模型 .1212 5.1 异常类型描述.12 5.1.1 AArch32 异常类型.12 5.1.2 AArch64 异常类型.12 5.2 异常处理逻辑.13 5.2.
3、1 寄存器操作.13 5.2.2 路由控制.14 5.3 流程图对比.14 5.3.1 IRQ 流程图.15 5.3.2 Data Abort 流程图.18 5.4 源代码异常入口.20 5.4.1 C函数入口.20 5.4.2 上报流程图.20 5.4.3 异常进入压栈准备.21 5.4.4 栈布局.21 第第 6 6 章章 ARMV8ARMV8 指令集指令集 .2222 6.1 概况.22 6.1.1 指令基本格式.22 6.1.2 指令分类.22 6.2 A64 指令集.22 6.2.1 指令助记符.23 6.2.2 指令条件码.23 6.2.3 跳转指令.24 6.2.4 异常产生和返
4、回指令.24 6.2.5 系统寄存器指令.24 6.2.6 数据处理指令.25 6.2.7 Load/Store指令.错误!未定义书签。错误!未定义书签。6.2.8 屏障指令.31 6.3 A32&T32 指令集.32 6.3.1 跳转指令.32 6.3.2 异常产生、返回指令.32 6.3.3 系统寄存器指令.32 6.3.4 系统寄存器指令.32 6.3.5 数据处理指令.33 6.3.6 Load/Store指令.33 6.3.7 IT(if then)指令.34 6.3.8 协处理器指令.35 6.4 指令编码.35 6.4.1 A32 编码.35 6.4.2 T32-16bit编码.
5、35 6.4.3 T32-32bit编码.36 6.4.4 A64 编码.36 6.4 汇编代码分析.36 第第 7 7 章章 流水线流水线 .3737 7.1 简介.37 7.1.1 简单三级流水线.37 7.1.2 经典五级流水线.37 7.2 流水线冲突.38 7.3 指令并行.38 ARMv8 架构与指令集 -3-第 1 章 ARMv8 简介 1.1 基础认识 ARMv8 的架构继承以往 ARMv7 与之前处理器技术的基础,除了现有的 16/32bit 的 Thumb2 指令支持外,也向前兼容现有的A32(ARM 32bit)指令集,基于64bit的AArch64架构,除了新增A64(
6、ARM 64bit)指令集外,也扩充了现有的 A32(ARM 32bit)和 T32(Thumb2 32bit)指令集,另外还新增加了CRYPTO(加密)模块支持。1.2 相关专业名词解释 AArch32AArch32 描述 32bit Execution State AArch64AArch64 描述 64bit Execution State A32A32、T32T32 AArch32 ISA(Instruction Architecture)A64A64 AArch64 ISA(Instruction Architecture)InterprocessingInterprocessing
7、 描述 AArch32 和 AArch64 两种执行状态之间的切换 SIMDSIMD Single-Instruction,Multiple-Data(单指令多数据)(参考文档:ARMv8-A Architecture reference manual-DDI0487A_g_armv8_arm.pdf)ARMv8 架构与指令集 -4-第 2 章 Execution State 2.1 提供两种 Execution State ARMv8 提供 AArch32 state 和 AArch64 state 两种 Execution State,下面是两种 Execution State 对比.Ex
8、ecution State Note AArch32 提供 13 个 32bit 通用寄存器 R0-R12,一个 32bit PC 指针(R15)、堆栈指针 SP(R13)、链接寄存器 LR(R14)提供一个 32bit 异常链接寄存器 ELR,用于 Hyp mode 下的异常返回 提供 32 个 64bit SIMD 向量和标量 floating-point 支持 提供两个指令集 A32(32bit)、T32(16/32bit)兼容 ARMv7 的异常模型 协处理器只支持 CP10CP11CP14CP15 AArch64 提供 31 个 64bit 通用寄存器 X0-X30(W0-W30),
9、其中 X30 是程序链接寄存器 LR 提供一个 64bit PC 指针、堆栈指针 SPx、异常链接寄存器 ELRx 提供 32 个 128bit SIMD 向量和标量 floating-point 支持 定义 ARMv8 异常等级 ELx(x64bit,否则=32bit HCR_EL2.RW 决定 EL1 的执行状态,为 1=64bit,否则=32bit SCR_EL3.RW 确定 EL2 or EL1 的执行状态,为 1=64bit,否则=32bit AArch32 和 AArch64 之间的切换只能通过发生异常或者系统 Reset 来实现.(A32-T32 之间是通过 BX 指令切换的)A
10、RMv8 架构与指令集 -5-第 3 章 Exception Level ARMv8 定义 EL0-EL3 共 4 个 Exception Level 来控制 PE 的行为.ELx(x AArch64 此 两类 组合 不存在 64bit 32bit 之间 的所谓 Interprocessing 切换 EL0/EL1/EL2/EL3 =AArch32 ARMv8 架构与指令集 -7-EL0=AARCH32,EL1/EL2/EL3=AArch64 此 三 类 组 合 存 在 64bit 32bit 之 间 的 所 谓 Interprocessing 切换 EL0/EL1=AArch32,EL2/E
11、L3=AArch64 EL0/EL1/EL2=AArch32,EL3=AArch64 组合规则 字宽(ELx)SP_EL0&从 Current EL 来 0 x000 0 x080 0 x100 0 x180 SP=SP_ELx&从 Current EL 来 0 x200 0 x280 0 x300 0 x380 64bit=64bit&从 Low level EL 来 0 x400 0 x480 0 x500 0 x580 32bit=64bit&从 Low level EL 来 0 x600 0 x680 0 x700 0 x780 SP=SP_EL0,表示使用 SP_EL0 堆栈指针,由
12、 PSTATE.SP=0 决定,PSTATE.SP=1 则 SP_ELx;32bit=64bit 是指发生异常时 PE 从 AArch32 切换到 AArch64 的情况;5.2 异常处理逻辑 5.2.1 寄存器操作 流程流程 NoteNote AArch32 StateAArch32 State 1、PE 根据异常类型跳转到对应的异常模式 x,x=und/svc/abt/irq/fiq/hyp/mon PE 跳转到哪一种模式通常由路由关系决定 2、保存异常返回地址到 LR_x,用于异常返回用 LR 也是对应模式的 R14_x 寄存器,32 位系统下LR 和 ELR 是同一个寄存器,而 64
13、位是独立的 3、备份 PSTATE 数据到 SPSR_x 异常返回时需要从 SPSR_x 恢复 PSTATE 4、PSTATE 操作:PSTATE.M4:0设置为异常模式 x PSTATE.A,I,F=1 PSTATE.T=1,强制进入 A32 模式 PSTATE.IT7:2=“00000”PSTATE.M4只是对 32 位系统有效,64 为下是保留的,因为 64 位下没有各种 mode 的概念.异常处理都要切换到 ARM 下进行;进入异常时需要暂时关闭 A,I,F 中断;5、据异常模式 x 的向量偏移跳转到进入异常处理 各个 mode 有对应的 Vector base addr+offset
14、 AArch64 stateAArch64 state 1、保存 PSTATE 数据到 SPSR_ELx,(x=1,2,3)异常返回时需要从 SPSR_ELx 中恢复 PSTATE 2、保存异常进入地址到 ELR_ELx,同步异常(und/abt 等)是当前地址,而 异步异常(irq/fiq 等)是下一条指令地址 64 位架构 LR 和 ELR 是独立分开的,这点和 32 位架构有所差别 3、保存异常原因信息到 ESR_ELx ESR_ELx.EC 代表 Exception Class,关注这个 bit 4、PE 根据目标 EL 的异常向量表中定义的异常地跳转到哪个 EL 使用哪个向量偏移地址
15、又路由关ARMv8 架构与指令集 -14-址强制跳转到异常处理程序 系决定 5、堆栈指针 SP 的使用由目标 EL 决定(SPSR_ELx.M0=1)?h(ELx):t(EL0)5.2.2 路由控制 Execution State 异步异常(中断)路由控制位、优先级排列.1 允许 0 禁止 AArch32 Asynchronous Data Abort(异步数据终止)SCR.EA HCR.TGE HCR.AMO IRQ or vIRQ SCR.IRQ HCR.TGE HCR.IMO FIQ or vFIQ SCR.FIQ HCR.TGE HCR.FMO AArch64 SError or vS
16、Error SCR_EL3.EA HCR_EL2.TGE HCR_EL2.AMO IRQ or vIRQ SCR_EL3.IRQ HCR_EL2.TGE HCR_EL2.IMO FIQ or vFIQ SCR_EL3.FIQ HCR_EL2.TGE HCR_EL2.FMO 若 HCR_EL2.TGE=1 所有的虚拟中断将被禁止,HCR.AMO,IMO,FMO HCR_EL2.AMO,IMO,FMO被当成 1 处理.5.3 流程图对比 AArch32、AArch64 架构下 IRQ 和 Data Abort 异常处理流程图对比.ARMv8 架构与指令集 -15-5.3.1 IRQ 流程图 5.3
17、.1.1 AArch32 ARMv8 架构与指令集 -16-5.3.1.2 AArch64 ARMv8 架构与指令集 -17-ARMv8 架构与指令集 -18-5.3.2 Data Abort 流程图 5.3.2.1 AArch32 5.3.2.2 AArch64 ARMv8 架构与指令集 -19-ARMv8 架构与指令集 -20-5.4 源代码异常入口 5.4.1 C 函数入口 异常类型 AArch32 State AArch64 State 所在文件 C 函数 所在文件 C 函数 Und arm/kernel/traps.c do_undefinstr Arm64/kernel/traps
18、.c do_undefinstr Data Abort arm/mm/fault.c do_DataAbort arm64/mm/fault.c do_mem_abort IRQ arm/kernel/irq.c asm_do_IRQ arm64/kernel/irq.c handle_IRQ FIQ System Call 5.4.2 上报流程图 例举 Data Abort 和 IRQ 中断的入口流程图 5.4.2.1 Data Abort 上报 ARMv8 架构与指令集 -21-5.4.2.2 IRQ 上报 5.4.3 异常进入压栈准备 分析 64 位 kernel_entry 压栈代码逻
19、辑(代码路径:kernel/arch/arm64/kernel/entry.S)sp 指向#S_LR#S_FRAME_SIZE 位置#S_FRAME_SIZE 是 pt_regs 结构图的 size 依次把 x28-x29 x0-x1 成对压入栈内 每压入一对寄存器,sp 指针就移动-16=((64/8)*2)字节长度,栈是向地址减少方向增长的.保存 sp+#S_FRAME_SIZE 数据到 x21 add x21,sp,#SP_FRAME_SIZE 保存 elr_el1 到 x22 mrs x22,elr_el1 保存 spsr_el1 到 x23 mrs x23,spsr_el1 把 lr
20、、x21 写入 sp+#S_LR 地址内存 保存 lr 和 x21 的数据到指定栈内存位置 把 x22、x23 写入 sp+#S_PC 地址内存 保存 elr,spsr 数据到指定栈内存位置 5.4.4 栈布局 ARMv8 架构与指令集 -22-第 6 章 ARMv8 指令集 6.1 概况 A64 指令集 A32&T32 指令集 指令编码 6.1.1 指令基本格式 ,其中尖括号是必须的,花括号是可选的 A32:Rd=R0R14 A64:Rd=Xt=X0X30 标识符 Note Opcode 操作码,也就是助记符,说明指令需要执行的操作类型 Cond 指令执行条件码,在编码中占 4bit,0b0
21、000-0b1110 S 条件码设置项,决定本次指令执行是否影响 PSTATE 寄存器响应状态位值 Rd/Xt 目标寄存器,A32 指令可以选择 R0-R14,T32 指令大部分只能选择 RO-R7,A64 指令可以选择 X0-X30 or W0-W30 Rn/Xn 第一个操作数的寄存器,和 Rd 一样,不同指令有不同要求 Opcode2 第二个操作数,可以是立即数,寄存器 Rm 和寄存器移位方式(Rm,#shit)6.1.2 指令分类 类型 Note 跳转指令 条件跳转、无条件跳转(#imm、register)指令 异常产生指令 系统调用类指令(SVC、HVC、SMC)系统寄存器指令 读写系
22、统寄存器,如:MRS、MSR 指令 可操作 PSTATE 的位段寄存器 数据处理指令 包括各种算数运算、逻辑运算、位操作、移位(shift)指令 load/store 内存访问指令 load/store 批量寄存器、单个寄存器、一对寄存器、非-暂存、非特权、独占以及load-Acquire、store-Release 指令(A64 没有 LDM/STM 指令)协处理指令 A64 没有协处理器指令 6.2 A64 指令集 A64 指令编码宽度固定 32bit 31 个(X0-X30)个 64bit 通用用途寄存器(用作 32bit 时是 W0-W30),寄存器名使用 5bit 编码 PC 指针不
23、能作为数据处理指或 load 指令的目的寄存器,X30 通常用作 LR 移除了批量加载寄存器指令 LDM/STM,PUSH/POP,使用 STP/LDP 一对加载寄存器指令代替 ARMv8 架构与指令集 -23-增加支持未对齐的 load/store 指令立即数偏移寻址,提供非-暂存 LDNP/STNP 指令,不需要 hold 数据到 cache中 没有提供访问 CPSR 的单一寄存器,但是提供访问 PSTATE 的状态域寄存器 相比 A32 少了很多条件执行指令,只有条件跳转和少数数据处理这类指令才有条件执行.支持 48bit 虚拟寻址空间 大部分 A64 指令都有 32/64 位两种形式
24、A64 没有协处理器的概念 6.2.1 指令助记符 整型 W/R 32bit 整数 X 64bit 整数 加载/存储、符号-0 扩展 B 无符号 8bit 字节 SB 带符号 8bit 字节 H 无符号 16bit 半字 SH 带符号 16bit 半字 W 无符号 32bit 字 SW 带符号 32bit 字 P Pair(一对)寄存器宽度改变 H 高位(dst gets top half)N 有限位(dst src)W Wide(dst=src1,src1src2)?6.2.2 指令条件码 编码 助记符 描述 标记 0000 EQ 结果相等为 1 Z=1 0001 NE 结果不等为 0 Z=
25、0 0010 HS/CS 无符号高或者相同进位,发生进位为 1 C=1 0011 LO/CC 无符号低清零,发生借位为 0 C=0 0100 MI 负数为 1 N=1 0101 PL 非负数 0 N=0 0110 VS 有符号溢出为 1 V=1 0111 VC 没用溢出为 0 V=0 1000 HI 无符号 C=1&Z=0 1001 LS 无符号=N=V ARMv8 架构与指令集 -24-1011 LT 带符号 Z=0&N=V 1101 LE 带符号=!(Z=0&N=V)1110 AL 无条件执行 Any 1111 NV 6.2.3 跳转指令 6.2.3.1 条件跳转 B.cond cond
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- armv8 架构 计算机 组成 结构
限制150内