ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理与存储器系统之间的操作更加流畅,连续,能提供0.9MIPS/MHZ的指令执行速度
PC代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:1、取指(从存储器装载一条指令);2、译码(识别将要被执行的指令,得到下一指令占据数据路径,寄存器被读取,操作数在桶式移位器中被以为。ALU产生相应的运算结果并写回到目的寄存器中,ALU结果根据指令需求更改状态寄存器的条件位)。而R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前指令第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;详细分解:
第一周期对第一指令进行取指操作。
第二周期对第一指令进行译码,同时对第二指令进行取指操作。
第三周期对第一指令进行执行,第二指令进行译码,并同时对第三条指令执行操作
地址 指令
0x3000 A
0x3004 B
0x3008 C
0x300c D
(1)SWI和未定义指令异常
此时正在执行指令A(此时PC=0x3008)的同时在译码阶段发生SWI或未定义指令异常,等指令A执行完后(此时PC还没有发生改变PC=0x3008)进行SWI或未定义指令粗合理,同时把当前PC值赋给寄存器LR(LR=0x3008)然后再进行自动调整LR=LR-0x04(此时LR=0x3004),这样当异常返回时就到地址为0x3004的指令处执行。所以再进入异常的时候LR不需要修改
(2)IRQ和FIQ异常
此时正在执行指令A(此时PC=0x3008)的同时发生IRQ和FIQ异常,等指令A执行完后(此时PC发生改变PC=0x300c)进行IRQ和FIQ异常响应,同时把当前PC值赋给寄存器LR(LR=0x300c)然后再进行自动调整LR=LR-0x04(此时LR=0x3008),这样当异常返回时就到地址为0x3008的指令C处执行(可以看出跳过了执行指令B),所以当进入异常的时候要执行“SUB LR,LR,#4”(此时LR=0x3004),当异常返回时就到地址为0x3004的指令B处执行。
(3)预取指令中止
此时正在执行指令A(此时PC=0x3008)发生预取指令中止异常,(此时PC没有发生改变PC=0x3008)进入预取指令中止异常响应,同时把当前PC值赋给寄存器LR(LR=0x3008)然后再进行自动调整LR=LR-0x04(此时LR=0x3004),这样当异常返回时就到地址为0x3004的指令B处执行,但是当发生指令预取中止异常时,程序要返回到该有问题的指令处,重新读取并执行该指令。异常指令预取中止异常中断程序应该返回到产生该指令预取中止异常中断的指令处。所以当进入异常的时候要执行“SUB LR,LR,#4”(此时LR=0x3000),当异常返回时就到地址为0x3000的指令A处重新执行
(4)数据中止异常
此时正在执行指令A(此时PC=0x3008)的同时发生数据中止异常,等指令A执行完后进入下一条指令时(此时PC发生改变PC=0x300c)发生数据中止异常响应,同时把当前PC值赋给寄存器LR(LR=0x300c)然后再进行自动调整LR=LR-0x04(此时LR=0x3008),这样当异常返回时就到地址为0x3008的指令c处执行,但是发生数据访问中止异常中断时,程序要返回到该有问题的数据访问处,重新访问该数据。因此数据访问中止异常中断程序应该返回到产生该数据访问中止异常中断的指令处所以当进入异常的时候要执行“SUB LR,LR,#8”(此时LR=0x3000),当异常返回时就到地址为0x3000的指令A处重新执行
异常或入口
|
返回指令
|
之前的状态
ARM R14_x Thumb R14_x
|
备注
|
BL
|
MOV PC,R14
|
PC+4
|
PC+2
|
此处PC 为BL, SWI, 未定义的指令取指或者预取中止指令的地址。
|
SWI
|
MOVS PC,R14_svc
|
PC+4
|
PC+2
|
未定义的指令
|
MOVS PC,R14_und
|
PC+4
|
PC+2
|
预取中止
|
SUBS PC,R14_abt,#4
|
PC+4
|
PC+4
|
快中断
|
SUBS PC,R14_fiq,#4
|
PC+4
|
PC+4
|
此处PC 为由于FIQ 或IRQ 占先而没有被执行的指令的地址
|
中断
|
SUBS PC,R14_irq,#4
|
PC+4
|
PC+4
|
数据中止
|
SUBS PC,R14_abt,#8
|
PC+8
|
PC+8
|
此处PC 为产生数据中止的装载或保存指令的地址。
|
复位
|
无
|
-
|
-
|
复位时保存在R14_svc 中的值不可预知。
|
分享到:
相关推荐
2. **分支预测**:为了减少由于分支指令导致的流水线中断,ARM使用了动态和静态分支预测技术,以预测下一条指令的位置。 3. **乱序执行**:在某些高级ARM架构中,可能存在乱序执行能力,即指令可以不按程序顺序执行...
ARM9的五级流水线设计减少了每个时钟周期内需要完成的工作量,允许更高的时钟频率,同时哈佛架构下的指令和数据存储器分离也减少了冲突的发生,提高了处理器的整体性能。 #### 二、三级流水线运行情况分析 ##### ...
以ARM7的三级流水线为例,在异常发生时,程序计数器(PC)指向的是即将执行的指令的地址,但由于流水线的存在,实际的下一条指令地址可能位于当前PC值之后若干个字节的位置。因此,在保存返回地址时,必须考虑到流水...
ARM9系列采用了五级流水线,分为取指、译码、执行、访存和回写五个阶段。与ARM7相比,五级流水线进一步细化了执行单元,降低了每个时钟周期内的工作量,支持更高的时钟频率,并采用了哈佛架构,分离了指令和数据...
ARM7和ARM9系列处理器分别采用了三级和五级流水线结构,旨在通过并行处理不同阶段的指令来缩短执行时间,提高处理器效率和吞吐率。 **1. ARM7流水线技术** ARM7处理器采用典型的三级流水线结构,包括取指(IF)、...
指令流水线的设计进一步将这些步骤分解为更多阶段,例如在ARM架构中常见的有三级、五级和六级流水线: - **三级指令流水线**:通常包括Fetch、Decode和Execute三个阶段。这种设计简单,但吞吐量较低。 - **五级...
例如,ARM7的3级流水线、ARM9的5级流水线等,都是RISC架构下的实例。RISC处理器的简单性减少了设计复杂度,提高了执行速度,但同时也限制了其在某些复杂计算任务上的表现。 综上,流水线技术通过指令执行的并行化...
- **ARM9**:采用了5级流水线,相比于ARM7的3级流水线,增加了存储器访问段和回写段,显著提升了指令吞吐量,平均达到了1.1 Dhrystone MIPS/MHz,比ARM7提高了约13%。同时,ARM9的最高工作频率也有所提升。 - **...
ARM7TDMI有3级流水线,这意味着它可以同时处理多个指令,从而提高了执行速度。此外,D表示其具备Debug扩展,方便调试;M代表增强型乘法器,支持32x8位运算,产生64位结果;I则指的是EmbeddedICE-RT逻辑,提供片上...
ARM7TDMI是ARM11的基础,它是一个3级流水线的处理器内核。流水线技术允许处理器同时处理多个指令,从而提高处理速度。ARM7TDMI的特点包括: 1. **3级流水线**:指令的取指、解码和执行可以并行进行,每级流水线处理...
3. **技术规格**:每个手册可能会详细介绍对应处理器的技术规格,如时钟速度、流水线结构、寄存器配置、缓存大小以及中断处理机制等。 4. **内存管理**:ARM处理器通常支持多种内存管理单元(MMU),用于虚拟地址到...
这种方式虽然增加了额外的跳转指令,但由于现代处理器的高速缓存和流水线技术,实际上对性能的影响微乎其微。 #### 与X86中断向量表的比较 X86体系结构下的中断向量表设计得更加灵活,允许在运行时动态随机地设置...
ARM9TDMI和ARM9E-S内核的时钟频率提高来自于五级流水线设计,而ARM7TDMI和ARM7TDMI-S则采用的是三级流水线设计(参见图1至图3)。增加流水线阶段可以提高设计中的并行度,并减少单个时钟周期内需要评估的逻辑量。在...
2. **返回地址的修正**:由于ARM处理器采用三级流水线结构,PC值始终为当前执行指令地址加8。在异常响应时,处理器会自动保存修正后的返回地址到LR寄存器中,以便在异常处理完成后能够正确返回。 #### 六、结论 ...
其核心特色之一是三级流水线结构,用于高效处理指令。这种结构允许在执行一条指令的同时,对下一条指令进行译码,并预取第三条指令,从而显著提升指令吞吐量,大多数指令能在单个时钟周期内完成。然而,流水线在遇到...
ARM7系列使用的是三级流水线设计,而更新的ARM9系列则使用了五级流水线。流水线技术能够同时处理多条指令的不同执行阶段,从而提高指令的吞吐率。 ARM处理器内部集成了37个32位寄存器,其中32个为通用寄存器,剩下...
3. ARM的流水线技术:为了提高指令处理速度,ARM处理器采用了高级流水线技术,常见的有三级流水线和五级流水线。流水线技术可以同时处理多条指令,但引入了数据相关性和控制相关性问题,这就需要编译器和处理器设计...
ARM处理器通常采用三级流水线结构,包括Fetch(取指)、Decode(译码)和Execute(执行)阶段。在中断调用时,例如jmp指令,当execute阶段完成后,LR寄存器会被设置为当前PC值,然后在后续的周期中,LR值会减4。...
5. **优化技巧**: 了解ARM的流水线结构和指令集特性,可以编写更高效的C代码,如避免管道冲突和分支预测错误。 这些源码可能涵盖以下主题: 1. **基础示例**: 如简单的"Hello, World!"程序,展示C语言在ARM上的基本...