第7章:算术操作指令的实现

(1)简单的算术操作指令:15条
(2)乘累加、乘累减指令
(3)除法指令

7.1 简单算术操作指令说明

  1. add、addu、sub、subu、slt、sltu指令
  2. addi、addiu、slti、sltiu
  3. clo、clz指令
  4. multu、mult、mul指令

7.2 简单算术操作指令实现思路

根据不同的功能码确定执行不同的算术操作

修改OpenMIPS以实现简单算术操作指令

7.3.1 修改译码阶段的ID模块

在这里插入图片描述

7.3.2 修改执行阶段的EX模块

7.4 测试简单算术操作指令实现效果

7.5 流水线暂停机制的设计与实现

7.5.1 流水线暂停机制的设计

  • 因为OpenMIPS设计乘累加等指令在流水线执行阶段占用多个时钟周期,因此需要暂停流水线,以等待这些多轴器指令执行完毕
  • 方法是保持指令地址PC的值不变
  • 添加CTRL模块,根据暂停请求信号判断,从而控制PC的值
    -

7.5.2 流水线暂停机制的实现

  1. CTRL模块的实现
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 修改取指阶段
    (1)修改PC模块
    (2)修改IF/ID模块
  3. 修改译码阶段
    (1)修改ID模块
    (2)修改ID/EX模块
  4. 修改执行阶段
    (1)修改EX模块
    (2)修改EX/MEM模块
  5. 修改访存阶段
  6. 修改顶层模块OpenMIPS

7.6 乘累加、乘累减指令说明

7.7 乘累加、乘累减指令实现思路

7.8 修改OpenMIPS以实现乘累加、乘累减指令

7.8.1 修改译码阶段的ID模块

7.8.2 修改执行阶段的EX模块

7.8.3 修改EX/MEM模块

7.8.4 修改OpenMIPS模块

7.9 测试乘累加、乘累减指令实现效果

7.10 除法指令说明

7.11 除法指令实现思路

7.11.1 试商法

  • 对于32位的除法、至少需要32个时钟周期
    在这里插入图片描述
    在这里插入图片描述

7.11.2 实现思路

7.11.3 系统结构的修改

在这里插入图片描述

7.12 修改OpenMIPS以实现除法指令

7.12.1 增加DIV模块

在这里插入图片描述

  • DIV模块主要部分是一个状态机,共有四个状态:
    在这里插入图片描述

7.12.2 修改译码阶段的ID模块

7.12.3 修改执行阶段的EX模块

在这里插入图片描述

7.12.4 修改OpeMIPS模块

7…13 测试除法指令实现效果

在这里插入图片描述
在这里插入图片描述

7.14 数据流图的修改

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值