tinyriscv/README.md

48 KiB
Raw Blame History

###1.初衷

本开源项目的初衷是本人想入门riscv熟悉riscv的指令内容和汇编语法。

本人对riscv很感兴趣很看好riscv的发展前景觉得riscv就是cpu界中的linux。由于riscv是这两年才开始迅速发展的因此关于riscv的学习参考资料目前还很少特别是适合入门的资料因此学习起来进度很缓慢于是萌生了自己从零开始写riscv处理器核的想法。

本人是一名fpga小白为了快速入门、深入掌握riscv我开始了学习fpga和verilog的"艰难"历程。我工作的内容是和嵌入式软件相关的平时根本不会接触到fpga也不会用到riscv因此只能用业余时间来学习riscv在经过断断续续学习fpga和verilog一个多月后总算有点成果了也即本项目。

网上有不少关于riscv的开源项目但是大多都写得很"高深"对于我这种小白来说学习起来是非常吃力的不太适合入门。本项目目前的代码量非常少是很简单易懂的对于想入门riscv的同学来说是一个很好的参考希望能吸引更多的同学能够参与到riscv的学习中来促进riscv的发展如果能起到抛砖引玉的作用的话那就更好了也许说是砖的话或者有点夸大了但哪怕是起到一颗沙子的作用也就足矣了。

###2.介绍

本项目实现的是一个微riscv处理器核(tinyriscv)用verilog语言编写只求以最简单、最通俗易懂的方式实现riscv指令的功能因此没有特意去对代码做任何的优化因此你会看到里面写的代码有很多冗余的地方。tinyriscv处理器核有以下特点

1)实现了RV32I指令集通过riscv的RV32I指令兼容性测试支持以下指令add addi and andi auipc beq bge bgeu blt bltu bne fence_i jal jalr lb lbu lh lhu lw lui or ori sb sh sw sll slli slt slti sltiu sltu sra srai srl srli sub xor xori

2)采用三级流水线,即取指,译码、访存、执行,回写;

3)可以运行简单的c语言程序

项目中的各目录说明:

rtl该目录包含tinyriscv核的所有verilog源码

sim该目录包含仿真的顶层testbench代码和批处理bat文件

tests该目录包含测试程序源码其中example目录为c语言程序例程源码isa目录为RV32I指令测试源码

tools该目录包含编译汇编和c语言程序所需GNU工具链和将二进制文件转成仿真所需的mem格式文件的工具BinToMem。BinToMem_CLI.exe需要在cmd窗口下执行BinToMem_GUI.exe提供图形界面双击即可运行

###3.如何使用

本项目运行在windows平台编译仿真工具使用的是iverilog和vpp波形查看工具使用的是gtkwave。

在使用之前需要安装以下工具:

1)安装iverilog工具

可以在这里http://bleyer.org/icarus/下载安装过程中记得同意把iverilog添加到环境变量中当然也可以在安装完成后手动进行添加。安装完成后iverilog、vvp和gtkwave等工具也就安装好了。

2)安装GNU工具链

可以在通过百度云下载(链接: https://pan.baidu.com/s/1bYgslKxHMjtiZtIPsB2caQ 提取码: 9n3c)下载完成后将压缩包解压到本项目的tools目录下。

3)安装make工具

可以通过百度云下载(链接: https://pan.baidu.com/s/1nFaUIwv171PDXuF7TziDFg 提取码: 9ntc)下载完成后直接解压然后将make所在的路径添加到环境变量里。

下面以add指令为例说明如何使用本项目。

打开cmd窗口进入到sim目录执行以下命令

sim_new_nowave.bat ..\tests\isa\generated\rv32ui-p-add.bin inst.data

如果运行成功的话就可以看到"PASS"的打印。其他指令使用方法类似。

###4.未来计划

4.1支持乘、除法指令;

4.2在真实的FPGA平台(xilinx artix-7)上跑起来;

4.3……