与本项目配套的设计文档[《从零开始写RISC-V处理器》](https://liangkangnan.gitee.io/2020/04/29/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%86%99RISC-V%E5%A4%84%E7%90%86%E5%99%A8/),已经更新完成。
本项目目前一共有3个分支,分别是master、bram和verilator,分别对应入门、进阶和高级三个级别,大家可以根据自身情况选择。
我建了一个RISC-V技术交流的微信群,如果对RISC-V(不限于本项目)感兴趣的话可以发邮件给我。
**本项目是一直在更新的,verilator分支持续开发中**,如果哪天不再更新了,我会特别说明的。
如果对本项目有疑问或者建议的话,优先通过邮件交流,谢谢。
# 1.初衷
本开源项目的初衷是本人想入门RISC-V,熟悉RISC-V的指令内容和汇编语法。
本人对RISC-V很感兴趣,很看好RISC-V的发展前景,觉得RISC-V就是CPU中的Linux。由于RISC-V是这两年才开始迅速发展的,因此关于RISC-V的学习参考资料目前还很少,特别是适合入门的资料,因此学习起来进度很缓慢,于是萌生了自己从零开始写RISC-V处理器核的想法。
本人是一名FPGA小白,为了快速入门、深入掌握RISC-V,我开始了学习FPGA和verilog的"艰难"历程。我工作的内容是和嵌入式软件相关的,平时根本不会接触到FPGA,也不会用到RISC-V,因此只能用业余时间来学习RISC-V。
网上有不少关于RISC-V的开源项目,但是大多都写得很"高深",对于我这种小白来说学习起来是非常吃力的,不太适合入门。本项目目前的代码量非常少,是很简单易懂的,对于想入门RISC-V的同学来说是一个很好的参考,希望能够吸引更多的同学参与到RISC-V的学习中来,促进RISC-V的发展,如果能起到抛砖引玉的作用的话那就更好了,也许说是砖的话就有点夸大了,但哪怕是起到一颗沙子的作用,也就足矣。
# 2.介绍
本项目实现的是一个单核32位的小型RISC-V处理器核(tinyriscv),采用verilog语言编写。设计目标是对标ARM Cortex-M3系列处理器。tinyriscv有以下特点:
1. 支持RV32IM指令集,通过RISC-V指令兼容性测试;
3. 采用三级流水线,即取指,译码,执行;
4. 可以运行C语言程序;
5. 支持JTAG,可以通过openocd读写内存(在线更新程序);
6. 支持中断;
6. 支持总线;
7. 支持FreeRTOS;
8. 支持通过串口更新程序;
9. 容易移植到任何FPGA平台(如果资源足够的话);
项目中的各目录说明:
**rtl**:该目录包含tinyriscv的所有verilog源码;
**sim**:该目录包含仿真批处理bat文件和脚本;
**tests**:该目录包含测试程序源码,其中example目录为C语言程序例程源码,isa目录为RV32指令测试源码;
**tools**:该目录包含编译汇编和C语言程序所需GNU工具链和将二进制文件转成仿真所需的mem格式文件的脚本,还有通过串口下载程序的脚本。
**pic**:存放图片;
**tb**:该目录包含仿真的testbench文件;
**fpga**:存放FPGA相关文件,比如约束文件;
tinyriscv的整体框架如下:
![tinyriscv整体框架](./pic/arch.jpg)
tinyriscv目前外挂了6个外设,每个外设的空间大小为256MB,地址空间分配如下图所示:
<img src="./pic/addr_alloc.jpg" alt="地址空间分配" style="zoom:70%;" />
# 3.CoreMark测试
目前tinyriscv在Xilinx Artix-7 35T FPGA平台(时钟50MHz)上运行CoreMark跑分程序的结果如下图所示:
![tinyriscv跑分](./pic/tinyriscv_coremark.png)
可知,tinyriscv的跑分成绩为2.4。
选了几款其他MCU的跑分结果如下图所示:
![其他MCU跑分结果](./pic/other_coremark.png)
更多MCU的跑分结果,可以到[coremark](https://www.eembc.org/coremark/scores.php)官网查询。
# 4.如何使用
本项目可以运行在Windows和Linux平台(macOS平台理论上也是可以的),编译仿真工具使用的是iverilog和vpp,波形查看工具使用的是gtkwave。
## 4.1Windows平台环境搭建
在使用之前需要安装以下工具:
1. 安装iverilog工具
可以在这里[http://bleyer.org/icarus/](http://bleyer.org/icarus/)下载,安装过程中记得同意把iverilog添加到环境变量中,当然也可以在安装完成后手动进行添加。安装完成后iverilog、vvp和gtkwave等工具也就安装好了。
2. 安装GNU工具链
可以通过百度网盘下载(链接: https://pan.baidu.com/s/1bYgslKxHMjtiZtIPsB2caQ 提取码: 9n3c),或者通过微云下载[https://share.weiyun.com/5bMOsu9](https://share.weiyun.com/5bMOsu9),下载完成后将压缩包解压到本项目的tools目录下。注意目录的层次结构,解压后的工具路径应该如下所示:
`tinyriscv\tools\gnu-mcu-eclipse-riscv-none-gcc-8.2.0-2.2-20190521-0004-win64\bin\riscv-none-embed-gcc`
3. 安装make工具
可以通过百度网盘下载(链接: https://pan.baidu.com/s/1nFaUIwv171PDXuF7TziDFg 提取码: 9ntc),或者通过微云下载[https://share.weiyun.com/59xtmWR](https://share.weiyun.com/59xtmWR),下载完成后直接解压,然后将make所在的路径添加到环境变量里。
4. 安装python3
到[python官网](https://www.python.org/)下载win版本的python,注意要下载python3版本的。网速慢的同学可以通过百度网盘下载(链接: https://pan.baidu.com/s/1gNC8L5dZTsN6E5TJD2rmnQ 提取码: 3b4t),或者通过微云下载[https://share.weiyun.com/XwzSQHND](https://share.weiyun.com/XwzSQHND)。安装完后将python添加到环境变量里。
5. 下载tinyriscv代码
**使用git clone命令下载,不要使用zip方式下载**,否则有些文件会有格式问题。
`git clone https://gitee.com/liangkangnan/tinyriscv.git`
## 4.2Linux平台环境搭建
这里以Ubuntu系统为例进行说明。
1. 下载iverilog源码
`git clone https://github.com/steveicarus/iverilog.git`
2. 切换到v11分支(必须用V11或以上的版本)
`git checkout v11-branch`
3. 安装依赖
`sudo apt-get install autoconf gperf flex bison build-essential`
4. 编译、安装iverilog和vvp
```
sh autoconf.sh
./configure
make
make install
```
5. 创建python软链接
`sudo ln -s /usr/bin/python3.8 /usr/bin/python`
其中/usr/bin/python3.8对应你实际安装的python版本。
6. 安装gtkwave
`sudo apt-get install gtkwave`
7. 安装GNU工具链
可以从百度网盘下载(链接:https://pan.baidu.com/s/10uLZYf_cgtH94kZI_N6JhQ
提取码:uk0w)或者自行下载其他版本的,下载后解压到tools目录下。
最后,需要确认tests/example/common.mk文件里的这几行内容要与你安装的工具链对应得上。
![toolchain](./pic/toolchain.png)
## 4.3运行指令测试程序
这里以Windows平台为例进行说明,Linux平台是类似的。
### 4.3.1 运行旧的指令测试程序
旧的指令测试程序属于比较早的指令兼容性测试方法,虽然目前RISC-V官方已经不更新了,但仍然是一个比较好的测试参考。
下面以add指令为例,说明如何运行旧的指令测试程序。
打开CMD窗口,进入到sim目录,执行以下命令:
```python .\sim_new_nowave.py ..\tests\isa\generated\rv32ui-p-add.bin inst.data```
如果运行成功的话就可以看到"PASS"的打印。其他指令使用方法类似。
![](./pic/test_output.png)
也可以一次性对所有指令进行测试,方法如下。
打开CMD窗口进入到sim目录下,执行以下命令:
`python .\test_all_isa.py`
### 4.3.2运行新的指令测试程序
新的指令兼容性([riscv-compliance](https://github.com/riscv/riscv-compliance))测试项相对于旧的指令兼容性测试项来说对指令的测试更加严谨,可以精确到每一条指令的运行结果,而且RISC-V官方一直在更新。
下面以add指令为例,说明如何运行新的指令测试程序。
打开CMD�
tinyriscv工程文件
需积分: 0 124 浏览量
更新于2023-08-18
2
收藏 71.26MB RAR 举报
在IT行业中,FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它允许开发者根据需求定制硬件电路。RISC-V(Reduced Instruction Set Computer Architecture)则是一种开放源码的指令集架构,旨在提供高效、简洁且可扩展的处理器设计方案。"tinyriscv"项目将这两者结合,构建了一个适用于FPGA平台的RISC-V SOC(System on Chip)系统。下面我们将深入探讨这个项目中涉及的关键知识点。
1. RISC-V架构:RISC-V是一种精简指令集,其设计目标是减少指令数量,提高执行效率。它支持多种变体,包括I(整数)、M(乘法和除法)、A(原子操作)、C(压缩指令)和F/D(浮点运算)。在tinyriscv工程中,可能会使用I和M变体来实现基础的CPU功能。
2. FPGA开发:FPGA不同于传统的ASIC(Application-Specific Integrated Circuit),它可以被用户多次配置,以适应不同的硬件逻辑。开发FPGA项目通常涉及硬件描述语言(如Verilog或VHDL)编程,通过这些语言,开发者可以定义电路逻辑并将其编译到FPGA芯片中。
3. SoC设计:SoC是指在一个芯片上集成多个功能单元,包括CPU、内存、外设接口等。tinyriscv项目中的SoC设计可能包括RISC-V核心、内存控制器、I/O接口以及必要的互连逻辑。
4. Verilog/VHDL:作为硬件描述语言,Verilog和VHDL用于编写FPGA的设计代码。tinyriscv的源代码很可能用这两种语言之一编写,描述了RISC-V CPU和其他系统的组件。
5. FPGA工具链:在开发过程中,开发者会使用工具链,包括IP核生成器(如Xilinx Vivado或Intel Quartus)、综合器(将高级语言转化为门级网表)、布局布线工具(将网表映射到具体FPGA资源)以及仿真器(验证设计功能)。
6. 编程与调试:对于tinyriscv这样的FPGA SoC系统,开发者需要编写固件(通常是汇编或C/C++代码)并在硬件上运行。JTAG或SPI等接口可能用于加载程序和进行调试。
7. RISC-V模拟器与软件工具:在实际设计前,开发者可能先在软件模拟器(如spike或 qemu-riscv)上测试RISC-V指令集,确保软件的兼容性和正确性。
8. IP核:在tinyriscv项目中,RISC-V CPU可能作为一个预先设计好的IP(Intellectual Property)核存在,这可以简化设计流程并提高效率。
9. 软硬协同设计:在SoC中,硬件和软件必须紧密协作。tinyriscv项目可能涉及到如何优化硬件以更好地适应特定软件的需求,或者反过来,调整软件以利用硬件的特性。
tinyriscv项目是一个融合了RISC-V架构、FPGA技术、SoC设计、硬件描述语言以及软件开发等多个IT领域的综合性工程。通过这个项目,开发者可以学习到从底层硬件到上层软件的完整系统设计流程。
skyer_lhb
- 粉丝: 306
- 资源: 1
最新资源
- 毕设和企业适用springboot全渠道电商平台类及图书管理系统源码+论文+视频.zip
- 毕设和企业适用springboot全渠道电商平台类及市场营销自动化平台源码+论文+视频.zip
- 毕设和企业适用springboot全渠道电商平台类及直播流媒体平台源码+论文+视频.zip
- 毕设和企业适用springboot人工智能类及资源调度平台源码+论文+视频.zip
- 毕设和企业适用springboot人力资源管理类及电商产品推荐平台源码+论文+视频.zip
- 毕设和企业适用springboot人力资源管理类及城市智能运营平台源码+论文+视频.zip
- 毕设和企业适用springboot社交互动平台类及个性化广告平台源码+论文+视频.zip
- 毕设和企业适用springboot社交电商类及自动化控制系统源码+论文+视频.zip
- 毕设和企业适用springboot社交互动平台类及餐饮管理平台源码+论文+视频.zip
- 毕设和企业适用springboot全渠道电商平台类及智能交通大数据平台源码+论文+视频.zip
- 毕设和企业适用springboot全渠道电商平台类及智能农业平台源码+论文+视频.zip
- 毕设和企业适用springboot人才招聘类及餐饮管理平台源码+论文+视频.zip
- 毕设和企业适用springboot人力资源管理类及环保监控平台源码+论文+视频.zip
- 毕设和企业适用springboot人力资源管理类及活动管理平台源码+论文+视频.zip
- 毕设和企业适用springboot人力资源管理类及健康管理平台源码+论文+视频.zip
- 毕设和企业适用springboot社交互动平台类及环境监控平台源码+论文+视频.zip