作者:lantian2502889907 | 来源:互联网 | 2023-08-15 08:35
文章目录1.分析1.1指令1.2数据通路图和系统结构图的改变2.代码修改2.1HI、LO寄存器的实现2.2修改译码阶段—ID模块2.3修改执行阶段—EX模块、EXMEM模块2.4修
文章目录
- 1. 分析
- 2. 代码修改
- 2.1 HI、LO寄存器的实现
- 2.2 修改译码阶段—ID模块
- 2.3 修改执行阶段—EX模块、EX/MEM模块
- 2.4 修改访存阶段—MEM模块、MEM/WB模块
- 3. 测试5 移动操作指令
1. 分析
1.1 指令
- movn、movz指令
译码阶段新增:依据读取地址rt的值是否为0,判断是否写入目的寄存器 - mthi、mtlo指令
- 译码阶段,给出运算类型 alusel_o 、 运算子类型 aluop_o 的值 , 同时读出 rs 的值 。 由于 mthi 、 mtlo 不写通用寄存器 , 所以 wreg_o 为 WriteDisable ,wd_o为0 。
- 执行阶段,确定要写 HI 、 LO 寄存器的情况 , 以及要写入的值 , 并将这些信息传递到访存阶段 。
- 访存阶段,将这些信息再传递到回写阶段 。
- 回写阶段,依据这些信息修改 HI 、 LO 寄存器的值 (进行写操作)
- mfhi、mflo指令
需要读寄存器HI、LO,设计为在执行阶段读
1.2 数据通路图和系统结构图的改变
数据通路图主要有三个变化:
(1)增加了HILO寄存器模块,并且该模块放在回写阶段(红色方框)
(2)将HI、LO寄存器的值传递到执行阶段,在执行阶段增加了一个选择模块,用于选择要参与运算的数据,如果是mfhi、mfo指令,那么就会选择传递过来的HI、LO寄存器的值(红色线)
(3)数据转发(蓝色线)
图6.5 👇对于系统结构图的修改:
2. 代码修改
2.1 HI、LO寄存器的实现
两个寄存器的接口👇
2.2 修改译码阶段—ID模块
根据指令确定操作类型👇,只需根据功能码op3确定即可
2.3 修改执行阶段—EX模块、EX/MEM模块
基本都是新增接口
EX模块新增接口👇
EX/MEM模块新增接口👇
2.4 修改访存阶段—MEM模块、MEM/WB模块
MEM模块新增接口
MEM/WB模块新增接口
3. 测试5 移动操作指令
测试下面的指令,主要看寄存器$4和HI、LO寄存器的值,仿真验证正确
✔$4寄存器的值从 0x0 变为 0xffff0000 , 并保持两个时钟周期 , 然后变为0x05050000
✔HI寄存器的值,hi_o,从0x0变为0xffff0000,最终变为0x05050000
✔LO寄存器的值,从0x05050000变为0xffff0000,最终变为0x0