从零开始写riscv处理器(零)写在前面

如果我写的文章对你能有些许帮助,说明我做的事还算有点意义,欢迎留个赞哦~
有问题恳请指出,也欢迎探讨qq815506713

1. 起因

写下这篇专栏一方面是因近来学了riscv处理器,希望能写点笔记留存一下;另一方面也是应好友邓之邀,出一个不那么复杂便于初学者学习的小白教程。从开始学习RISCV处理器的时候我花了不少时间去找参考资料,但要么结构过于复杂不便于初学者理解,要么就是没有对照的结构图。所以,打算写一个更偏向于从零开始的小白教程,从指令集开始,再一步一步搭建RISCV处理器核,最后根据搭建的架构图再去写代码。

2. 建议

  1. 本项目RISCV处理器的设计参考《计算机组成与设计:硬件软件接口 RISC-V版》一书,如果时间充足的话非常建议先阅读该书前四章再来学习;
  2. 代码可在gitee下载 (没开源了,可有偿提供),在看代码之前,推荐先看本教程专栏,搭配食用效果更佳。
  3. 代码的使用方法详见工程文件中的README

3. 关于项目

  • 本项目用verilog语言实现了一个具有五级流水线的简单RISCV处理器核,实现RV32I指令集并验证了指令实现的正确性。项目文件里面包含所有的设计和测试文件以及完整的makefile脚本,可以“开箱即用”。
  • 本项目RISCV处理器的设计参考《计算机组成与设计:硬件软件接口 RISC-V版》一书,如果时间充足的话非常建议先阅读该书前四章再来学习;测试部分使用官方的指令集txt文件测试。目前实现的架构相对简单,现在分享出来一是为了当个阶段笔记记录,一是为了给同样想了解RISCV处理器的初学者一个参考。由于笔者也是新手一枚,水平实在有限,如有错误,望指正!咨询相关问题,欢迎联系!

3.1 优点

  • 实现的RISCV处理器核比较基础,对初学小白相对友好;
  • 项目文件里面包含所有的设计、测试、脚本文件以及完整的Makefile脚本,可以“开箱即用”;
  • 教程专栏里面有RISCV处理器核的搭建过程以及最终的架构图,可以给代码提供参考;
  • 代码具有详细的注释;

3.2 缺点

  • 实现的RISCV处理器核比较基础,例如中断、cache缓存 (已填坑)等暂未实现;
  • 目前只测试了各指令的执行,测试方法待完善;
    #todo 部分store指令有点问题

3.3 RISCV处理器核规格

本项目实现的RISCV处理器核特点如下:

  • 具有五级流水线;
  • 实现RV32I指令集(除fence、ecall、ebreak);
  • 能够处理流水线冒险与前递;
  • 使用官方指令集测试文件进行测试;
  • 包含Makefile脚本,开箱即用
  • L1 Data Cache规格如下:
    • Size : 1KB
    • Associative :2-way
    • Replacement policy : LRU
    • Cache line size : 32 Bytes
    • Write hit policy : write back
    • Write miss policy : write allocate

3.4 硬件架构图

在这里插入图片描述

3.5 项目文件层次

RISCV_V1_20230831
├── doc
│   └── riscv-spec-20191213.pdf
├── Makefile
├── pic
│   ├── Hardware_Architecture.png
│   ├── RISCV_assembly_instructions.jpg
│   └── RV32I_Base_Instruction_Set.jpg
├── README.txt
├── rtl
│   ├── chip
│   │   └── riscv_soc.v
│   ├── riscv_core
│   │   ├── alu_add.v
│   │   ├── alu_ctrl.v
│   │   ├── alu_ex.v
│   │   ├── defines.v
│   │   ├── dff.v
│   │   ├── ex_mem.v
│   │   ├── Hazard_Detection_Forwarding_unit.v
│   │   ├── id_ex.v
│   │   ├── if_id.v
│   │   ├── imm_gen.v
│   │   ├── jump_ctrl_unit.v
│   │   ├── main_ctrl.v
│   │   ├── mem_wb.v
│   │   ├── mux2.v
│   │   ├── mux3.v
│   │   ├── or_gate.v
│   │   ├── pc.v
│   │   ├── regs.v
│   │   └── riscv_core.v
│   └── wrap
│       ├── dram.v
│       ├── dual_ram.v
│       └── iram.v
├── script
│   ├── count.pl
│   └── report.pl
├── sim
│   ├── filelist.f
│   ├── insts.txt
│   └── wave_rcfiles
└── tb
    ├── generated
    │   ├── ...
    ├── my_inst_txt
    │   ├── blt_inst_test.txt
    │   ├── bne_inst_test.txt
    │   ├── ex_mem_risk.txt
    │   ├── ex_risk.txt
    │   ├── jal_inst_test.txt
    │   ├── load_use_risk.txt
    │   └── mem_risk.txt
    ├── inst_txt
    │   ├── ...
    └── riscv_soc_tb.v
13 directories, 323 files

4. 后续计划

增加中断
增加cache缓存 (已填坑)
完善处理器的测试,跑个回归测试…
使用编译器运行c语言代码

5. 文章链接

从零开始写riscv处理器(一)指令集
从零开始写riscv处理器(二)简单数据通路
从零开始写riscv处理器(三)全部指令数据通路
从零开始写riscv处理器(四)流水线结构
从零开始写riscv处理器(五)数据冒险:停顿与前递
从零开始写riscv处理器(六)控制冒险:流水线冲刷
从零开始写riscv处理器(七)cache基础
从零开始写riscv处理器(八)cache进阶
未完待续…

参考资源
《计算机组成与设计:硬件软件接口 RISC-V版》

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值