MIPS 5-stage pipeline是学习CPU pipeline 的简化和经典方法,这是工程师的常见面试问题。5-stage pipeline由以下stage组成:
IF - 指令获取
ID - 指令解码和操作数获取
EX - 指令执行
MEM - 内存访问
WB - 回写
IF IF阶段可以使用以下公式进行总结: IR <- Mem(PC) PC <- PC + 4 其中PC是下一个指令的程序计数器或地址,IR是要执行的指令。 在这个阶段,CPU使用PC获取指令,然后将PC指向下一个指令。在这里,我们假设每个指令需要4个字节。
ID ID阶段可以使用以下公式进行总结: A <- Regs|IR[10:6]] B<- Regs[IR[15:11]] Imm < - IR[15:0] 其中A和B都是操作数,Imm是立即操作数,Regs是寄存器文件。 在此阶段,CPU可以使用IR[10:6)和IR|15:11)作为寄存器索引,从寄存器文件中读取操作数,或从IR中提取立即操作数[15:0] EX EX阶段可以使用以下公式进行总结: ALU输出<-A op B(reg-to-reg操作) ALU输出<- A op Imm(reg-to-imm操作) ALU输出<- PC + Imm(计算分支的目标地址),其中op是指令定义的某个操作。
在此阶段,ALU可用于计算内存操作的有效地址,执行寄存器与寄存器/立即操作数操作,或计算分支的目标地址。分支条件也在这个阶段确定。 MEM MEM阶段可以使用以下公式进行总结:
内存load LMD <- MEM[ALU输出] 内存store MEM[ALU输出]<- B
如果(满足条件)PC <- ALU输出
其他PC <- PC + 4 其中LMD是pipeline寄存器,用于暂时保存从内存中加载的数据。 在此阶段,执行内存load和store操作。此外,分支业务也将在这个周期内完成。如果满足在EX阶段获得的条件,PC将加载EX阶段和程序分支的ALU输出;否则程序按顺序执行,PC将指向下一个指令。 WB WB阶段可以使用以下公式进行总结:
Regs|IR[20:16]] <- ALU输出(reg-to-reg操作) Regs|IR|15:11]] <- ALU输出(reg-to-imm操作) Regs[IR[15:11]] <- LMD(内存load) 在这个阶段,最终结果被写回寄存器文件。对于register 2 register操作,结果被写入由IR[20:16]索引的寄存器;对于register 2 imm操作,结果被写入由IR[15:11]索引的寄存器;对于内存load操作,加载到内存的数据被写入由IR索引的寄存器[15:11]。 结论 在计算机硬件面试中,熟悉MIPS 5-stage是必须的。面试官希望候选人充分了解每个pipeline state的功能。