ARM——体系架构
1.ARM简介
ARM是Advanced RISC Machines的缩写,它是⼀家微处理器⾏业的知名企业,该企业设计了⼤量⾼性能、廉价、耗能低的RISC (精简指令集)处理器。公司的特点是只设计芯⽚,⽽不⽣产。它将技术授权给世界上许多著名的半导体、软件和OEM⼚商,并提供服务。
1.1 ARM(Advanced RISC Machines)的⼏种含义:
1、ARM是⼀种RISC MPU/MCU的体系结构,如同x86架构是⼀种CISC体系结构⼀样。另外,还有MIPS架构、PowerPC架构等等。
2、ARM是Advanced RISC Machine Limited公司的简称。
3、ARM是Advanced RISC Machine Limited公司的产品,该产品以IP Core(Intellectual Property Core,知识产权核)的形式提供的。
4、ARM还⽤以泛指许多半导体⼚商买了这种设计后⽣产出来的“ARM处理器”系列的芯⽚及其衍⽣产品。
半导体⼚商固然可以光购买ARM公司的设计⽽直接⽣产ARM处理器芯⽚,但是更好的⽅法是以ARM处
理器为核⼼,在同⼀块芯⽚上配上⾃⼰开发的外围模块,形成⾯向特定应⽤和市场的专⽤芯⽚,甚⾄“⽚上系统(System on a Chip,SoC)”。这样,作为专⽤处理器/控制器芯⽚的⽣产商既可以减少开发中的风险,⼜可以⼤⼤缩短开发周期,降低成本。所以,“ARM处理器”⼀般是作为“内核”存在于⼀些专⽤处理器/控制器的内部,因⽽⼜常常叫做“ARM核”。特别地,如果⼀个处理器核不带浮点运算功能,有时候就对此特别加以强调,称之为“整形核”。
1..2 ARM微处理器的特点
(1)ARM指令都是32位定长的
(2)寄存器数量丰富(37个寄存器)
(3)普通的Load/Store指令
(4)多寄存器的Load/Store指令
(5)指令的条件执⾏
(6)单时钟周期中的单条指令完成数据移位操作和ALU操作(7)通过变种和协处理器来扩展ARM处理器的功能
(8)扩展了16位的Thumb指令来提⾼代码密度
ARM作为RISC微处理器与CISC微处理器技术对⽐如下:
1.3 ARM微处理器系列
1.3.1 Classic ARM Processors (经典 ARM 处理器)
· ARM11™ 系列 - 基于 ARMv6 架构的⾼性能处理器
·
ARM9™ 系列 - 基于 ARMv5 架构的常⽤处理器
· ARM7™ 系列- ⾯向通⽤应⽤的经典处理器
ARM 经典处理器适⽤于那些希望在新应⽤中使⽤经过市场验证的技术的组织。这些处理器提供了许多的功能、卓越的能效和范围⼴泛的操作性能,适⽤于成本敏感型解决⽅案。这些处理器每年都有数⼗亿的发货量,因此可确保设计者获得最⼴泛的⽣态系统和资源,从⽽最⼤限度地减少集成过程中出现的问题并缩短上市时间。
1.3.2 Embedded Cortex Processors (ARM Cortex 嵌⼊式处理器)
· Cortex-R 系列 - ⾯向实时应⽤的卓越性能
· Cortex-M 系列 - ⾯向具有确定性的微控制器应⽤的成本敏感型解决⽅案
Cortex 嵌⼊式处理器旨在为各种不同的市场提供服务。
Cortex-M 系列处理器主要是针对微控制器领域开发的,在该领域中,既需进⾏快速且具有⾼确定性的中断管理,⼜需将门数和可能功耗控制在最低。
⽽ Cortex-R 系列处理器的开发则⾯向深层嵌⼊式实时应⽤,对低功耗、良好的中断⾏为、卓越性能以及与现有平台的⾼兼容性这些需求进⾏了平衡考虑。
· Cortex-A 系列
ARM编程模型
1. ARM数据类型
(1)字(Word):在ARM体系结构中,字的长度为32位。
(2)半字(Half-Word):在ARM体系结构中,半字的长度为16位。
(3)字节(Byte):在ARM体系结构中,字节的长度为8位。
2. ARM处理器存储格式
ARM体系结构将存储器看作是从0地址开始的字节的线性组合。作为32位的微处理器,ARM体系结构所⽀持的最⼤寻址空间为
4GB。
ARM体系结构可以⽤两种⽅法存储字数据,分别为⼤端模式和⼩端模式。
⼤端模式(⾼地⾼低):字的⾼字节存储在低地址字节单元中,字的低字节存储在⾼地址字节单元中。
⼩端模式(⾼⾼低低):字的⾼字节存储在⾼地址字节单元中,字的低字节存储在低地址字节单元中。
3. ARM处理器⼯作状态
从编程的⾓度来看,ARM微处理器的⼯作状态⼀般ARM和Thumb有两种,并可在两种状态之间切换。
(1)ARM状态:此时处理器执⾏32位的字对齐ARM指令,绝⼤部分⼯作在此状态。
(2)Thumb状态:此时处理器执⾏16位的半字对齐的Thumb指令。
4. ARM处理器⼯作模式
(1)⽤户模式(usr,User Mode):ARM处理器正常的程序执⾏状态。
(2)快速中断模式(fiq,Fast Interrupt Request Mode):⽤于⾼速数据传输或通道处理。当触发快速中断时进⼊此模式。
(3)外部中断模式(irq,Interrupt Request Mode):⽤于通⽤的中断处理。当触发外部中断时进⼊此模式。
(4)管理模式(svc,Supervisor Mode):操作系统使⽤的保护模式。在系统复位或执⾏软件中断指令SWI时进⼊。
(5)数据访问中⽌模式(abt,Abort Mode):当数据或指令预取中⽌时进⼊该模式,可⽤于虚拟存储及存储保护。
(6)系统模式(sys,System Mode):运⾏具有特权的操作系统任务。
(7)未定义指令中⽌模式(und,Undefined Mode):当未定义的指令执⾏时进⼊该模式,可⽤于⽀持硬件协处理器的软件仿真。
除了⽤户模式之外,其余六种模式都是特权模式。除了⽤户模式和系统模式之外,其余五种模式都是异常模式。
在特权模式下程序可以访问所有的系统资源。⾮特权模式和特权模式之间的区别在于有些操作只能在特权模式下才被允许,例如直接
改变模式和中断使能等。⽽且为了保证数据安全,⼀般MMU会对地址空间进⾏划分,只有特权模式才能访问所有的地址空间。⽽⽤户模式
如果需要访问硬件,必须切换到特权模式下,才允许访问硬件。
5. ARM处理器寄存器组织
ARM共有37个32位寄存器,其中31个为通⽤寄存器,6个为状态寄存器,包括R0-R15,R8_fiq-
R14_fiq,R13_svc,R14_svc,R13_abt,R14_abt,R13_irq,R14_irq,R13_und,R14_und,CPSR,SPSR_fiq,SPSR_svc,SPSR_abt,SPSR_irq,如图。
通⽤寄存器包括R0-R15,可以分为3类:
(1)未分组寄存器R0-R7
在所有运⾏模式下,未分组寄存器都指向同⼀个物理寄存器,他们未被系统⽤作特殊的⽤途。因此在中断或异常处理进⾏异常模式转
换时,由于不同的处理器运⾏模式均使⽤相同的物理寄存器,所以可能造成寄存器中数据的破坏。
(2)分组寄存器R8-R14
对于分组寄存器,他们每次所访问的物理寄存器都与当前的处理器运⾏模式相关。具体如上图。
R13常⽤作存放堆栈指针,⽤户也可以使⽤其他寄存器存放堆栈指针,但在Thumb指令集下,某些指令强制要求使⽤R13存放堆栈
指针。
R14称为链接寄存器(LR,Link Register),当执⾏⼦程序时,R14可得到R15(PC)的备份,执⾏完⼦程序后,⼜将R14的值
复制回PC,即使⽤R14保存返回地址。
(3)程序计数器PC(R15)
寄存器R15⽤作程序计数器(PC),在ARM状态下,位[1:0]为0,位[31:2]⽤于保存PC;在Thumb状态下,位[0]为0,位[31:1]
⽤于保存PC。
由于ARM体系结构采⽤了多级流⽔线技术,对于ARM指令集⽽⾔,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指
令的地址值加8个字节。
6. 程序状态寄存器CPSR和SPSR
CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运⾏模式下被访问,它包括条件标志位、中断禁⽌位、当前处理器模式标志位以及其他⼀些相关的控制和状态位。
每⼀种运⾏模式下都有⼀个专⽤的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发⽣时,SPSR⽤于保存当前CPSR的值,从异常退出时则可由SPSR来恢复CPSR。
由于⽤户模式和系统模式不属于异常模式,这两种状态下没有SPSR,因此在这两种状态下访问SPSR,结果是未知的。
CPSR保存数据的结构:
1)N(Negative):当⽤两个补码表⽰的带符号数进⾏运算时,N=1表⽰结果为负,N=0表⽰结果为正数或零
2)Z(Zero):Z=1表⽰运算结果为0,Z=0表⽰运算结果⾮零
3)C(Carry):有4种⽅法可以设置C的值:
(1)加法指令(包括⽐较指令CMP)
(2)当运算产⽣进位时(⽆符号数溢出),C=1,否则C=0
(3)减法运算(包括⽐较指令CMP)
(4)当运算产⽣了借位(⽆符号数溢出),C=0,否则C=1
对于包含移位操作的⾮加/减运算指令,C为移出值的最后⼀位。对于其他的⾮加/减运算指令,C的值通常不变。
4)V(Overflow):有2种⽅法设置V的值:
(1)对于加/减法运算指令,当操作数和运算结果为⼆进制的补码表⽰的带符号数时,V=1表⽰符号位溢出。
x86架构和arm架构区别(2)对于其他的⾮加减法运算指令,V的值通常不变。
5)I(Interrupt Request):I=1表⽰禁⽌响应irq,I=0表⽰允许响应
6)F(Fast Interrupt Request):F=1表⽰禁⽌响应fiq,F=0表⽰允许响应
7)T(Thumb):T=0表⽰当前状态位ARM状态,T=1表⽰为Thumb状态
8)M4-M0:表⽰当前处理器的⼯作模式,如图:
7. ⼯作模式的切换
(1)执⾏软中断(SWI)或复位命令(Reset)指令。如果在⽤户模式下执⾏SWI指令,CPU就进⼊管理(Supervisor)模式。当然,在其他模式下执⾏SWI,也会进⼊该模式,不过⼀般操作系统不会这么做,因为除了⽤户模式属于⾮特权模式,其他模式都属于特权模式。执⾏SWI指令⼀般是为了访问系统资源,⽽在特权模式下可以访问所有的系统资源。SWI指令⼀般⽤来为操作系统提供API接⼝。
(2)有外部中断发⽣。如果发⽣了外部中断,CPU就会进⼊IRQ或FIQ模式。
(3)CPU执⾏过程中产⽣异常。最典型的异常是由于MMU保护所引起的内存访问异常,此时CPU会切换到Abort模式。如果是⽆效指令,则会进⼊Undefined模式。
(4)有⼀种模式是CPU⽆法⾃动进⼊的,这种模式就是System模式,要进⼊System模式必须由程序员编写指令来实现。要进⼊System 模式只需改变CPSR的模式位为System模式对应的模式位即可。进⼊System模式⼀般是为了利⽤System模式和⽤户模式下的寄存器相同的特点,因此⼀般情况下,操作系统在通过SWI进⼊Supervisor模式后,做⼀些操作后,就进⼊System模式。
(5)在任何特权模式下,都可以通过修改CPSR的MODE域来进⼊其他模式。不过需要注意的是由于修改的CPSR是该模式下的影⼦CPSR,即SPSR,因此并不是实际的CPSR,所以⼀般的做法是修改影⼦CPSR,然后执⾏⼀个MOVS指令来恢复执⾏某个断点并切换到新模式。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论