指令周期(PIC18)

时间:2015-10-19 00:18:14

标签: fetch execution pic18 pipelining

我正在尝试理解通过指令所需的步骤以及它们与每个振荡器周期的关系。 PIC18F4321的数据表似乎将此过程分为两个基本步骤:获取和执行。但是当说哪个步骤属于哪个振荡器周期时似乎并不一致。例如,它说:

  

在内部,程序计数器在每个Q1增加;该   指令从程序存储器中取出并锁存到   Q4期间的指令寄存器(IR)。

这听起来很奇怪,因为它没有提及Q2和Q3。仅此一点,我几乎可以认为取出需要1个振荡器周期,因为它发生在Q4。但是进一步阅读,它说:

  

指令获取和执行以这样的方式流水线化   获取需要一个指令周期,而解码和执行   采取另一个指令周期。但是,由于流水线,每个   指令在一个周期内有效执行。

所以现在它告诉我,提取需要Q1到Q4。基于此,我假设如果不是流水线操作,则指令将需要2个指令周期才能完成,因为完全指令周期仅用于获取。但我理解在实践中流水线操作会让它看起来只需要1个指令周期来完成指令。

还是稍微进一步,我相信这是最令人困惑的部分,它说:

  

在执行周期中,取出的指令被锁存到   周期Q1中的指令寄存器(IR)。那么这个指令就是   在Q2,Q3和Q4周期内解码并执行。数据存储器是   在Q2期间读取(操作数读取)并在Q4期间写入   (目的地写入)。

基于这个以及我读过的其他资源,似乎它将执行部分分为解码,读取,处理和写入(它让我感到困惑,因为当我认为它实际上并不是指时,它会继续使用单词执行“获取和执行”的执行部分)。

1)现在,它是什么时候做的?当它说在Q2 / Q4中发生读/写时非常清楚。所以Q3应该处理?

2)解码的振荡器周期是多少?

3)为什么你必须在Q1中再次将指令锁存到IR,如果你在Q4获取同样的指令时那样做了?

1 个答案:

答案 0 :(得分:0)

免责声明:我从未编写PIC asm代码,更不用说对PIC进行任何性能分析了。我大多知道更强大的CPU,比如x86,阅读http://agner.org/optimize/,以及http://realworldtech.com/上的内容。这个答案只是基于你在问题中提到的手册的片段,因为它们对我有意义。 我可能会完全误解某些内容

因此,就外部时钟而言,它是一个2周期流水线(fetch |执行),在执行核心中具有四泵浦时钟。执行阶段细分为4个流水线阶段。有点像Pentium4如何使用双泵浦执行单元(即一个使用更快时钟的流水线级)。

  1. 听起来像是,指令执行发生在第3季。
  2.   

    2)解码的振荡器周期是多少?

    我不明白这个问题。它使用未经过相乘的时钟对每个输入时钟解码一条指令。

      

    3)如果你为什么必须在Q1中再次将指令锁存到IR   当你拿到同样的指令时,你在第四季就做到了吗?

    听起来PC在Q1中递增,因此在指令执行期间它指向下一条指令。在Q4中,下一条指令被提取到IR中,准备在下一个周期执行它。这是指令数据本身(即PC指向的内容)。我不确定这部分,但这是有道理的。