(1)简单的算术操作指令:15条
(2)乘累加、乘累减指令
(3)除法指令
7.1 简单算术操作指令说明
- add、addu、sub、subu、slt、sltu指令
- addi、addiu、slti、sltiu
- clo、clz指令
- 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 流水线暂停机制的实现
- CTRL模块的实现
- 修改取指阶段
(1)修改PC模块
(2)修改IF/ID模块 - 修改译码阶段
(1)修改ID模块
(2)修改ID/EX模块 - 修改执行阶段
(1)修改EX模块
(2)修改EX/MEM模块 - 修改访存阶段
- 修改顶层模块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 测试除法指令实现效果