【发布时间】:2016-01-17 05:32:35
【问题描述】:
我试图了解通过指令所需的步骤以及它们与每个振荡器周期的关系。 PIC18F4321 的数据表似乎将此过程分为 2 个基本步骤:获取和执行。但是在说哪个步骤属于哪个振荡器周期时似乎并不一致。例如,它说:
在内部,程序计数器每 Q1 递增一次;这 指令从程序存储器中取出并锁存到 第四季度的指令寄存器 (IR)。
这听起来很奇怪,因为它没有提到 Q2 和 Q3。仅凭这一点,我几乎会认为获取需要 1 个振荡器周期,因为它发生在第四季度。但再进一步阅读,它会说:
指令获取和执行以流水线方式进行,即 提取需要一个指令周期,而解码和执行 再执行一个指令周期。但是,由于流水线,每个 指令在一个周期内有效执行。
所以现在它告诉我提取需要 Q1 到 Q4。基于此,我假设如果不是用于流水线,指令将需要 2 个指令周期才能通过,因为完整的指令周期仅用于获取。但我理解在实践中流水线如何使它看起来只需要 1 个指令周期来完成一条指令。
还有一点点,我相信这是最令人困惑的部分,它说:
在执行周期中,获取的指令被锁存到 周期 Q1 中的指令寄存器 (IR)。然后这个指令 在 Q2、Q3 和 Q4 周期内解码和执行。数据存储器是 在 Q2 期间读取(操作数读取)并在 Q4 期间写入 (目的地写)。
根据我读过的这个和其他来源,它似乎将执行部分分为解码、读取、处理和写入(这让我感到困惑,因为当我认为它实际上并不是指时它一直使用执行这个词“获取和执行”的执行部分)。
1) 现在,它什么时候做?当它说读/写将在 Q2/Q4 发生时非常清楚。那么Q3应该在处理吗?
2) 解码的振荡器周期是多少?
3) 如果您刚刚在 Q4 中为同一条指令获取指令,为什么还要在 Q1 中再次将指令锁存到 IR?
【问题讨论】:
-
什么是
Q1/Q2/Q3/Q4?这些名称是时钟周期吗?甚至没有指向您引用的数据表的链接。听起来它可能是 4 或 5 级流水线,除非很明显指令具有单周期延迟。 (作为依赖链一部分的有效延迟比更复杂 CPU 上的完整流水线长度要短得多。分支错误预测惩罚显示了分支指令执行阶段之前的流水线长度。) -
对不起,我认为说明微控制器的名称就足够了:ww1.microchip.com/downloads/en/DeviceDoc/39689b.pdf。是的,它们是时钟周期的名称。从数据表来看,时钟输入分为 4 个不重叠的时钟(Q1 到 Q4,相当于 1 个指令周期)
-
我不会正常编写 PIC asm,并且不确定 google 会找到正确的数据表。但是好的,所以 Q1 到 Q4 是时钟周期的四分之一。在我看来,有些语言是指整个输入时钟,而另一些语言是指四倍频时钟的周期。
标签: fetch execution pic18 pipelining