ARM体系结构(一)

关于ARM体系结构的一些常识及基础:

arm体系结构 

=================================================================

arm体系结构特点:

1)、arm指令都是32位定长的;

2)、大量的寄存器

3)、Load/Store体系结构;

4)、多寄存器的Load/Store指令;

5)、在单时钟周期执行的单条指令中完成数据移位操作和ALU操作;

6)、通过变种和协处理来扩展ARM处理器的功能;

7)、扩展了16位的Thumb指令来提高代码密度。

 

=============================================

arm系列的命名:

这里只大概讲解,更多详细信息可以去三星半导体官网或者别的半导体官网查看。

ARM11系列:八级流水

架构:ARMv6(内核:ARM1136JF-S);

架构:ARMv6T2(内核:ARM1156T2F-S);

架构:ARMv6KZ(内核:ARM1176JZF-S);

架构:ARMv6K(内核:ARM11MPCore);

 

arm体系结构的变种:

Thumb指令集(T变种):指令长度16位。

长乘法指令(M变种):

增强型DSP指令(E变种):

Java加速器JazelleJ变种):

===================================================================================== 

arm处理器命名格式:(这个在项目硬件选取的时候很重要,要详细分析和查看,对后期项目开发有着决定性的作用)

ARM x y z T D M I E J F -S

x:序列

y2:带MMU, 4MPU6没有

z0:标准cache2:减小的cache, 6可变的cache

T:处理器支持Thumb指令集

D:支持JTAG调试器

M:支持长乘法指令

I:有嵌入式跟踪宏单元

E:支持增强指令(基于TDMI

J:支持JAVA硬件加速(Jazelle

F:支持向量浮点单元

S:可综合版本

 ====================================================

arm指令流水:

 三级流水线:

取指Fetch:微处理器取指单元从存储器中取得要执行的指令,存储到指令寄存器中。

译码Decode:对指令寄存器中的指令进行分析,确定要进行什么操作。

执行Execute:执行指令规定的操作,并按指令的要求保存操作结果。

五级流水的流水线级:

取指(fetch

译码(decode

执行(excute

缓冲/数据(buffer/data):如果需要则访问数据存储器,否则ALU只是简单的缓冲一个时钟周期,以便使所有的指令具有同样的流水线流程。

回写(write-back):将指令的结果回写到寄存器堆,包括任何从寄存器读出的数据。

=================================================================================

芯片使用的结构:

冯诺依曼结构:指令存储器地址和数据存储器地址指向同一个存储器的不同物理位置。因此指令和数据使用同一条数据总线,同一时刻只能取指或取数据;

哈佛结构:指令总线和数据总线分开,可以同时访问,其宽度可也可以不同。现在的ARM架构都是才用哈弗结构,X86现在用的是冯诺依曼结构。

 =================================================================================

arm存储系统

 arm存储有两种方式:大端,小端。

大端格式:字的最低有效字节存放在存储器的高地址。

小端字节:字的最低有效字节存放在存储器的低地址,其中ARM默认的是小端模式。

====================================================================================

 arm存储器层次:

1)、寄存器组;

2)、片上ram

3)、片上cache

4)、主存储器。

 ==================================================================

arm体系结构中可以使用的存储管理策略包括:

1)、多类型存储单元;

2)、cache

3)、写缓存;

4)虚拟内存地址。

 ===================================================================================

实现存储系统管理的方法:

使能cache,加快存储器的访问速度;

启动虚拟地址到物理地址的映射;

使用“域管理”策略,对存储单元的访问进行保护;

i/o映射地址空间的访问加以限制;

协处理器cp15 

=================================================================

arm编程模型(内核编程) 

====================================

arm的数据类型:

 arm支持以下三种数据类型:

字节:8

半字:16

字  32

 ===========================================

arm的工作模式:

 arm有七种工作模式:

 两个正常模式:

用户模式(User):普通程序执行模式,大部分程序执行在这种模式下。

系统模式(System):使用和User模式相同寄存器集的特权模式。

 五个异常模式:

快速中断模式(FIQ):当一个高优先级(fast)中断产生时将会进入这种模式。

外部中断模式(IRQ):当一个低优先级(normal)中断产生时将会进入这种模式。

管理模式(Supervisor):当复位或软中断(SWI)指令执行时进入这种模式。

数据访问终止模式(Abort):当存取异常时将会进入这种模式,用于虚拟存储或存储保护。

未定义模式(Undef):当执行未定义指令时进入这种模式,有时用于通过软件仿真协处理器硬件的工作模式。

 

 一个非特权模式:

用户模式(User

 六个特权模式:

系统模式(System

快速中断模式(FIQ

外部中断模式(IRQ

管理模式(Supervisor

数据访问终止模式(Abort

未定义模式(Undef

 ------------------------------------------------------

arm运行状态

 arm处理器有两种工作状态:

ARM状态:arm状态执行arm指令,pc值字对齐(32位)一开机启动就是ARM状态的;

Thumb状态:thumb状态下执行thumb指令,pc值半字对齐(16位)。

 工作状态的切换:

 使用指令切换

BX Rm

Rm[0] = 0     ARM状态

Rm[0] = 1     Thumb状态

 处理器自动切换处理器进行异常处理,若在Thumb状态,则进入ARM状态,异常处理返回后进入Thumb状态。

 -------------------------------------------------------------

arm寄存器

 ARM处理器有3732位长的寄存器;

31个通用寄存器(16个公共+15个私有);6个状态寄存器;

 不同模式下能访问的寄存器是不一样的。

 ---------------

通用寄存器:参与运算或保存运算的结果。

 以下有16个公共寄存器:

usr/system:R0——R12R13R14R15.(在用户模式和系统模式下有16个公用寄存器)。

 有特殊用途的通用寄存器(除了做通用寄存器,还有以下功能):

R13:堆栈指针寄存器SP

R14:链接寄存器LR。一般用来表示程序的出口。

R15:程序计数器PC,永远指向取指的指令地址。一般用来表示程序的入口。

 以下有15个私有寄存器:

irqR0......R12R15.(外部中断模式有两个私有的寄存器)

R13_irq

R14_irq

 svcR0......R12R15.(管理模式有两个私有的寄存器)

R13_svc

R14_svc

 abtR0......R12R15.(数据访问终止模式有两个私有的寄存器)

R13_abt

R14_abt

 undR0......R12R15.(未定义模式有两个私有的寄存器)

R13_und

R14_und

 fiqR0-R7R15.(快速中断模式有七个私有的寄存器)

R8_fiq

R9_fiq

R10_fiq

R11_fiq

R12_fiq

R13_fiq

R14_fiq

 

---------------------

状态寄存器psr

 一个:

cpsr:当前程序状态寄存器。(七种模式都能访问)。

 五个:

spsr:保存程序状态寄存器。(只有对应模式才能访问)。

spsr_irq

spsr_svc

spsr_fiq

spsr_abt

spsr_und

 cpsr/spsr寄存器格式:

条件代码标识    

31  30 29 28         7    6     5      4-0

N  Z  C  V               I     F     T      mode

 高四位:

N=1:负数或小于(negtive

Z=1:等于零(zero

C=1:有进位或借位扩展

V=1:有溢出

 后八位:

I=1IRQ禁止interrupt

F=1FIQ禁止fast

T=1/0Thumb/Arm状态位

 

mode后五位表示七种模式:

0b10000:用户模式

0b10001fiq模式

0b10010irq模式

0b10011:管理模式

0b10111:中止模式

0b11011:未定义模式

0b11111:系统模式

 

------------------------------------------------------------------

arm异常处理

 arm微处理器通过异常来响应程序正常执行过程中发生的意外事件。

 arm微处理器有七种类型的异常:

复位异常(Reset

未定义异常(Undefined

软件中断(SWI

预取异常(Prefetch Abort

数据异常(Data Abort

外部中断异常(IRQ

快速中断异常(FIQ

 当异常发生时,arm微处理器会把pc设置为一个特定的存储器地址,然后从这个地址取指令并执行。这个特定的地址称为异常向量,所有的异常向量地址构成了异常向量表。

 按优先级从高到低:

复位异常:1,管理模式(SVC),当处理器的复位引脚被加上有效服务信号时,产生复位异常。

数据异常:2,数据访问中止模式(Abort),处理器数据访问时,如果目标地址不存在或相应的地址空间没有访问权限则产生数据访问中止异常。

快速中断异常:3,快速中断模式(FIQ),处理器外部快速中断清求引脚有效且CPSR寄存器的F位为0,处理器产生快速中断请求。

正常中断异常:4,正常中断模式(IRQ),处理器外部正常中断请求引脚有效且CPSR寄存器的I位为0时,处理器产生正常中断请求。

预取异常:5,数据访问中止模式(Abort),当一个指令被从内存中预取时,由于某种原因而失败,如果它能到达执行状态这个异常才会产生。

未定义指令异常:6,未定义指令中止模式(Udef),当arm处理器或协处理器执行未定义的指令码时,产生未定义指令异常。

软中断异常:6,管理模式(SVC),当arm处理器或协处理器执行未定义的指令码时,产生未定义指令异常。

================================================================================================

 arm异常相应过程:

将当前程序状态寄存器CPSR的值保存到将要执行的异常对应的处理器工作模式的SPSR寄存器,修改当前程序状态寄存器CPSR的相应位。把将要执行的异常所对应的工作模式的LR寄存器设置成异常返回地址,将程序寄存器PC的值设置成该异常的向量地址,并从该地址取指令执行。

=================================================================================================================

 最后附上选型注意事项:

arm芯片选型

 芯片自身性能与集成度方面的因素:有无MMU芯片效率、内部存储器容量、USB接口、GPIO数量、中断控制器、IISIntegrate Interface of Sound)、nWAIT信号、RTC(Real Time Clock)、LCD控制器、PWM输出、ADC/DAC扩展总线、UARTIrDA多核考虑(ARM+DSP)(ARM+ARM);内置FPGA时钟计数器和看门狗、电源管理、DMA控制器等等。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值