MIPS处理器 指令执行过程

目录

https://blog.csdn.net/weixin_45792450/article/details/109314693


指令执行阶段

单个时钟周期内执行单个阶段,指令执行有序执行

执行数据通路

注:上述图中ALUOp=01应该为:ALU执行减法

执行过程解析

取指-IF阶段

主要任务:从内存中取出指令,并计算下一条指令的地址

从内存取出指令:控制器设置控制信号MemRead和IRWrite有效,将IorD置0以选择PC作为内存地址来源

计算下一条地址:控制器置控制信号ALUSrcA为0,ALUSrcB为01,ALUOp为00(加法运算),ALU实现计算PC+4,置PCSrc为00,下一条指令地址成功存入PC

指令译码和读取寄存器-ID阶段

主要任务:翻译指令和准备数据,IF和ID阶段均不知道指令内容

由于指令没有具体翻译出来,具体执行何种指令是未知的,此时我们需要多做一些准备,以应对可能需求,尽管可能有些步骤在某些指令看来是多余的,但所幸没有坏处。

读取寄存器:读取寄存器Rs和Rt,并分别存入寄存器A和B

如果是分支指令,下一周期可能还要用到PC的地址,故需要提前准备

准备偏移地址:控制器置ALUSrcA=0,ALUSrcB=11,ALUOp=00(加法运算),这样偏移地址就计算出来,并存入寄存器ALUOut了

指令执行,存储地址计算或者分支完成-EX阶段

主要任务:完成具体的指令操作或者准备具体的指令数据

访存指令:控制器置ALUSrcA=1,ALUSrcB=10,ALUOp=00,ALU将操作数相加,得到存储地址,存入ALUOut

此处考虑R型的运算指令,立即数型的运算指令对比之下不难实现。

运算指令:控制器置ALUSrc=1,ALUSrcB=00,ALUOp=10,完成算术运算,结果存入ALUOut

分支指令:控制器置ALUSrcA=1,ALUSrcB=00,ALUOp=01,以进行等值测试;置PCWriteCond=1,PCSrc=01,若ALU的零输出为1,与PCWriteCond做与运算得1,最后写入运算后的PC值,否则不做任何处理。

跳转指令:控制器置PCSrc=10,PCWrite=1,通过一个或门后将跳转地址送入PC

存储器访问或R型指令完成-WB阶段&MeM阶段

这个阶段的R型指令会将结果写回寄存器,对访存指令来说将进行访存操作

运算指令:控制器置RegDst=1,RegWrite=1,MemtoReg=0,向寄存器Rd存入计算结果

访存指令:若为取字指令,则从内存读出数据,并写入MDR;若为存字指令,则直接将数据写入内存。控制器置MemRead或MemWrite=1,IorD=1,实现数据直接存入内存或者从内存取数据到MDR。

取字指令的尾声:这一步将MDR的数据写入对应寄存器。控制器置MemtoReg=1,RegWrite=1,RegDst=0,实现寄存器数据的写入。

  • 7
    点赞
  • 29
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

梦星辰.

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值