ARM7的三级流水线过程

转载 2015年11月19日 20:19:38

ARM正在执行第1条指令的同时对第2条指令进行译码,并将第3条指令从存储器中取出。

看到汇编中很多关于程序返回与中断返回时处理地址都很特别,仔细想想原来是流水线作用的效果。所以,决定总结学习下ARM流水线。

ARM7处理器采用3级流水线来增加处理器指令流的速度,能提供0.9MIPS/MHz的指令处理速度。

PS:

MIPS(Million Instruction Per Second)表示每秒多少百万条指令。比如0.9MIPS,表示每秒九十万条指令。

MIPS/MHz表示CPU在每MHz的运行速度下可以执行多少个MIPS,如0.9MIPS/MHz则表示如果CPU运行在1MHz的频率下,每秒可执行90万条指令。

如果CPU在20MHz的频率下,每秒可运行1800万条指令。MIPS/MHz可以很好的反映CPU的速度。

3级流水线如上图所示(PC为程序计数器),流水线使用3个阶段,因此指令分3个阶段执行。

⑴ 取指从存储器装载一条指令

⑵ 译码识别将要被执行的指令

⑶ 执行处理指令并将结果写会寄存器

以前学过的51单片机,因为比较简单,所以它的处理器只能完成一条指令的读取和执行后,才会执行下一条指令。这样,PC始终指向的正在“执行”的指令。

而对于ARM7来说因为是3级流水线,所以把指令的处理分为了上面所述的3个阶段。

所以处理时实际是这样的ARM正在执行第1条指令的同时对第2条指令进行译码,并将第3条指令从存储器中取出。

所以,ARM7流水线只有在取第4条指令时,第1条指令才算完成执行。

下图生动形象的说明了3级流水线的处理机制

下面一句话很关键:无论处理器处于何种状态,程序计数器R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或者正在“译码”的指令。

人们一般会习惯性的将正在执行的指令作为参考点,即当前第1条指令。

所以,PC总是指向第3条指令,

或者说PC总是指向当前正在执行的指令地址再加2条指令的地址。


处理器处于ARM状态时,每条指令为4个字节,所以PC值为正在执行的指令地址加8字节,即是:

PC值 = 当前程序执行位置 + 8字节

处理器处于Thumb状态时,每条指令为2字节,所以PC值为正在执行的指令地址加4字节,即是:

PC值 = 当前程序执行位置 + 4字节

下面一个例子就很好的说明了这个问题。

[plain] view plaincopy
  1. 0x4000 ADDPC,PC,#4 ;正在被执行的指令,将地址值PC+4写入PC 
  2. 0x4004 ...;正在被译码的指令 
  3. 0x4008 ...;正在被取指的指令,PC=0x4008 
  4. 0x400C ...;PC+4=0x400C 

另外补充说明就是根据以上描述,流水线只有被指令填满时才能发挥最大效能,即每时钟周期完成一条指令的执行(仅单周期指令)。

如果程序发生跳转,流水线会被清空,这将需要几个时钟才能使流水线被再次填满。因此,尽量地少使用跳转指令可以提高程序的执行效率

PC代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:1.取指(从存储器装载一条指令);2.译码(识别将要被执行的指令);3.执行(处理指令并将结果写回寄存器)。而R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;

    ARM指令是三级流水线,取指,译指,执行时同时执行的,现在PC指向的是正在取指的地址,那么cpu正在译指的指令地址是PC-4(假设在ARM状态下,一个指令占4个字节),cpu正在执行的指令地址是PC-8,也就是说PC所指向的地址和现在所执行的指令地址相差8。
    当突然发生中断的时候,保存的是PC的地址
    这样你就知道了,如果返回的时候返回PC,那么中间就有一个指令没有执行,所以用SUB pc lr-irq #4。

相关文章推荐

ARM7的三级流水线过程

看到汇编中很多关于程序返回与中断返回时处理地址都很特别,仔细想想原来是流水线作用的效果。所以,决定总结学习下ARM流水线。 ARM7处理器采用3级流水线来增加处理器指令流的速度,能提供0.9MIPS...
  • enlaihe
  • enlaihe
  • 2012年05月24日 16:23
  • 7916

ARM 三级流水线

ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理与存储器系统之间的操作更加流畅,连续,能提供0.9MIPS/MHZ的指令执行速度。               PC...

ARM的三级流水线结构(一)

ARM的三级流水线结构 PC=PC+8分析

ARM的三级流水线结构(二)

3.4. 为何ARM7中PC=PC+8 此处解释为何ARM7中,CPU地址,即PC,为何有PC=PC+8这一说法: 众所周知,AMR7,是三级流水线,其细节见图: 图 3.1. ...

ARM三级流水线

从上图中我们看到CPU内部有3个主要组成部分:指令寄存器,指令译码器,指令执行单元(包括ALU和通用寄存器组)。 CPU在执行1条指令的时候,主要有3个步骤:取指(将指令从内存或指令cache中取入...

Arm的三级流水线

Arm的三级流水线流水线使用3个阶段,因此指令分3个阶段执行。 取指从存储器装载一条指令 译码识别将要被执行的指令 执行处理指令并将结果写会寄存器 ARM的R15(PC)总是指向取指的地...

ARM处理器三级流水线与PC,LR的关系

ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理与存储器系统之间的操作更加流畅,连续,能提供0.9MIPS/MHZ的指令执行速度。     PC代表程序计数器,流水...

怎么理解STM8的三级流水线架构?

我们知道STM8使用了三级流水线来运行它的指令代码,那要怎么样来理解三级流水线的意思呢?三级流水线是以下三级: 1. 取指令 2. 指令解码和寻址 3. 指令执行 我们来打个炒鸡蛋的比方...

ARM流水线详解和阐述

  • 2009年07月06日 16:14
  • 431KB
  • 下载

ARM流水线MMUCache

  • 2008年10月07日 11:05
  • 273KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ARM7的三级流水线过程
举报原因:
原因补充:

(最多只允许输入30个字)