您现在正在浏览:首页 > 职教文章 > 职教论文 > ARM7与ARM9的区别及ARM体系结构

ARM7与ARM9的区别及ARM体系结构

日期: 2010/12/8 浏览: 3 来源: 学海网收集整理 作者: 佚名

ARM7与ARM9的区别及ARM体系结构

ARM7与ARM9的区别

新一代的ARM9处理器,通过全新的设计,采用了更多的晶体管,能够达到两倍以上于ARM7处理器的处理能力。这种处理能力的提高是通过增加时钟频率和减少指令执行周期实现的。

1 时钟频率的提高

ARM7处理器采用3级流水线,而ARM9采用5级流水线。增加的流水线设计提高了时钟频率和并行处理能力。5级流水线能够将每一个指令处理分配到5个时钟周期内,在每一个时钟周期内同时有5个指令在执行。在同样的加工工艺下,ARM9TDMI处理器的时钟频率是ARM7TDMI的1.8~2.2倍。 2 指令周期的改进

指令周期的改进对于处理器性能的提高有很大的帮助。性能提高的幅度依赖于代码执行时指令的重叠,这实际上是程序本身的问题。对于采用最高级的语言,一般来说,性能的提高在30%左右。

2.1 loads 指令矛n stores指令

指令周期数的改进最明显的是loads指令和stores指令。从ARM7到ARM9这两条指令的执行时间减少了30%。指令周期的减少是由于ARM7和ARM9两种处理器内的两个基本的微处理结构不同所造成的。

(1)ARM9有独立的指令和数据存储器接口,允许处理器同时进行取指和读写数据。这叫作改进型哈佛结构。而ARM7只有数据存储器接口,它同时用来取指令和数据访问。

(2)5级流水线引入了独立的存储器和写回流水线,分别用来访问存储器和将结果写回寄存器。

以上两点实现了一个周期完成loads指令和stores指令。

2.2 互锁(interlocks)技术

当指令需要的数据因为以前的指令没有执行完而没有准备好就会产生管道互锁。当管道互锁发生时,硬件会停止这个指令的执行,直到数据准备好为止。虽然这种技术会增加代码执行时间,但是为初期的设计者提供了巨大的方便。编译器以及汇编程序员可以通过重新设计代码的顺序或者其他方法来减少管道互锁的数量。

2.3 分枝指令

ARM9和ARM7的分枝指令周期是相同的。而且ARM9TDMI和ARM9E-S并没有对分枝指令进行预测处理。

3 其它区别

ARM7内核是0.9MIPS/MHz的三级流水线和冯·诺伊曼结构;

ARM9内核是5级流水线,提供1.1MIPS/MHz的哈佛结构。

arm7没有mmu,arm720T是MMU的;

arm9是有mmu的,arm940T只有Memory protection unit.不是一个完整的MMU。

ARM7TDMI提供了非常好的性能-功耗比。它包含了THUMB指令集快速乘法指令和ICE调试技术的内核。

ARM9的时钟频率比ARM7更高,采用哈佛结构区分了数据总线和指令总线。

ARM9E从ARM7的3级流水线增加到了5级,ARM9E的流水线中容纳了更多的逻辑操作,但是每一级的逻辑操作却变得更为简单。比如原来ARM7的第三级流水,需要先内部读取寄存器、然后进行相关的逻辑和算术运算,接着处理结果回写,完成的动作非常复杂;而在ARM9E的5级流水中,寄存器读取、逻辑运算、结果回写分散在不同的流水当中,使得每一级流水处理的动作非常简洁。这就使得处理器的主频可以大幅度地提高。因为每一级流水都对应CPU的一个时钟周期,如果一级流水中的逻辑过于复杂,使得执行时间居高不下,必然导致所需的时钟周期变长,造成CPU的主频不能提升。所以流水线的拉长,有利于CPU主频的提高。在常用的芯片生产工艺下,ARM7一般运行在100MHz左右,而ARM9E则至少在200MHz以上。

像ARM926EJ和ARM946E这两个最常见的ARM9E处理器中,都带有一套存储器子系统,以提高系统性能和支持大型操作系统。一个存储器子系统包含一个MMU(存储器管理单元)或MPU(存储器保护单元)、高速缓存(Cache)和写缓冲(Write Buffer);CPU通过该子系统与系统存储器系统相连。

系统实时性考虑

带MMU和Cache的系统在实时性上不如一些简单的处理器,一个简单的办法是在需要的时候关闭MMU和Cache,这样就变成一个简单处理器了,可以马上提高系统实时性。当然很多情况下这不可行;在ARM的MMU和Cache设计中,有一个锁定的功能,就是说你可以指定某一块页表在MMU中不会被更新掉,某一段代码或数据可以在Cache中锁定而不会被刷新掉;程序员可以利用这个功能来支持那些实时性要求最高的代码,保证这些代码始终能够得到最快的响应和支持。

系统软件优化

在嵌入式系统开发中,很多系统软件优化的方法都是相同和通用的,多数情况下这种规则也适用于ARM9E架构上。最重要的是Cache的作用,Cache本身并不带来编程模型和接口的变化,但是如果我们考察Cache的行为,就能够发现对于软件优化,Cache是有比较大的影响的。

