Mips 计算机体系结构管道暂停
首先,对不起,我的英语很差。这个问题是我的计算机架构课程教材中的一个问题。我在网上找到了答案,但仍然无法找到细节 以下是五阶段(提取、解码、执行、存储、写入)单管道微体系结构中的指令阶段,无需转发机制除LW和SW为1+2,分支为1+1外,所有操作均为一个周期。Mips 计算机体系结构管道暂停,mips,pipeline,cpu-architecture,Mips,Pipeline,Cpu Architecture,首先,对不起,我的英语很差。这个问题是我的计算机架构课程教材中的一个问题。我在网上找到了答案,但仍然无法找到细节 以下是五阶段(提取、解码、执行、存储、写入)单管道微体系结构中的指令阶段,无需转发机制除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 - -
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。当您的管道执行内存相关操作(LW)时,它似乎冻结了整个系统,除了我想不出ADDI无法在C4中执行解码的有效原因之外。我并不是说加载操作冻结整个执行是有效的,但这似乎是“唯一”合乎逻辑的解释 指令2可以在C3中执行解码,但它必须等到指令1将其数据写回
R1
。这就是为什么第二条指令的执行延迟到C7
顺便说一句,当你说你在“网上”找到了答案时,是不是来源可靠?答案很好。如果你没有,就去看看吧
因为前一条指令在fetch阶段被暂停,并且它是一个顺序管道;没有无序执行。为什么第二条指令可以在C2中启动D?D包括reg read,但上一条指令直到C7才写回R3。
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 ...
...
Ans-这是因为MIPS simple pipleline中的解码器级有两部分/子级
DEC=解码+RR(寄存器读取)
指令可以被解码,也就是说,操作码可以被读取和解码,但由于这种情况下的依赖性,RR将暂停,直到第一条加载指令执行(从内存中获取R3),并且通过C7中的简单转发,下一个加载可以进入执行
解码阶段在两个子阶段的中断是为了避免结构危险。
如果您再次阅读“计算机体系结构:定量方法”图表,您将看到一条虚线和实线,这条虚线和实线是特意绘制的,以显示总体工作分为两部分(解码操作码+REG读取)
另外两个问题我同意@Peter Cordes
希望这有帮助。
Jaymin你能用你在哪里找到的链接来编辑这个问题吗?我认为OP关于reg read发生在D阶段的说法是错误的。ADDI延迟的原因与您确定的指令2延迟的原因相同:输入未准备就绪,没有任何奇怪的“冻结整个机器”内容。@PeterCordes如果是这样,为什么'SUB R4,R3,r2f----demw'@PeterCordes如果这是子指令解码延迟的原因?顺序执行:它前面的指令被暂停。见我回答中的第3点。@PeterCordes谢谢。看起来一切都取决于解码阶段试图读取寄存器的事实。对我来说,这没有多大意义,因为解码单元的工作告诉“在哪里”读,而不是“读什么”。谢谢,如果寄存器读取是在
EXE
阶段完成的,那么指令阶段就可以完全解释了!