为什么 A 和 B 寄存器用于多周期数据路径?

Why A and B registers are used in multicycle Datapath?

为什么需要输入为RegisterFile的ReadData1和ReadData2的寄存器A和B?难道不能直接使用寄存器文件的 ReadData1 和 ReadData2 输出上的值吗?

指令寄存器已经加载了一条指令,所以IR的值是固定的,这意味着在一条指令中$rs、$rt、$rd reg numbers显然是相同的。因此,寄存器文件的 ReadRegister1 和 ReadRegister2 输入始终具有相同的值。所以 RD1 和 RD2 输出上的值是相同的,除非 RegisterFile 中的相应寄存器被覆盖。

这意味着 A 和 B 寄存器仅对于需要具有在上一个周期中被覆盖的 $rs 或 $rd 寄存器的值的指令是必需的。谁能给我一个这样的指令的例子。

一般模式是在一个时钟周期内:在时钟开始时,一些寄存器将值提供给计算逻辑,计算逻辑在时钟周期结束时将值提供给(相同或其他)寄存器时钟,以便它可以在下一个周期重新开始。

single cycle datapath中,PC中的值开始循环的过程,到循环结束,更新 PC 寄存器以使用另一个值重复一个新周期。在此过程中,寄存器文件会被查阅并(可能)更新。您可能会注意到这些 A 和 B 寄存器不存在于单周期数据路径中。

你是正确的,在多周期数据路径.[=10 上执行任何一条指令期间这些值不会改变=]

但是,多周期处理器使用多个周期来执行一条指令(这样它可以加速时钟)。为了支持该处理器设计中的连续周期,使用了一些内部寄存器——它们捕获前一个周期的输出,以便下一个周期做一些不同的事情。

多周期数据路径图的问题在于它们没有明确说明处理器的哪个部分在哪个周期运行。那些 A 和 B 寄存器在那里支持循环边界,因此解码在一个循环中发生,而 arithmetic/ALU 在另一个循环中发生。 (如果没有这些寄存器,处理器将不得不在后续周期中再次执行解码,这将降低时钟速率并破坏多周期数据路径的性质。)

边界在管道数据路径图中变得更加清晰。搜索“MIPS 流水线数据路径”。 (请注意,一些流水线数据路径图显示了阶段之间的寄存器,而其他流水线图只是概述了阶段中的内容,而没有显示这些寄存器。)大竖线是寄存器,它们将流水线阶段分开。当然,流水线处理器并行执行所有流水线阶段,尽管在理论上,类似的边界适用于多周期处理器中的周期。请注意,流水线数据路径中的 ID/EX 流水线寄存器用于多周期数据路径中的 A 和 B 寄存器。