ARMv8架构与指令集.学习笔记

更新时间:2023-05-23 09:37:29 阅读: 评论:0

ARMv8架构与指令集.学习笔记
ARMv8简介
基础认识
ARMv8的架构继承以往ARMv7与之前处理器技术的基础,除了现有的16/32bit的Thumb2指令⽀持外,也向前兼容现有的A32(ARM 32bit)指令集,基
avenue怎么读于64bit的AArch64架构,除了新增A64(ARM 64bit)指令集外,也扩充了现有的A32(ARM 32bit)和T32(Thumb2 32bit)指令集,另外还新增加了CRYPTO(加密)模块⽀持。
相关专业名词解释
AArch32描述32bit Execution State
AArch64描述64bit Execution State
A32、T32AArch32 ISA (Instruction Architecture)
A64AArch64 ISA (Instruction Architecture)
begin是什么意思
Interprocessing描述AArch32和AArch64两种执⾏状态之间的切换
SIMD Single-Instruction, Multiple-Data (单指令多数据)
(参考⽂档:ARMv8-A Architecture reference manual-DDI0487A_g_armv8_arm.pdf)
Execution State
.1 提供两种Execution State
• ARMv8 提供AArch32 state和 AArch64 state 两种Execution State,下⾯是两种Execution State对⽐.
Execution 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的异常模型
协处理器只⽀持CP10\CP11\CP14\CP15
松鼠英文AArch64提供31个64bit通⽤寄存器X0-X30(W0-W30),其中X30是程序链接寄存器LR
提供⼀个64bit PC指针、堆栈指针SPx 、异常链接寄存器ELRx
提供32个128bit SIMD向量和标量floating-point⽀持
定义ARMv8异常等级ELx(x<4),x越⼤等级越⾼,权限越⼤
定义⼀组PE state寄存器PSTATE(NZCV/DAIF/CurrentEL/SPSel等),⽤于保存PE当前的状态信息没有协处理器概念
没有协处理器概念
.2 决定Execution State的条件
SPSR_EL1.M[4] 决定EL0的执⾏状态,为0 =>64bit ,否则=>32bit
HCR_EL2.RW 决定EL1的执⾏状态,为1 =>64bit ,否则=>32bit
SCR_EL3.RW确定EL2 or EL1的执⾏状态,为1 =>64bit ,否则=>32bit
AArch32和AArch64之间的切换只能通过发⽣异常或者系统Ret来实现.(A32 -> T32之间是通过BX指令切换的)
Exception Level
• ARMv8定义EL0-EL3共4个Exception Level来控制PE的⾏为.
ELx(x<4),x越⼤等级越⾼,执⾏特权越⾼
执⾏在EL0称为⾮特权执⾏
EL2 没有Secure state,只有Non-cure state
EL3 只有Secure state,实现EL0/EL1的Secure 和Non-cure之间的切换
EL0 & EL1 必须要实现,EL2/EL3则是可选实现
Exception Level 与Security
Exception Level EL0Application
EL1Linux kernel- OS
EL2Hypervisor (可以理解为上⾯跑多个虚拟OS)
EL3Secure Monitor(ARM Trusted Firmware)
Security Non-cure EL0/EL1/EL2, 只能访问Non-cure memory
Non-cure EL0/EL1/EL2, 只能访问Non-cure memory
Secure EL0/EL1/EL3, 可以访问Non-cure memory & Secure memory,可起到物理屏障安全隔离作⽤EL3使⽤AArch64、AArch32的对⽐
Note
翻译论坛Common Ur mode 只执⾏在Non- Secure EL0 or Secure ELO
SCR_EL3.NS决定的是low level EL的cure/non-cure状态,不是绝对⾃⾝的EL2只有Non-cure state
EL0 既有Non-cure state 也有Secure state
EL3 AArch64若EL1使⽤AArch32,那么Non- Secure {SYS/FIQ/IRQ/SVC/ABORT/UND} 模式执⾏在Non-cure EL1,Secure {SYS/FIQ/IRQ/SVC/ABORT/UND}模式执⾏在Se cure EL1
我的青春岁月
若 SCR_EL3.NS == 0,则切换到Secure EL0/EL1状态,否则切换到Non-cure ELO/EL1状态
Secure state 只有Secure EL0/EL1/EL3
EL3 AArch32Ur mode 只执⾏在Non- Secure EL0 or Secure ELO
若EL1使⽤AArch32,那么Non- Secure {SYS/FIQ/IRQ/SVC/ABORT/UND} 模式执⾏在Non-cure EL1,Secure {SYS/FIQ/IRQ/SVC/ABORT/UND}模式执⾏在EL 3
Secure state只有Secure EL0/EL3,没有Secure EL1,要注意和上⾯的情况不同
• 当EL3使⽤AArch64时,有如下结构组合:
• 当EL3使⽤AArch32时,有如下结构组合:
和 Execution State 组合
•假设EL0-EL3都已经实现,那么将会有如下组合
五类组合
EL0/EL1/EL2/EL3  => AArch64
此两类组合不存在64bit –> 32bit之间的所谓 Interprocessing 切换EL0/EL1/EL2/EL3  => AArch32
EL0 => AARCH32,EL1/EL2/EL3 => AArch64
此三类组合存在64bit –> 32bit之间的所谓 Interprocessing 切换EL0/EL1 => AArch32,EL2/EL3 => AArch64
affectation
EL0/EL1/EL2 => AArch32,EL3 => AArch64
组合规则
字宽(ELx)<= 字宽(EL(x+1))  { x=0,1,2 }原则:上层字宽不能⼤于底层字宽
• 五类经典组合图⽰
路由控制
• 如果EL3使⽤AArch64,则有如下异常路由控制
路由规则
• 路由规则如下图所⽰(from ARMv8 Datasheet):
• 规则⼩结如下:
若SPSR_EL1.M[4] == 0,则决定ELO使⽤AArch64,否则AArch32
若SCR_EL3.RW == 1,则决定 EL2/EL1 是使⽤AArch64,否则AArch32
若SCR_EL3.{EA, FIQ, IRQ} == 1,则所有相应的中断都被路由到EL3
若HCR_EL2.RW == 1,则决定EL1使⽤AArch64,否则使⽤AArch32
若HCR_EL2.{AMO, IMO, FMO} == 1,则EL1/EL0所有对应的SError\FIQ\IRQ中断都被路由到EL2,同时使能对应的虚拟中断VSE,VI,VF六级口语考试内容
若HCR_EL2.TGE == 1,那么会忽略HCR_EL2.{AMO, IMO, FMO}的具体值,直接当成1处理,则EL1/
maxim>awkward
EL0所有对应的SError\FIQ\IRQ中断都被路由到EL2,同时禁⽌所有虚拟中断注意:SCR_EL3.{EA, FIQ, IRQ}bit的优先级⾼于HCR_EL2.{AMO, IMO, FMO} bit优先级,路由优先考虑SCR_EL3
威玛罗伊斯路由流程图

本文发布于:2023-05-23 09:37:29,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/743498.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:路由   中断   指令集   组合   架构   状态
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图