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

1. 起因

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

2. 建议

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

3. 关于项目

3.1 优点

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

3.2 缺点

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

    todo 部分store、load指令有点问题

3.3 RISCV处理器核规格

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

  • 具有五级流水线;
  • 实现RV32I指令集;
  • 能够处理流水线冒险与前递;
  • 使用官方指令集测试文件进行测试;
  • 包含Makefile脚本,开箱即用

3.4 硬件架构图

3.5 项目文件层次

├── 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版》
手把手教你设计RISC-V 处理器 第0期-蓄势待发_哔哩哔哩_bilibili
大家一起从零设计RISC-V处理器(一)之开篇_risc-v设计_芯王国的博客-CSDN博客

来自广东
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