MIPS流水线寄存器长度(IF / ID,ID / EX,EX / MEM,MEM / WB)

问题描述 投票:1回答:1

我目前正在攻读我的计算机体系结构考试,并且在sub的第3阶段(在时钟通勤之前)之后发现了一个问题,要求说明(我会假设一点一点)mips管道架构中包含的值给出以下内容说明。

add $t0,$t1,$t2 
sub $t3,$t3,$t5 
beq $t6,$t0,16 
add $t0,$t1,$t3 

我不是要求解决这个问题但是经过一些研究后我没有取得太大的成功包围我所以我要求一些帮助/建议。

首先,我仍然没有清楚地了解流水线寄存器的大小(IF / ID,ID / EX,EX / MEM,MEM / WB)。我知道它们包含下一阶段的控制单元代码,并且它们包含前一阶段的结果,因此它可以传递到下一阶段。那就是(请纠正我,如果我错了)+ 9代表ID / EX,+ 5代表EX / MEM而+2代表MEM / WB但是我还没有设法找到一个清晰的数据模式我们可以期望这些寄存器包含。此外,我认为我们需要使用硬件转发将第一个add的结果转发到beq(因为$t0)并将sub的结果转发到最后的add(因为$t3)。这是否会影响寄存器中包含的内容?

如果有人能指出我正确的方向,那就太棒了。

非常感谢。

mips pipeline cpu-architecture machine-code
1个回答
0
投票

这些中间寄存器中的每一个的目的是保存下一阶段或后续阶段可能需要的数据。我将讨论一种可能的设计,但我会解释的确有很多可能的设计。

在获取阶段,从存储器中取出要执行的下一条指令(当前PC指向的指令),并更新PC以指向下一条要获取的指令。因此,IF / ID将包括一个4字节字段来保存所获取的指令。有两种计算新PC的方法:当前PC + 4或PC + 4 +偏移,如果是分支。如果获取的指令本身是分支指令,那么我们需要传递新PC,以便可以在EX阶段计算分支目标地址。我们可以在IF / ID中添加一个4字节的字段来保存新的PC值,以便通过ID阶段传递给EX阶段。

在解码阶段,确定操作码及其操作数。操作码位于MIPS指令中的固定位置。 MIPS指令可以在单个源寄存器,两个源寄存器,一个源寄存器和符号扩展的32位立即值,符号扩展的32位立即值或无操作数上操作。我们可以根据操作码仅为EX阶段准备所需的操作数,也可以准备任何操作码可能需要的所有操作数。后一种设计更简单,但它需要更大的ID / EX寄存器。特别是,需要两个4字节字段来保存两个可能的源寄存器值(这些值从解码阶段的寄存器文件中读取)和一个4字节字段用于可能的符号扩展立即值。没有操作码将需要所有这些字段,但是让我们准备所有这些字段并将它们存储在ID / EX寄存器中的固定位置。它简化了设计。

我们还将获取阶段中的新PC值计算​​传递到执行阶段,以防操作码变为分支。相对于当前PC值(静态程序顺序中分支之后的指令的PC)计算分支目标地址。这里有两种可能的设计:从IF / ID中的新PC字段添加总线到EX阶段,或者在ID / EX中添加一个字段来保存新的PC值,然后可以在EX阶段访问它。后一种设计在ID / EX中添加了一个4字节的字段。

EX需要来自ID阶段的操作码。我们可以选择只传递操作码而不是整个指令。但后来的阶段可能需要指令的其他部分。通常,在RISC管道中,最好通过使所有阶段都可以使用整个指令。通过这种方式,当将来对管道的任何阶段进行更改时,指令的所有部分都已可用。所以让我们在ID / EX上添加一个4字节的字段来保存指令。

EX阶段从ID / EX寄存器读取操作数和操作码(操作码是指令的一部分)并执行操作码指定的操作。 EX / MEM寄存器必须足够大以容纳所有可能的结果,其中可能包括以下内容:由算术或逻辑运算产生的ALU计算的4字节值,表示计算的有效地址的4字节值存储器加载或存储操作,在分支指令的情况下表示分支目标地址的4字节值,在条件分支指令的情况下表示1位条件。我们可以在EX / MEM中使用单个4字节字段来显示结果(无论它表示什么)和条件的1位字段。另外,和以前一样,我们需要一个4字节的字段来保存指令。同样对于存储指令,我们需要另一个4字节字段来保存要存储的值。这里一种可能的替代设计是,不是将1位条件和4字节分支目标地址存储在EX / MEM中,而是可以将它们直接传递到IF级。

在MEM阶段,在分支指令的情况下,分支目标地址和分支条件从EX / MEM传递回IF获取以确定新PC。在存储器存储操作的情况下,执行操作并且没有结果传递到任何阶段。在存储器加载操作的情况下,从存储器中取出4字节值并将其存储在MEM / WB寄存器的字段中。在ALU操作的情况下,4字节结果将仅传递到MEM / WB寄存器中的字段。另外,和以前一样,我们需要MEM / WB中的4字节字段来保存指令。

最后,在WB阶段,无论是从存储器加载还是由ALU计算的4字节结果都存储在目标寄存器中。这仅适用于产生结果的指令。否则,可以跳过WB阶段。

总之,在我讨论过的设计中,中间寄存器的大小如下:IF / ID大小为8字节,ID / EX大小为20字节,EX / MEM大小为25位,MEM / WB的大小为8个字节。

在中间寄存器中是否需要字段来保持某个值或者是否可以在同一级直接传递给需要该值的逻辑的设计决定是“电路级”决定。如果可以保证信号不被破坏,并且如果添加专用总线可行或方便,则可以直接连接它们。

© www.soinside.com 2019 - 2024. All rights reserved.