文档介绍:第2章 ARM 体系结构硅谷芯微技术贡献网址: ,将着眼于 ARM9 内核、处理器状态与模式、内部寄存器、程序状态寄存器、异常、中断及其向量表和存储系统的学习,这是成为一个应用工程师必备的基础。本章中程序范例除非特别声明,否则处理器均处于 ARM 状态,执行字方式的 ARM 指令。第2章目录? 1. ARM 9TDMI ? 2. ARM 的模块、内核和功能框图? 3. ARM 处理器状态? 4. ARM 处理器模式?5. ARM 内部寄存器?? 7. ARM 体系的异常、中断及向量表? 8. ARM 体系的存储系统?9. 课后练习 ARM9TDMI ARM9TDMI 是基于 ARM 体系结构 v4 版本的高端 ARM 核(注意:核并非芯片, ARM 核与其他部件(如 RAM 、 ROM 、片内外设)组合在一起才构成现实的芯片)。 ARM9TDMI 是从 ARM7 核发展而来的。 ARM9TDMI 后缀的涵义如下: ■T:支持高密度 Thumb 指令集扩展; ■D:支持片上调试; ■M:支持 64 位乘法指令; ■I:带 Embedded ICE 硬件仿真功能模块。 ARM9TDMI-S 是 ARM9TDMI 的可综合( synthesizable )版本(软核), 对应用工程师来说, 除非芯片生产厂商对 ARM9TDMI-S 进行了裁剪,否则在逻辑上 ARM9TDMI-S 与 ARM9IDMI 没有太大区别, 其编程模型与 ARM7TDMI 一致。? 存储器的字与半字( 1) ARM 处理器使用了冯· 诺依曼( von Neumann ) 结构,提供单一的主存接口。比如 ARM7 处理器就是标准的冯· 诺依曼( von Neumann )结构。而 ARM9 处理器的 CPU/MMU/CACHE 系统是指令和数据分开的, 不过通常也还是提供单一的主存接口, 因此 ARM9 处理器也可以看成是哈佛( Harvard )结构。从大的方面讲,无论哪种 ARM 处理器结构,都可以看成是是冯· 诺依曼( von Neumann )结构,指令和数据共用一条 32 位总线, 因此只有装载、存储和交换指令可以对存储器中的数据进行访问。 ARM 处理器直接支持 8 位字节、 16 位半字或者 32 位字的数据类型。其中,以能被 4 整除的地址开始连续的 4 个字节构成 1 个字,字的数据类型为 4 个连续的字节。从偶数地址开始连续的 2 个字节构成一个半字,半字的数据类型为 2 个连续的字节。 ARM 指令的长度刚好是 1个字, Thumb 指令的长度刚好是一个半字。? 存储器的字与半字( 2) 如果一个数据是以字方式存储的,那么它就是字对齐的,否则就是非字对齐的。如果一个数据是以半字方式存储的,那么它就是半字对齐的,否则就是非半字对齐的,半字与字对齐的实际情况见表 。表 半字与字对齐方式半字对齐字对齐地址特征 0x40020x40040x40060x4008. 0x40040x40080x400C 0x4010. bit0=0其他位置为任意值 bit1=0,bit0=0 其他位置为任意值? 存储器的字与半字( 3) 注意: ARM 处理器直接支持对齐的半字或字数据的存取,也就是可以使用一条相应的指令来实现对应操作( 详见第三章)。如果访问非对齐的半字或字数据,将需要多条指令组合才能实现对应的操作,这对程序的执行效率影响较大。因此,在 C语言编程中,定义的多字节变量或结构体,最好使其为对齐存放。? 5 级流水线(1) ARM 处理器使用流水线来增加处理指令流的速度,这样可使几个操作同时进行,并使处理和存储器之间的操作更加流畅、连续,能提供 的指令执行速度。相比 ARM7 (3 级流水线), ARM9 增加了 2 个功能部件分别访问存储器并写回结果,且将读寄存器的操作转移到译码部件上,使流水线各部件在功能上更平衡。5 级流水线如图 所示(其中 PC 为程序计数器) ,流水线使用 5个阶段,因此指令分为 5个阶段执行。■取指:从存储器装载一条指令; ■译码:识别将要被执行的指令; ■执行:处理指令,产生 ALU 运算结果或产生存储器地址(对于存储器访问指令来讲); ■访存:访问数据存储器; ■回写:将执行结果写回寄存器。? 5 级流水线(2) 图 ARM9 的5级指令流水线取指译码执行访存回写从存储器取出指令对指令使用的寄存器进行译码,并从从寄存器组只能感读出寄存器产生ALU运算结果或产生存储器地址(对于存储器访问指令来讲) 访问存储器将执行结果写回到寄存器 ARM Thumb PCPC PC-4PC