如果我写的文章对你能有些许帮助,说明我做的事还算有点意义,欢迎留个赞哦~
有问题恳请指出,也欢迎探讨qq815506713
专栏其他文章链接:
从零开始写riscv处理器(零)写在前面
从零开始写riscv处理器(一)指令集
从零开始写riscv处理器(二)简单数据通路
从零开始写riscv处理器(三)全部指令数据通路
从零开始写riscv处理器(四)流水线结构
从零开始写riscv处理器(五)数据冒险:停顿与前递
从零开始写riscv处理器(六)控制冒险:流水线冲刷
从零开始写riscv处理器(七)cache基础
从零开始写riscv处理器(八)cache进阶
-----------------------------分割线-----------------------------
1. 全部指令数据通路
上一篇文章以一个简单的数据通路作为引例,数据通路支持执行R型、BEQ指令、Load/Store型指令,并且你已经知道各指令的通路。现在直接给出补全所有指令的数据通路如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/06520024b302b0f27db582cd4830a686.png)
2. 同之前的改变
- 主控单元增加了一个输入func3字段,输出多了memop信号,用于Load/Store类型指令加载/存储Word/HalfWord/Byte;
- 主控单元输出增加pc_rs1_sel信号,用去区分跳转地址是imm+pc还是imm+rs1(JAL、JALR);
- 主控单元删去Branch信号,改为由ALU单元直接输出跳转信号jump;
3. 各指令通路
各指令通路如下,同样地,暂不考虑控制单元。
R型指令数据通路:
![](https://img-blog.csdnimg.cn/img_convert/a5f64e2bb8e7785c14f6d27e467e4827.png)
I型指令数据通路:
![](https://img-blog.csdnimg.cn/img_convert/ccd5d648c3e05cc0d7e24858262d809e.png)
L型指令数据通路:
![](https://img-blog.csdnimg.cn/img_convert/d64ff929349ac627a274d872d441d81f.png)
S型指令数据通路:
![](https://img-blog.csdnimg.cn/img_convert/188716100250b413dde6655bed1f1399.png)
JALR型指令数据通路:
![](https://img-blog.csdnimg.cn/img_convert/1709f4914c29a69ad09d067e985e8dee.png)
JAL型指令数据通路:
![](https://img-blog.csdnimg.cn/img_convert/30dbd40d062b1a1204bbd496d83cf7cb.png)
B型指令数据通路:
![](https://img-blog.csdnimg.cn/img_convert/39621ff31b38faf002cbce8e364538a0.png)
LUI型指令数据通路:
![](https://img-blog.csdnimg.cn/img_convert/fcf4cd2d6b16db55040a3fb3c4e6e153.png)
AUIPC型指令数据通路:
![](https://img-blog.csdnimg.cn/img_convert/6a91bc59679908ac211b902bd9a67dbd.png)