计算机组成实验系列二(基于流水线的 CPU)
基于流水线的 CPU
- CPU 数据通路
- CPU 控制器
github 项目地址:https://github.com/yishiyu/mipscpu
1. CPU 数据通路
本 CPU 根据《数字设计和计算机体系结构》设计
参考的数据通路如下,同时在这个基础上增加了支持 J 指令的数据通路
/example.png)
2. CPU 控制器
- 控制信号
- 指令格式
- 冒险检测与解决
2.1 控制信号
输出引脚 | 作用 |
---|---|
RegWrite | 当前指令需要写入寄存器 |
MemtoReg | 当前指令需要从存储器中获取数据并存入寄存器 |
MemWrite | 当前指令需要写入存储器 |
ALUCtrl | 指定 ALU 运算类型 |
ALUSrc | ALU 中 B 数据来源选择(寄存器/立即数) |
RegDst | 寄存器写入目的指定,指定需要写入的寄存器(Rt/Rd) |
BranchBEQ | 当前指令为 BEQ 指令,需要在指令译码阶段判断是否跳转 |
BranchJ | 当前指令为 J 指令,在指令译码阶段完成 J 跳转 |
2.2 指令格式
根据 MIPS 汇编指令的二进制码转换为对应的 ALU 操作指令
参考网址: CSDN 博客
ALU 操作码 | 运算 | Func 码 |
---|---|---|
000 | AND | 100100 |
001 | OR | 100101 |
010 | ADD | 100000 |
011 | SUB | 100010 |
100 | SLT | 101010 |
110 | NOR | 100111 |
111 | XOR | 100110 |
2.3 冒险检测与解决
已完成的指令
- R 型指令
- LW 指令
- SW 指令
- BEQ 指令
- J 指令
未完成指令
- ADDI 指令
已解决的冒险
- J 控制冒险
- BEQ 控制/数据冒险
- RAW 数据冒险(M 阶段和 W 阶段)
冒险,解决办法和测试指令
1 | # 1.RAW数据冲突 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 遗世の私语!