第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 数据流图的修改

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tanfuz/article/details/113802257