首先,为我糟糕的英语感到抱歉。这个问题是我的“计算机建筑”课程教材中的一个问题。我已经在网上找到了答案,但仍然找不到细节。
以下是五个阶段(获取、解码、执行、内存、写入)单管道微体系结构中的指令阶段,没有转发机制。所有操作都是一个周期,除了LW和SW为1+ 2,分支为1+1。
Loop: C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 ...
LW R3, 0(R0) F D E M - - W
LW R1, 0(R3) F D - - - E M - - W
ADDI R1, R1, #1 F - - - D - - - E M W
SUB R4, R3, R2 F - - - D E M W
SW R1, 0(R3) F D W M ...
BNZ R4, Loop F D E ...
...我有几个问题:
这个问题源于“计算机体系结构:定量方法5e”一书,示例3.11。
发布于 2016-11-03 12:12:04
经典RISC管道wiki文章非常好。如果你还没查过的话。
我不确定,我没有花太多时间在经典的RISC管道上。基于我们所看到的这个和ADDI,它看起来像是寄存器-读发生在E阶段。
这很好地解释了E的延迟,直到上次加载的回写。如果您确信read应该发生在您正在研究的管道的D阶段,那么这个解决方案与您的管道不匹配;对于另一个直到执行才读取寄存器的管道,它是正确的。
第三阶段D从C7开始,E从C11开始?
流水线的D级被以前的指令所占据,直到C7,在这一点上它可以解码。
R1直到循环11才准备就绪,此时数据可以被转发。从上一条指令的内存阶段开始,所以ADDI的执行可以与前一条指令中的写回并行进行。这被称为“旁路”。
旁路可以让ALU操作以一个周期延迟运行,因此您可以在下一条指令中使用ADD的输出,而无需中断。
因为前面的指令在提取阶段被停止了,而且它是一个有序的管道;没有无序的执行。
发布于 2016-11-03 11:39:38
看起来,在执行与内存相关的操作(LW)时,管道会冻结整个系统,但我想不出为什么ADDI不能在C4中执行其解码。我并不是说load操作冻结整个执行是有效的,但这似乎是“唯一”的逻辑解释。
指令2可以在C3中执行它的解码,但它必须等到指令1将其数据写回R1之后。这就是为什么第二条指令的执行被推迟到C7。
顺便问一下,当你说你在“网络”上找到答案时,这是一个可信的来源吗?
发布于 2016-12-29 19:40:41
为什么第二指令可以在C2中启动D?D包括reg-read,但以前的指令直到R3 C7.才会回写。
Ans --这是因为MIPS中的译码器阶段有两个部分/子阶段。
DEC =解码+ RR(寄存器读取)
指令可以被解码,也就是说,操作码可以被读取和解码,但是,由于在这种情况下依赖,RR将暂停到第一个加载指令执行(从内存中获取R3 ),并且在C7中进行简单的转发,下一个负载可以执行。
为了避免结构危害,对两个子阶段的解码阶段进行了分解。如果您再读一次“计算机体系结构:定量方法”的图表,您将看到一条虚线和一条实线,这两条线是有意绘制以显示整体工作的2部分(解码OPCODE + REG REG READ)。
另外两个问题我同意“彼得·科德斯”
希望这能有所帮助。贾敏
https://stackoverflow.com/questions/40397993
复制相似问题