# riscv-core **Repository Path**: ltzjs/riscv-core ## Basic Information - **Project Name**: riscv-core - **Description**: 本项目用verilog语言实现了一个具有五级流水线的简单RISCV处理器核,实现RV32I指令集并验证了每条指令实现的正确性。项目文件里面包含所有的设计和测试文件以及完整的makefile脚本,可以“开箱即用”。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-12-16 - **Last Updated**: 2023-12-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 0.从零开始写RISCV处理器 # 1. 概述 * 本项目用verilog语言实现了一个具有五级流水线的简单RISCV处理器核,实现RV32I指令集并验证了每条指令实现的正确性。项目文件里面包含所有的设计和测试文件以及完整的makefile脚本,可以“开箱即用”。 * 本项目RISCV处理器的设计参考《计算机组成与设计:硬件软件接口 RISC-V版》一书,如果时间充足的话非常建议先阅读该书前四章再来学习;测试部分使用官方的指令集txt文件测试。目前实现的架构很简单,很多功能都还没实现,处理器的测试还不完善,现在分享出来一是为了当个阶段笔记记录,一是为了给同样想了解RISCV处理器的初学者一个参考。由于[笔者](https://dphweb.cn/index/)也是新手一枚,水平实在有限,如有错误,望指正! * 在看代码之前,推荐先看笔者写的教程专栏:[从零开始写riscv处理器(零)写在前面 – Web of DPH (dphweb.cn)](https://dphweb.cn/index.php/2023/09/03/riscv0/),搭配食用效果更佳。 * 后续有时间考虑更新: * 增加中断 * 增加cache缓存 * 完善处理器的测试,跑个回归测试... **实现的RISCV处理器核硬件架构图如下:**
**项目文件层次结构如下**: `doc`文件夹里面是riscv手册;`pic`文件夹里面是硬件架构图; `rtl`文件夹里面是所有的设计文件,`sim`文件夹里面是仿真文件列表,`tb`里面的`generated`包含每条指令的各种形式:二进制,txt,反汇编、16进制等,可以通过里面的反汇编文件查看各指令测试文件执行了什么命令;`tb`里面的`hazard_test_inst`包含ex_mem_risk.txt和load_use_risk.txt两个文件,分别是针对EX&MEM冒险和Load-use型冒险的测试指令;`tb`里面的`inst_txt`只包含txt格式的每条指令。 RISCV_V1_20230831 ├── doc │   └── riscv-spec-20191213.pdf ├── Makefile ├── pic │   └── Hardware_Architecture.png ├── 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 ├── sim │   └── filelist.f └── tb ├── generated │   ├── ... ├── hazard_test_inst │   ├── ex_mem_risk.txt │   └── load_use_risk.txt ├── inst_txt │   ├── ... └── riscv_soc_tb.v 11 directories, 312 files # 2. 使用说明 项目中Makefile脚本是针对vcs+DVE环境写的,如果想要使用Makefile脚本来“开箱即用”的话,虚拟机里面需要装有vcs和DVE。 # 3. 如何跑起来 进入工程文件夹,打开终端:
输入`make help`查看make命令选项: **make comp**:编译设计文件 **make sim** :编译并仿真 **make simg**:编译后打开DVE界面进行仿真 **make clean**:清除仿真生成的文件
然后进行指令的测试仿真:输入`make sim test="*"`,进行指令`*`的测试,`*`是要测试指令的的名字小写,例如输入`make sim test="add"`,进行指令`add`的测试。一共有37条指令(RV32I指令集除FENCE、ECALL、EBREAK外都实现了hh),注意不要输错了。
如果指令测试通过会打印 pass!!!,测试失败打印fail信息。
如果要查看仿真波形可以使用**make simg**命令:同样地,输入`make simg test="*"`,即可打开DVE。在DVE中输入`run`命令进行仿真。
如果要清除仿真生成的文件,可以使用`make clean`命令。 至此,make命令已经已经全部介绍完了,剩下的就是测试你想要测试的指令了。 # 4. 参考资源 《计算机组成与设计:硬件软件接口 RISC-V版》 [手把手教你设计RISC-V 处理器 第0期-蓄势待发_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1ZA4y197ng/?spm_id_from=333.999.0.0) [大家一起从零设计RISC-V处理器(一)之开篇_risc-v设计_芯王国的博客-CSDN博客](https://blog.csdn.net/weixin_40377195/article/details/122830939?spm=1001.2014.3001.5502) # 5. 跟新日志 2023.08.31 :RISCV基础版 # 6. 后续计划 增加中断 增加cache缓存 完善处理器的测试,跑个回归测试... 使用交叉编译器运行c语言代码