02.07.2013 Views

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

SHOW MORE
SHOW LESS

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 的五级流水线的内置执行结构的细节:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!