Cache在物理上就是一块高速SRAM,ARM9E的Cache组织宽度(cache line)都是4个word(也就是32个字节);Cache的行为受系统控制器控制而不是程序员,系统控制器会把最近访问存储器地址附近的内容复制到Cache中去,这样,当CPU访问下一个存储器单元的时候(这个访问既可能是取指,也可能是数据),可能这个存储器单元的内容已经在Cache里了,所以CPU不需要真的到主存储器上去读取内容,而直接读取Cache高速缓存上面的内容就可以了,从而加快了访问的速度。从Cache的工作原理我们可以看到,其实Cache的调度是基于概率的,CPU要访问的数据既可能在Cache中已经存在(Cache hit),也可能没有存在(Cache miss)。在Cache miss的情况下,CPU访问存储器的速度会比没有Cache的情况更坏,因为CPU除了要从存储器访问数据以外,还需要处理Cache hit或miss的判断,以及Cache内容的刷新等动作。只有当Cache hit带来的好处超过Cache miss带来的牺牲的时候,系统的整体性能才能得到提高,所以Cache的命中率成为一个非常重要的优化指标。

根据Cache行为的特点,我们可以直观地得到提高Cache命中率的一些方法,如尽可能把功能相关的代码和数据放置在一起,减少跳转次数;跳转经常会引起Cache miss。保持合适的函数大小,不要书写太多过小的函数体,因为线性的程序执行流程是最为Cache友好的。循环体最好放置在4个word对齐的地址,这样就能保证循环体在Cache中是行对齐的,并且占用最少的Cache行数,使得被多次调用的循环体得到更好的执行效率。

ARM9E处理器的DSP运算能力

伴随应用程序的多样化和复杂化,诸如多媒体、音视频功能在嵌入式系统里面也是全面开花。这些应用需要相当的DSP处理能力;如果是在传统的RISC架构上实现这些算法,所需的资源(频率和存储器等)会非常不经济。ARM9E处理器一个非常重要的优势就是拥有轻量级的DSP处理能力,以非常小的成本(CPU增加功能需要增加硬件)换来了非常实用的DSP性能。

因为CPU的DSP能力并不直接反映在像DMIPS这样的评测指标中,同时像以前的ARM7处理器中也没有类似的概念;所以这一点对所有使用ARM9E处理器进行开发的人来说,都是需要注意的一个要点。

在从ARM7到ARM9的平台转变过程中,有一件事情是非常值得庆幸的,即ARM9E能够完全地向后兼容ARM7上的软件;并且开发人员面对的编程模型和架构基础也保持一致。但是毕竟ARM9E中增加了很多新的特性,为了充分利用这些新的资源,把系统性能优化好,需要我们对ARM9E做更多深入地了解。

二、ARM体系结构

ARM9结构及特点

以ARM9E-S为例介绍ARM9处理器的主要结构及其特点。ARM9E-S的结构如图4所示。其主要特点如下:

(1)32bit定点RISC处理器,改进型ARM/Thumb代码交织,增强性乘法器设计。支持实时(real-time)调试;

(2)片内指令和数据SRAM,而且指令和数据的存储器容量可调;

(3)片内指令和数据高速缓冲器(cache)容量从4K字节到1M字节;

(4)设置保护单元(protcction unit),非常适合嵌入式应用中对存储器进行分段和保护;

(5)采用AMBA AHB总线接口,为外设提供统一的地址和数据总线;

(6)支持外部协处理器,指令和数据总线有简单的握手信令支持;

(7)支持标准基本逻辑单元扫描测试方法学,而且支持BIST(built-in-self-test);

(8)支持嵌入式跟踪宏单元,支持实时跟踪指令和数据



ARM微处理器的编程模型

ARM微处理器的工作状态

从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:

- 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;

- 第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。

当ARM微处理器执行32位的ARM指令集时,工作在ARM状态;当ARM微处理器执行16位的Thumb指令集时,工作在Thumb状态。在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。

状态切换方法:

ARM指令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,但ARM微处理器在开始执行代码时,应该处于ARM状态。

进入Thumb状态:当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。

进入ARM状态:当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。

ARM体系结构的存储器格式

ARM体系结构将存储器看作是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字数据,从第四个字节到第七个字节放置第二个存储的字数据,依次排列。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB(232字节)。

ARM体系结构可以用两种方法存储字数据,称之为大端格式和小端格式,具体说明如下:

大端格式:

在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,如图2.1所示:

图2.1 以大端格式存储字数据

小端格式:

与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。如图2.2所示:

图2. 2 以小端格式存储字数据

指令长度及数据类型

ARM微处理器的指令长度可以是32位(在ARM状态下),也可以为16位(在Thumb状态下)。

ARM微处理器中支持字节(8位)、半字(16位)、字(32位)三种数据类型,其中,字需要4字节对齐(地址的低两位为0)、半字需要2字节对齐(地址的最低位为0)。

处理器模式

ARM微处理器支持7种运行模式,分别为:

─ 用户模式(usr): ARM处理器正常的程序执行状态

─ 快速中断模式(fiq): 用于高速数据传输或通道处理

─ 外部中断模式(irq): 用于通用的中断处理

