Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
根本的原因是,两者的流水线设计中,指令的 Execute 执行阶段,都是处于流水线的第三级,<br />
所以使得 PC=PC+8。<br />
类似地,可以推导出:<br />
假设,Execute 阶段处于流水线中的第 E 阶段,每条指令是 T 个字节,那么<br />
PC<br />
= PC + N*T<br />
= PC + (E - 1) * T<br />
此处 ARM7 和 ARM9:<br />
Execute 阶段都是第 3 阶段 -> E=3<br />
每条指令是 4 个字节 -> T=4<br />
所以:<br />
PC<br />
=PC + N* T<br />
=PC + (3 -1 ) * 4<br />
= PC + 8<br />
【关于直接改变 PC 的值,会导致流水线清空的解释】<br />
把 PC 的值直接赋值为 0x20。而 PC 值更改,直接导致流水线的清空,即导致下一个 cycle<br />
中的,对应的流水线中的其他几个步骤,包括接下来的同一个 Cycle 中的取指的工作被取消。<br />
在 PC 跳转到 0x20 的位置之后,流水线重新计算,重新一步步地按照流水线的逻辑,去一<br />
点点执行。当然要保证当前指令的执行完成,即执行之后,还有两个 cycle,分别做的 Memory<br />
和 Write,会继续执行完成。<br />
【相关资料】<br />
ARM 流水线和 program counter(PC)的增量<br />
http://hi.baidu.com/istry/blog/item/f823e1438de0a71972f05d0f.html<br />
最后附上 ARM9 的五级流水线的内置执行结构的细节: