【问题标题】:Instruction cycle (PIC18)指令周期(PIC18)
【发布时间】: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


【解决方案1】:

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


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


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

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

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

3) 如果你必须在 Q1 中再次将指令锁存到 IR 刚刚在第 4 季度为同一条指令提取时这样做了?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多