1

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

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

这听起来很奇怪,因为它没有提到 Q2 和 Q3。仅凭这一点,我几乎会认为获取需要 1 个振荡器周期,因为它发生在第四季度。但再读一点,它说:

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

所以现在它告诉我获取需要 Q1 到 Q4。基于此,我假设如果不是流水线,指令将需要 2 个指令周期才能通过,因为完整的指令周期仅用于获取。但我了解在实践中流水线如何使它看起来只需要 1 个指令周期来完成一条指令。 

还有一点点,我相信这是最令人困惑的部分,它说:

在执行周期中,取出的指令在周期 Q1 被锁存到指令寄存器 (IR) 中。然后在 Q2、Q3 和 Q4 周期内解码并执行该指令。数据存储器在 Q2 期间读取(操作数读取)并在 Q4 期间写入(目标写入)。

根据我读过的这个和其他资料,它似乎将执行部分分为解码、读取、处理和写入(这让我感到困惑,因为当我认为它实际上并不是指执行部分时,它一直使用执行这个词“获取和执行”)。

1)现在,它什么时候做?当它说读/写将在第二季度/第四季度发生时非常清楚。那么Q3应该在处理吗?

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

3) 如果您刚刚在 Q4 中为同一条指令获取指令,为什么还要在 Q1 中再次将指令锁存到 IR?

4

1 回答 1

0

免责声明:我从未编写过 PIC asm 代码,更不用说对 PIC 进行任何性能分析了。通过阅读http://agner.org/optimize/http://realworldtech.com/上的内容,我主要了解更强大的 CPU,例如 x86 。该答案仅基于您在问题中提出的手册片段,因为它们对我来说确实有意义。 我可能完全误解了一些东西


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


  1. 听起来是的,指令执行发生在第三季度。

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

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

3) 如果您刚刚在 Q4 中为同一条指令获取指令,为什么还要在 Q1 中再次将指令锁存到 IR?

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

于 2015-10-19T03:07:38.923 回答