─ 管理模式(svc): 操作系统使用的保护模式

─ 数据访问终止模式(abt): 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。

─ 系统模式(sys): 运行具有特权的操作系统任务。

─ 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。

大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。

除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(Privileged Modes);其中除去用户模式和系统模式以外的5种又称为异常模式(Exception Modes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。

寄存器组织

ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个或两个状态寄存器都是可访问的。

ARM状态下的寄存器组织

通用寄存器:

通用寄存器包括R0~R15,可以分为三类:

─ 未分组寄存器R0~R7;

─ 分组寄存器R8~R14

─ 程序计数器PC(R15)

未分组寄存器R0~R7:

在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,因此,在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。

分组寄存器R8~R14

对于分组寄存器,他们每一次所访问的物理寄存器与处理器当前的运行模式有关。

对于R8~R12来说,每个寄存器对应两个不同的物理寄存器,当使用fiq模式时,访问寄存器R8_fiq~R12_fiq;当使用除fiq模式以外的其他模式时,访问寄存器R8_usr~R12_usr。

对于R13、R14来说,每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。

采用以下的记号来区分不同的物理寄存器:

R13_

R14_

其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。

寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。

由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。

R14也称作子程序连接寄存器(Subroutine Link Register)或连接寄存器LR。当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。其他情况下,R14用作通用寄存器。与之类似,当发生中断或异常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。

寄存器R14常用在如下的情况:

在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值拷贝给R14,执行完子程序后,又将R14的值拷贝回PC,即可完成子程序的调用返回。以上的描述可用指令完成:

1、执行以下任意一条指令:

MOV PC,LR

BX LR

2、在子程序入口处使用以下指令将R14存入堆栈:

STMFD SP!,{,LR}

对应的,使用以下指令可以完成子程序返回:

LDMFD SP!,{,PC}

R14也可作为通用寄存器。

程序计数器PC(R15)

寄存器R15用作程序计数器(PC)。在ARM状态下,位[1:0]为0,位[31:2]用于保存PC;在Thumb状态下,位[0]为0,位[31:1]用于保存PC;虽然可以用作通用寄存器,但是有一些指令在使用R15时有一些特殊限制,若不注意,执行的结果将是不可预料的。在ARM状态下,PC的0和1位是0,在Thumb状态下,PC的0位是0。

R15虽然也可用作通用寄存器,但一般不这么使用,因为对R15的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。

由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。

图2.3 ARM状态下的寄存器组织

在ARM状态下,任一时刻可以访问以上所讨论的16个通用寄存器和一到两个状态寄存器。在非用户模式(特权模式)下,则可访问到特定模式分组寄存器,图2.3说明在每一种运行模式下,哪一些寄存器是可以访问的。

寄存器R16:

寄存器R16用作CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。

每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。

由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。

Thumb状态下的寄存器组织

Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集,程序可以直接访问8个通用寄存器(R7~R0)、程序计数器(PC)、堆栈指针(SP)、连接寄存器(LR)和CPSR。同时,在每一种特权模式下都有一组SP、LR和SPSR。图2.4表明Thumb状态下的寄存器组织。

图2.4 Thumb状态下的寄存器组织

Thumb状态下的寄存器组织与ARM状态下的寄存器组织的关系:

─ Thumb状态下和ARM状态下的R0~R7是相同的。

─ Thumb状态下和ARM状态下的CPSR和所有的SPSR是相同的。

─ Thumb状态下的SP对应于ARM状态下的R13。

─ Thumb状态下的LR对应于ARM状态下的R14。

─ Thumb状态下的程序计数器对应于ARM状态下R15

以上的对应关系如图2.5所示:

图2.5 Thumb状态下的寄存器组织

访问THUMB状态下的高位寄存器(Hi-registers):

在Thumb状态下,高位寄存器R8~R15并不是标准寄存器集的一部分,但可使用汇编语言程序受限制的访问这些寄存器,将其用作快速的暂存器。使用带特殊变量的MOV指令,数据可以在低位寄存器和高位寄存器之间进行传送;高位寄存器的值可以使用CMP和ADD指令进行比较或加上低位寄存器中的值。

程序状态寄存器

ARM体系结构包含一个当前程序状态寄存器(CPSR)和五个备份的程序状态寄存器(SPSRs)。备份的程序状态寄存器用来进行异常处理,其功能包括:

─ 保存ALU中的当前操作信息

─ 控制允许和禁止中断

─ 设置处理器的运行模式

程序状态寄存器的每一位的安排如图2.6所示:

图2.6 程序状态寄存器格式

条件码标志(Condition Code Flags)

N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。

在ARM状态下,绝大多数的指令都是有条件执行的。

在Thumb状态下,仅有分支指令是有条件执行的。

条件码标志各位的具体含义如表2-1所示:

表2-1 条件码标志的具体含义

控制位

PSR的低8位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。如果处理器运行特权模式,这些位也可以由程序修改。

─ 中断禁止位I、F:

I=1 禁止IRQ中断;

F=1 禁止FIQ中断。

─ T标志位:该位反映处理器的运行状态。

对于ARM体系结构v5及以上的版本的T系列处理器,当该位为1时,程序运行于Thumb状态,否则运行于ARM状态。

对于ARM体系结构v5及以上的版本的非T系列处理器,当该位为1时,执行下一条指令以引起为定义的指令异常;当该位为0时,表示运行于ARM状态。

─ 运行模式位M[4:0]:M0、M1、M2、M3、M4是模式位。这些位决定了处理器的运行模式。具体含义如表2-2所示:

表2-2 运行模式位M[4:0]的具体含义

由表2-2可知,并不是所有的运行模式位的组合都是有效地,其他的组合结果会导致处理器进入一个不可恢复的状态。

保留位

PSR中的其余位为保留位,当改变PSR中的条件码标志位或者控制位时,保留位不要被改变,在程序中也不要使用保留位来存储数据。保留位将用于ARM版本的扩展。

异常(Exceptions)

当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。

ARM体系结构中的异常,与8位/16位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。

ARM体系结构所支持的异常类型

ARM体系结构所支持的异常及具体含义如表2-3所示。

表2-3 ARM体系结构所支持的异常

对异常的响应

当一个异常出现以后,ARM微处理器会执行以下几步操作:

1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常SWI,指令 MOV PC,R14_svc总是返回到下一条指令,不管SWI是在ARM状态执行,还是在Thumb状态执行。

2、将CPSR复制到相应的SPSR中。

3、根据异常类型,强制设置CPSR的运行模式位。

4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。

还可以设置中断禁止位,以禁止中断发生。

如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。

ARM微处理器对异常的响应过程用伪码可以描述为:

R14_ = Return Link

SPSR_ = CPSR

CPSR[4:0] = Exception Mode Number

CPSR[5] = 0 ;当运行于ARM工作状态时

If == Reset or FIQ then

;当响应FIQ异常时,禁止新的FIQ异常

CPSR[6] = 1

CPSR[7] = 1

PC = Exception Vector Address

从异常返回

异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:

1、将连接寄存器LR的值减去相应的偏移量后送到PC中。

2、将SPSR复制回CPSR中。

3、若在进入异常处理时设置了中断禁止位,要在此清除。

可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。

各类异常的具体描述

FIQ(Fast Interrupt Request)

FIQ异常是为了支持数据传输或者通道处理而设计的。在ARM状态下,系统有足够的私有寄存器,从而可以避免对寄存器保存的需求,并减小了系统上下文切换的开销。

若将CPSR的F位置为1,则会禁止FIQ中断,若将CPSR的F位清零,处理器会在指令执行时检查FIQ的输入。注意只有在特权模式下才能改变F位的状态。

可由外部通过对处理器上的nFIQ引脚输入低电平产生FIQ。不管是在ARM状态还是在Thumb状态下进入FIQ模式,FIQ处理程序均会执行以下指令从FIQ模式返回:

SUBS PC,R14_fiq ,#4

该指令将寄存器R14_fiq的值减去4后,复制到程序计数器PC中,从而实现从异常处理程序中的返回,同时将SPSR_mode寄存器的内容复制到当前程序状态寄存器CPSR中。

IRQ(Interrupt Request)

IRQ异常属于正常的中断请求,可通过对处理器的nIRQ引脚输入低电平产生,IRQ的优先级低于FIQ,当程序执行进入FIQ异常时,IRQ可能被屏蔽。

若将CPSR的I位置为1,则会禁止IRQ中断,若将CPSR的I位清零,处理器会在指令执行完之前检查IRQ的输入。注意只有在特权模式下才能改变I位的状态。

不管是在ARM状态还是在Thumb状态下进入IRQ模式,IRQ处理程序均会执行以下指令从IRQ模式返回:

SUBS PC , R14_irq , #4

该指令将寄存器R14_irq的值减去4后,复制到程序计数器PC中,从而实现从异常处理程序中的返回,同时将SPSR_mode寄存器的内容复制到当前程序状态寄存器CPSR中。

ABORT(中止)

产生中止异常意味着对存储器的访问失败。ARM微处理器在存储器访问周期内检查是否发生中止异常。

中止异常包括两种类型:

─ 指令预取中止:发生在指令预取时。

─ 数据中止:发生在数据访问时。

当指令预取访问存储器失败时,存储器系统向ARM处理器发出存储器中止(Abort)信号,预取的指令被记为无效,但只有当处理器试图执行无效指令时,指令预取中止异常才会发生,如果指令未被执行,例如在指令流水线中发生了跳转,则预取指令中止不会发生。

若数据中止发生,系统的响应与指令的类型有关。

当确定了中止的原因后,Abort处理程序均会执行以下指令从中止模式返回,无论是在ARM状态还是Thumb状态:

SUBS PC, R14_abt, #4 ;指令预取中止

SUBS PC, R14_abt, #8 ;数据中止

以上指令恢复PC(从R14_abt)和CPSR(从SPSR_abt)的值,并重新执行中止的指令。

Software Interruupt(软件中断)

软件中断指令(SWI)用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令从SWI模式返回,无论是在ARM状态还是Thumb状态:

MOV PC , R14_svc

以上指令恢复PC(从R14_svc)和CPSR(从SPSR_svc)的值,并返回到SWI的下一条指令。

Undefined Instruction(未定义指令)

当ARM处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件仿真扩展ARM或Thumb指令集。

在仿真未定义指令后,处理器执行以下程序返回,无论是在ARM状态还是Thumb状态:

MOVS PC, R14_und

以上指令恢复PC(从R14_und)和CPSR(从SPSR_und)的值,并返回到未定义指令后的下一条指令。

异常进入/退出小节

表2-4总结了进入异常处理时保存在相应R14中的PC值,及在退出异常处理时推荐使用的指令。

表2-4 异常进入/退出

注意:

1、在此PC应是具有预取中止的BL/SWI/未定义指令所取的地址。

2、在此PC是从FIQ或IRQ取得不能执行的指令的地址。

3、在此PC是产生数据中止的加载或存储指令的地址。

4、系统复位时,保存在R14_svc中的值是不可预知的。

异常向量(Exception Vectors)

表2-5显示异常向量地址。

表2-5 异常向量表

异常优先级(Exception Priorities)

当多个异常同时发生时,系统根据固定的优先级决定异常的处理次序。异常优先级由高到低的排列次序如表2-6所示。

表2-6 异常优先级

应用程序中的异常处理

当系统运行时,异常可能会随时发生,为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理,采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序,当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。

S3C4510B体系结构

S3C4510B及片内外围简介

在进行系统设计之前,有必要对ARM Linux评估开发板上的ARM芯片S3C4510B及其工作原理进行比较详细的介绍,读者只有对该微处理器的工作原理有了较详细的了解,才能进行特定应用系统的设计。

Samsung公司的S3C4510B是基于以太网应用系统的高性价比16/32位RISC微控制器,内含一个由ARM公司设计的16/32位ARM7TDMI RISC处理器核,ARM7TDMI为低功耗、高性能的16/32核,最适合用于对价格及功耗敏感的应用场合。

除了ARM7TDMI核以外,S3C4510B比较重要的片内外围功能模块包括:

2个带缓冲描述符(Buffer Descriptor)的HDLC通道

2个UART通道

2个GDMA通道

2个32位定时器

18个可编程的I/O口。

片内的逻辑控制电路包括:

中断控制器

DRAM/SDRAM控制器

ROM/SRAM和FLASH控制器

系统管理器

一个内部32位系统总线仲裁器

一个外部存储器控制器。

S3C4510B结构框图如图5.2.1所示。

图 5.2.1 S3C4510B结构框

S3C4510B的特性描述如下:

体系结构

用于嵌入式以太网应用的集成系统

全16/32的RISC架构

支持大、小端模式。内部架构为大端模式,外部存储器可为大、小端模式

内含效率高、功能强的ARM7TDMI处理器核

高性价比、基于JTAG接口的调试方案

边界扫描接口

系统管理器

支持ROM/SRAM、FLASH、DRAM和外部I/O以8/16/32位的方式操作

带总线请求/应答引脚的外部总线控制器

支持EDO/常规或SDRAM存储器

可编程的访问周期(可设定0~7个等待周期)

4字的写缓冲

高性价比的从存储器到外围的DMA接口

一体化的指令/数据Cache

一体化的8K Cache

支持LRC(近期最少使用)替换算法

Cache可配置为内部SRAM

IIC接口

仅支持主控模式

串行时钟由波特率发生器生成

Ethernet控制器

带猝发模式的DMA引擎

DMA发送/接收缓冲区(256字节发送,256字节接收)

MAC发送/接收FIFO缓冲区(80字节发送,16字节接收)

数据对准逻辑

支持端模式变换

100M/10Mbps的工作速率

与IEEE802.3标准完全兼容

提供MII和7线制10Mbps接口

站管理信号生成

片内CAM(可达21个目的地址)

带暂停特性的全双工模式

支持长/短包模式

包拆装PDA生成

HDLC (High-Level Data Link Control) 高层数据链路协议  

HDLC协议特征:标志检测与同步;零插入与删除;空闲检测和发送;FCS生成和检测(16位);终止检测与发送

地址搜索模式(可扩展到四字节)

可选择CRC模式或非CRC模式

用于时钟恢复的数字PLL模块

波特率生成器

发送和接收支持NRZ/NRZI/FM/曼切斯特数据格式

回环与自动回波模式

8字的发送和接收FIFO

可选的1字或4字数据传送方式

数据对准逻辑

可编程中断

Modem接口

高达10Mbps的工作速率

基于8位位组的HDLC帧长度

每个HDLC有2通道DMA缓冲描述符用于发送和接收

DMA控制器

用于存储器到存储器、存储器到UATR、UATR到存储器数据传送的2通道通用DMA控制器,不受CPU干预

可由程序或外部DMA请求启动

可增减源地址或目的地址,无论8位、16位或32位数据传输

4种数据猝发模式

UART

2个可工作于DMA方式或中断方式的UART模块

支持5、6、7、8位的串行数据发送和接收

波特率可编程

1位或2位停止位

奇/偶校验

间隔信号的生成与检测

奇偶校验、覆盖和帧错误检测

×16时钟模式

支持红外发送和接收

定时器

2个可编程32位定时器

间隔模式或触发模式工作

可编程I/O口

18个可编程I/O口

可分别配置为输入模式、输出模式或特殊功能模式

中断控制器

21个中断源,包括4个外部中断源

正常中断或快速中断模式(IRQ、FIQ)

基于优先级的中断处理

PLL

外部时钟可由片内PLL倍频以提高系统时钟

输入频率范围:10~40MHz

输出频率可以是输入时钟的5倍

工作电压

3.3V,偏差不超过5%

工作温度

0oC~70oC

工作频率

最高为50MHz

封装形式

208脚QFP封装

S3C4510B的引脚分布及信号描述

图5.2.2是S3C4510B的引脚分布图

图5.2.2 S3C4510B的引脚分布图

各引脚信号描述如下:

表5-2-1 S3C4510B的引脚信号描述

CPU内核概述及特殊功能寄存器(Special Registers)

CPU内核概述

S3C4510B 的CPU内核是由ARM公司设计的通用32位ARM7TDMI微处理器核,图5.2.3为ARM7TDMI核的结构框图。整个内核架构基于RISC(Reduced Instruction Set Computer)规则。与CISC(Complex Instruction Set Computer)系统相比较,RISC架构的指令集和相关的译码电路更简洁高效。

ARM7TDMI处理器区别于其他ARM7处理器的一个重要特征是其独有的称之为Thumb的架构策略。该策略为基本ARM架构的扩展,由36种基于标准32位ARM指令集、但重新采用16位宽度优化编码的指令格式构成。

由于Thumb指令的宽度只为ARM指令的一半,因此能获得非常高的代码密度。当Thumb指令被执行时,其16位的操作码被处理器解码为等效的32位标准ARM指令,然后ARM处理器核就如同执行32位的标准ARM指令一样执行16位的Thumb指令。也即是Thumb架构为16位的系统提供了一条获得32位性能的途径。

ARM7TDMI内核既能执行32位的ARM指令集,又能执行16位的Thumb指令集,因此允许用户以子程序段为单位,在同一个地址空间使用Thumb指令集和ARM指令集混合编程,采用这种方式,用户可以在代码大小和系统性能上进行权衡,从而为特定的应用系统找到一个最佳的编程解决方案。

图5.2.3 ARM7TDMI核的结构框图

32位的ARM指令集由13种基本的指令类型组成,可分为如下四大类:

- 4类分支指令用于控制程序的执行流程、指令的特权等级和在ARM代码与Thumb代码之间进行切换。

- 3类数据处理指令用于操作片上的ALU、桶型移位器、乘法器以完成在31个32位的通用寄存器之间的高速数据处理。

- 3类加载/存储指令用于控制在存储器和寄存器之间的数据传输。一类为方便寻址进行了优化;另一类用于快速的上下文切换;第三类用于数据交换。

- 3类协处理器指令用于控制外部的协处理器,这些指令以开放统一的方式扩展用于片外功能指令集。

几乎所有的32位ARM指令都可以条件执行。

16位的Thumb指令集为32位ARM指令集的扩展,共包含36种指令格式,可分为如下四个功能组:

- 4类分支指令

- 12类数据处理指令,为标准ARM数据处理指令的一个子集

- 8类加载/存储寄存器指令

- 4类加载/存储乘法指令

在同一种处理模式下,每一条16位的Thumb指令都有对应的32位ARM指令。

工作状态

如前所述,ARM7TDMI内核支持两种工作状态,并总是处于其中一种工作状态。工作状态可通过软件或异常处理进行切换:

- ARM状态: 此时执行32位字对齐的ARM指令。

- Thumb状态: 此时执行16位半字对齐的Thumb指令。

操作模式:

ARM7TDMI内核支持7种操作模式:

- 用户模式:正常的程序执行状态。

- FIQ(Fast Interrupt Request)模式:用于支持特殊的数据传送与通道处理。

- IRQ(Interrupt ReQuest)模式:用于通用的中断处理。

- 管理模式:一种用于操作系统的保护模式。

- 中止模式:当数据或指令预取中止时进入该模式

- 系统模式:一种用于操作系统的特权用户模式。

- 未定义模式:当执行了未定义指令时进入该模式。

可用软件控制操作模式的切换,同时外部的中断和异常处理也会导致操作模式的切换。

绝大多数的用户应用程序运行在用户模式。

当系统响应中断或异常、或访问受保护的系统资源时,处理器会进入特权模式(除用户模式以外的所有模式)。

寄存器

S3C4510B内建37个32位的寄存器:31个通用寄存器,6个状态寄存器,但并不是所有的寄存器都能总是被访问到。在某一时刻寄存器能否访问由处理器的当前工作状态和操作模式决定。

根据微处理器内核的当前工作状态,可分别访问ARM状态寄存器集和Thumb状态寄存器集:

- ARM状态寄存器集包含16个可以直接访问的寄存器:R0~R15。除R15以外,其余的寄存器为通用寄存器,可用于存放地址或数据值。另外一个(第17个)寄存器是当前程序状态寄存器CPSR,用于保存状态信息。

- Thumb状态寄存器集是ARM状态寄存器集的一个子集。可以访问的寄存器有:8个通用寄存器R0~R7,程序计数器PC、堆栈指针寄存器SP、连接寄存器LR和当前程序状态寄存器CPSR。

在每一种特权模式下,都有对应的分组堆栈指针寄存器SP、连接寄存器LR和备份的程序状态寄存器SPSR。

Thumb状态寄存器集与ARM状态寄存器集的对应关系如下:

- Thumb状态下R0~R7寄存器与ARM状态下R0~R7寄存器是相同的。

- Thumb状态下的CPSR和SPSRs与ARM状态下的CPSR和SPSRs是相同的。

- Thumb状态下的SP、LR和PC直接对应ARM状态寄存器R13、R14和R15。

在Thumb状态下,寄存器R8~R15不属于标准寄存器集的一部分,但在必要的情况下,用户可以通过汇编语言程序访问他们,用作快速的临时存储将单元。

关于寄存器的详细描述,可参阅第二章编程模型的相关内容。

异常

当正常的程序执行流程被中断时,称为产生了异常。例如程序执行转向响应一个外设的中断请求。在优先处理异常时,处理器的当前状态必须保留,以便在异常处理完成之后程序流程能正常返回。并且,多个异常可能会同时发生。

为处理异常,S3C4510B使用内核的分组寄存器来保存当前状态,原来的PC值和CPSR的内容被拷贝到对应的R14(LR)和SPSR寄存器中,PC和CPSR中的模式位被调整到相应被处理的异常类型的值。

S3C4510B的内核支持7种类型的异常,每一种异常都有其固定的优先级和对应的特权处理器模式,如表5-2-2所示:

表5-2-2 S3C4510B的异常类型

S3C4510B的特殊功能寄存器

表5-2-3为S3C4510B片内的特殊功能寄存器描述。

表5-2-3 S3C4510B的特殊功能寄存器

S3C4510B的系统管理器(System Manager)

概述

S3C4510B 微处理器的系统管理器(System Manager)在整个系统工作中起至关重要作用,只有清楚的了解系统管理器在系统中的作用及工作原理,才能进行程序设计和系统开发,但同时,相对于8位或16位微处理器而言,S3C4510B系统管理器的工作原理又是比较复杂的,因此需要读者认真细致的阅读该部分内容,并通过编程实践加以掌握。

S3C4510B 微处理器的系统管理器具有以下功能:

基于固定的优先级,仲裁来自几个主功能模块的系统总线访问请求。

为访问外部存储器提供必需的存储器控制信号。例如DMA控制器或CPU要访问DRAM组的某地址,则系统管理器的DRAM控制器就会产生必需的normal/EDO 或SDRAM访问信号。可由SYSCFG[31]设定访问normal/EDO或SDRAM的信号。

为S3C4510B和ROM/SRAM,以及外部I/O组之间的总线通信提供必需的信号。

为外部存储器的数据总线和内部数据总线之间的数据流协调总线宽度的差别。

对外部存储器和I/O设备,S3C4510B同时支持小端模式和大端模式的访问方式。

通过产生外部总线请求信号,外设可访问S3C4510B的外部总线。另外,S3C4510B可通过插入等待周期(WAIT信号)访问低速外设。WAIT信号由外设产生,可延长CPU的存储器访问周期。

系统管理器寄存器(System Manager Registers)

系统管理器使用一组专用的特殊功能寄存器来控制外部存储器的读/写操作,通过对该组特殊功能寄存器编程,可以设定:

存储器的类型

外部数据总线宽度及访问周期

定时的控制信号(例如RAS和CAS)

存储器组的定位

存储器组的大小

在标准系统配置中访问外设必需的控制信号、地址信号和数据信号,系统管理器通过设置特殊功能寄存器的值来控制其产生和处理。特殊功能寄存器也被用于控制对ROM/SRAM/Flash组的访问,同时还能控制对多达四个DRAM 组和四个外部I/O组以及一个特殊功能寄存器映射区域的访问。

每个存储器组在组内通过基指针(Base Pointer)寻址,其寻址范围是64KB(16位),而基指针本身为10位。因此S3C4510B的最大可寻址范围是226=64MB(或16M字)。

在进行系统存储器映射时,注意两个相连的存储器组的地址空间决不能重叠。图5.2.4 为S3C4510B系统存储器映射。

图5.2.4 S3C4510B系统存储器映射

系统存储器映射(System Memory Map)

关于S3C4510B系统存储器映射,以下是几个应当注意的重点:

- S3C4510B采用统一编址的方式,将系统的片外存储器、片内存储器、特殊功能寄存器和外部的I/O设备,都映射到64MB的地址空间,同时,为便于管理,又将地址空间分为如图5.2.4所示的若干个存储器组,可以通过配置包含基指针(Base Pointer)和尾指针(End Pointer)的特殊功能寄存器,设定每个存储器组的大小和位置。用户可利用基指针和尾指针设置连续的存储器映射。具体操作如下:即把某个存储器组的基指针的地址设置为前一个存储器组的尾指针的地址。请注意在设定存储器组的控制寄存器时,每两个相连的存储器组的地址空间决不能重叠,即使这些组被禁用。

- 四个外部I/O组被定义在一个连续的地址空间中。只需要将基指针分配给外部I/O组0,外部I/O组1的起始地址就等于外部I/O组0的起始地址+16KB,同理,外部I/O组2的起始地址就等于外部I/O组0的起始地址+32KB,外部I/O组3的起始地址就等于外部I/O组0的起始地址+48KB。因此,四个外部组的总的连续的可寻址范围被定义在外部I/O组0的起始地址+64KB的地址空间。在整个可寻址的地址空间中,外部I/O组的起始地址并没有被固定。通过设定组的基指针,可以设定一个具体的组起始地址,但总的地址空间是连续的64KB。

- 每个组的起始物理地址为“基指针左移16位”, 每组末尾的物理地址为“尾指针左移16位 - 1”。

在上电或系统复位后,所有组的地址指针寄存器都被初始化到其缺省值。这时,所有的组指针(ROM/SRAM/Flash组0和特殊功能寄存器组除外)都被清零。这意味着:除ROM/SRAM/Flash组0和特殊功能寄存器组以外,所有其它组在系统启动时都是未被定义的。这一点很重要,用户在进行程序设计时,一般总是要首先通过配置相应寄存器,定义系统的存储空间。

ROM/SRAM/Flash组0的尾指针和基指针的复位值分别为0x200和0x0。这意味着系统复位后将自动定义ROM/SRAM/Flash组0的地址空间为32MB,实际地址范围为0x0000,0000~0x0200,0000-1。ROM/SRAM/Flash组0的这种初始化定义使得系统在上电或复位后,将系统的控制权交给了由用户编写的启动代码,当然这些启动代码应存放在外部ROM中的,并映射到ROM/SRAM/Flash组0。当起动代码执行时,它执行各种系统初始化任务,并根据应用系统的外部存储器和设备的实际情况来重新配置系统的存储器映射。

特殊功能寄存器组的基址针在系统复位时被初始化为0x3FF0000,一般不再改动。

图5.2.5是在系统启动或复位时的系统存储器映射。

图5.2.5 系统复位时的存储器映射

表5-2-4为系统管理器对应的寄存器,系统的存储器映射可通过对这些寄存器的配置来完成。

表5-2-4 系统管理器对应的寄存器

根据外部存储器的宽度决定外部地址译码方法(External Address Translation Method Depends on the Width of External Memory)

与某些ARM芯片不同,S3C4510B应用系统的地址总线的连接方式相对简单。由于ARM7TDMI采用32位地址总线,所有的地址都可以看作字节地址,地址总线提供4GB的线性寻址空间,当发出字访问信号时,存储系统忽略低2位A[1:0],当发出半字访问信号时,存储系统忽略低位A[0],基于以上原因,某些ARM系统在与存储器接口时,地址总线的连接需要错开,而S3C4510B则通过一个片内的地址总线生成部件,隐藏该过程,用户在设计系统时,只需将S3C4510B的地址总线与存储器的地址总线一一对应连接即可(即S3C4510B的A[0]与外部存储器的A[0]对齐)。表5-2-5和图5.2.6说明了该过程。

表5-2-5 地址总线生成

图5.2.6 地址总线变换

总线仲裁(Bus Arbitration)

对于S3C4510B微处理器,“系统总线”是指连接各个功能模块的地址和数据总线。S3C4510B的片内功能模块和片外设备都可请求总线控制权,然后占用总线以完成数据的传输。但S3C4510B在系统设计时,任一时刻只允许一个部件占用总线,因此,当有两个或两个以上的片内功能模块或外设同时请求总线控制权时,就要求总线控制器进行仲裁。

当某一个片内功能模块或外设取得总线控制权时,其他的总线请求被悬挂(等候处理)直到原来的总线控制设备释放总线控制权时才能被响应。

为便于总线仲裁,S3C4510B内部的每一个功能模块都设置了优先级,总线控制器就根据这个固定的优先级对各个模块的总线请求进行仲裁。通常,总线控制权总是分配给优先级较高的功能模块。表5-2-6列出了优先级。

表5-2-6 总线仲裁优先级

注:S3C4510B的内部功能模块分为A、B两组,在每个组内,其优先级根据设置固定。

外部总线控制(External Bus Mastership)

S3C4510B微处理器能检测并响应由外部总线主控器产生的总线请求信号(ExtMREQs)。当CPU发出外部总线应答信号(ExtMACK)后,总线控制权就交给外部总线主控器,此时外部总线请求信号应继续有效。

当S3C4510B的外部总线应答信号有效时,其存储器接口处于高阻状态,以便外部总线主控器能驱动外部存储器接口。

当S3C4510B不控制总线时,它也不再进行DRAM的刷新操作,因此,当外部的总线主控器取得总线控制权且会持续一段较长的时间,必须负责完成DRAM的刷新操作。

控制寄存器(Control Register)

系统配置寄存器(System Configuration Register)

系统管理器中有一个系统配置寄存器SYSCFG,该寄存器决定系统管理器中特殊功能寄存器组的起始地址,以及片内SRAM的使用方式和起始地址。在系统存储器映射中,特殊功能寄存器组的地址空间固定为64KB,可参考图5.2.4。

用户可以通过SYSCFG的设定控制诸如写缓冲、缓存模式、DRAM模式、以及片内SRAM的起始地址等。


ARM7与ARM9的区别及ARM体系结构.doc

返回顶部