看到汇编中许多关于程序回来与中止回来时处理地址都很特别,细心想想原来是流水线作用的作用。所以,决议总结学习下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字节
下面一个比如就很好的阐明晰这个问题。
print?
- 0x4000ADDPC,PC,#4;正在被履行的指令,将地址值PC+4写入PC
- 0x4004…;正在被译码的指令
- 0x4008…;正在被取指的指令,PC=0x4008
- 0x400C…;PC+4=0x400C
别的弥补阐明便是依据以上描绘,流水线只要被指令填满时才干发挥最大效能,即每时钟周期完结一条指令的履行(仅单周期指令)。
假如程序产生跳转,流水线会被清空,这将需求几个时钟才干使流水线被再次填满。因而,尽量地少运用跳转指令能够进步程序的履行功率。
以上便是对ARM73级流水线的一个总的知道,参阅来自学习ARM时的教材——《ARM嵌入式体系基础教程(第二版)》。