2019-12-04 00:47:19 +00:00
|
|
|
|
###1.初衷
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
本开源项目的初衷是本人想入门riscv,熟悉riscv的指令内容和汇编语法。
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
本人对riscv很感兴趣,很看好riscv的发展前景,觉得riscv就是cpu界中的linux。由于riscv是这两年才开始迅速发展的,因此关于riscv的学习参考资料目前还很少,特别是适合入门的资料,因此学习起来进度很缓慢,于是萌生了自己从零开始写riscv处理器核的想法。
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
本人是一名fpga小白,为了快速入门、深入掌握riscv,我开始了学习fpga和verilog的"艰难"历程。我工作的内容是和嵌入式软件相关的,平时根本不会接触到fpga,也不会用到riscv,因此只能用业余时间来学习riscv,在经过断断续续学习fpga和verilog一个多月后,总算有点成果了,也即本项目。
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
网上有不少关于riscv的开源项目,但是大多都写得很"高深",对于我这种小白来说学习起来是非常吃力的,不太适合入门。本项目目前的代码量非常少,是很简单易懂的,对于想入门riscv的同学来说是一个很好的参考,希望能吸引更多的同学能够参与到riscv的学习中来,促进riscv的发展,如果能起到抛砖引玉的作用的话那就更好了,也许说是砖的话或者有点夸大了,但哪怕是起到一颗沙子的作用,也就足矣了。
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
###2.介绍
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
本项目实现的是一个微riscv处理器核(tinyriscv),用verilog语言编写,只求以最简单、最通俗易懂的方式实现riscv指令的功能,因此没有特意去对代码做任何的优化,因此你会看到里面写的代码有很多冗余的地方。tinyriscv处理器核有以下特点:
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
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;
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
2)采用三级流水线,即取指,译码、访存、执行,回写;
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
3)可以运行简单的c语言程序;
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
项目中的各目录说明:
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
rtl:该目录包含tinyriscv核的所有verilog源码;
|
2019-12-03 01:53:47 +00:00
|
|
|
|
|
2019-12-04 00:47:19 +00:00
|
|
|
|
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/](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"的打印。其他指令使用方法类似。
|
|
|
|
|
|
|
|
|
|
![](data:image/*;base64,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
|
|
|
|
|
|
|
|
|
|
###4.未来计划
|
|
|
|
|
|
|
|
|
|
4.1支持乘、除法指令;
|
|
|
|
|
|
|
|
|
|
4.2在真实的FPGA平台(xilinx artix-7)上跑起来;
|
|
|
|
|
|
|
|
|
|
4.3……
|