数据加载中....
您的位置:电子电路网 >>技术文档 >>嵌入式系统
小白慎入,据说只有老司机才能看懂的ARM处理器的结构单元分析 评论(0) 收藏(0
浏览:981次
顶 [0人]
0%
踩 [0人]
0%
登陆即可参与评分,获得积分奖励! [评分一次获1分,每天最多得5分]
  • 详细说明

从编程人员的视角来看,arm核是由数据总线连接的功能单元组成,如下图所示:


数据通过数据总线流向处理器核心,这里的数据可以是将要执行的指令,也可以是数据项.上面的图是Von Neumann体系的arm核,数据项和指令共用同一总线.而h哈佛结构体系的arm核就会用两个不同的总线。
就像所有的RISC处理器,arm采用load-store体系结构.也就是说它含有两条不同的指令类型来出入处理器.loar指令将数据从内存拷贝到寄存器,store指令是将数据从寄存器拷贝到内存.没有直接操作内存中数据的数据处理指令.数据的处理离不开寄存器.
ARM指令一般有两个源寄存器,Rn和Rm,和一个目的寄存器,Rd.ARM的一个重要特性是Rm可以在送入ALU之前被桶型移位器做预处理,这样就会有很多形式的表达式和寻址方式.
下面介绍ARM处理器的几个关键分量:寄存器,当前程序状态寄存器和流水线
寄存器:
通用目的寄存器可以保存数据或者地址,由字母r和编号数字来表示,所有的寄存器都是32bit大小。
一共有18个活动的寄存器:16个数据寄存器和两个程序状态寄存器.数据寄存器由r0--r15表示。
ARM处理器有3个寄存器分配为特殊的功能:r13,r14,r15
r13通常用作栈指针(sp),存储当前处理器工作模式下的栈顶;
r14被称作链接寄存器(lr),当发生调用时存放调用子程序的返回地址;
r15被称作程序计数器(pc),保存被处理器预取的下一条指令的地址。
除了这16个数据寄存器,还有来年各个程序状态寄存器:cpsr和spsr.处理器的当前工作模式决定了哪些寄存器是可见的。
当前程序状态寄存器:
ARM核使用cpsr来显示和控制内部的操作.通用程序状态寄存器的内部如下:


cpsr分为四个域,每个域有8位的宽度:flags,status,extension和control.control域包含处理器模式和状态以及中断屏蔽位.flags域包含condition flags。
处理器模式:
处理器模式决定了当前哪些寄存器是可用的以及cpsr本身的访问权限.处理器模式分为特权模式和非特权模式:特权模式对cpsr有完全的读写控制而非特权模式
只能读cpsr的control域但是仍可以读写condition flags。
一共有7中处理器模式:六种特权模式(abort,fiq,irq,svc,system和undefined)和一种非特权模式(user)。
当试图访问内存失败时处理器会进入abort模式,fiq和irq对应ARM处理器的两种中断级别.svc是系统reset后进入的模式,也是os kernel工作的模式。
system模式是user模式的特殊版本,它有对cpsr的读写控制.undefined模式在处理器遇到未定以的指令或者不支持的操作时使用。
user模式在应用程序下使用。
Banked registers:


除了user模式,其它模式都可以通过直接写cpsr的模式位来改变处理器模式.当然,在异常或者中断到来时,硬件会自动切换模式.下类异常和中断会引起模式切换:
reset,irq,fiq,swi,data abort,prefetch abort和undefined instruction。
处理器模式:


需要注意的是:通过直接写cpsr来改变模式的方法不会将cpsr拷贝到spsr.只有在异常或中断发生时cpsr的值才会保存。
当ARM核上电时,处于svc特权模式.从特权模式开始是有用的:初始化代码完全控制cpsr来建立其他模式的堆栈。
cpsr中的bit T是表明指令簇用的是ARM指令集还是thumb指令集.T为1表示thumb指令集,T为0表示ARM指令集。
ARM指令集和thumb指令集的特性:


中断屏蔽位:
中断屏蔽位用来屏蔽处理器的特殊中断请求.在ARM核中有两种级别的中断请求:irq和fiq。
cpsr中的中断屏蔽位是第7位和第6位(I和F),当I或F设为1时irq或fiq就被屏蔽了。
condtion flags:
condition flags可以被比较操作和带S后缀的ALU操作来更新。


条件执行:
条件执行控制指令是否被ARM核执行.处理器会比较指令的条件属性和cpsr中的condition flags,如果匹配,该指令执行;否则该指令被忽略。


流水线:
RISC处理器用流水线机制来执行指令。ARM流水线中的指令只有在完全通过执行阶段才被处理。


上面这张图标明了流水线的使用和程序计数器pc.在执行阶段,pc总是指向该指令地址加上8字节,也就是说pc总是指向当前指令的下下条指令.当用pc来计算
相对偏移量时这点是很重要的,并且它也是所有流水线的特征。
异常 中断和向量表
当异常或中断发生时,处理器会将pc指向一个特殊的内存地址.该地址所在的地址范围称为向量表.向量表的入口是跳转指令,跳转到专门处理某个异常或中断的
子程序
存储器映射地址0x00000000是为向量表预留的.在某些处理器中向量表可以放在更高的地址,从0xffff0000开始.Linux等操作系统可以利用这个特性。
当异常或者中断发生时,处理器挂起正常的处理然后从向量表中加载指令.每个向量表的入口都包含指向特殊处理例程的跳转指令。


reset向量是处理器上电后执行的第一条指令,这条指令跳转到初始化代码处。
undefined instruction向量是当处理器不能对指令译码时使用的。
software interrupt向量执行SWI指令时使用的,SWI可以用来系统调用的实现。
prefetch abort向量发生在当没有访问权限的条件下试图获取该地址的指令时,异常发生在译码阶段。
data abort向量与prefetch abort类似,只不过是访问数据发生的异常。
interrupt request向量被外部硬件用来中断处理器的正常执行。只有在cpsr的相应位为0时才能发生。
fast interrupt request向量与irq类似,是为要求更短的中断响应时间的硬件保留的,只有在cpsr的相应位为0时才能发生。
 


1.png [ 110.8 KB ] [ 技术文献 ] [ 下载次数:0 ]

如无法正常下载,请点击这里报告问题,我们将在下一工作日内为您解决。

  • 发表评论
关闭
请您在通行证中登陆后再下载!
关闭

您当前的用户还没有激活


无法下载相关附件。


请查看您的注册邮箱获取激活信息或


单击此处


重新发送激活信息!


关闭

下载该附件需要积分

您的积分为 ,不足以支付!


您可以通过以下途径获取积分


1.上传文档可得5积分奖励


2.登陆可得2积分奖励,最多可得2分每天


3.评价文档可得1积分奖励,顶、踩,最多可得5分每天


查看更多积分获取的详细规则>>