本人小白一枚,在学习 FPGA 的过程中偶然刷到了 tinyriscv 这个开源项目,并且自己对计算机体系结构的知识也很感兴趣,所以想参考这个开源项目做一个基于 RISC-V 指令集的 CPU。
目前本项目的 CPU 端目前大致已经开发完毕,并且成功把 RT-Thread nano 内核移植到本 CPU 上运行。如果大家对 RISC-V CPU 或者 RT-Thread 感兴趣的话,欢迎大家 star~
本项目实现的是一个单核 32 位的小型 RISC-V 处理器核,采用 verilog 语言编写。有如下特点:
本项目目录结构:
项目架构图:
本项目 FPGA 部分的开发是在 Windows 平台上进行的,开发软件使用 Quartus,仿真使用 ModelSim,FPGA 相关的代码全在 FPGA 目录下。
C 程序(如 rt-thread 操作系统)的编译和 python 脚本的执行是可以双平台的,Windows 和 Ubuntu 都支持。
Ubuntu 版本:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.2 LTS
Release: 20.04
Codename: focal
$ uname -r
5.15.0-76-generic
安装Ubuntu 20.04官方提供的 GNU工具链:
sudo apt update
sudo apt install build-essential gcc make perl dkms git gcc-riscv64-unknown-elf
首先选择好自己板子的型号,下面是我的板子的型号:
然后配置引脚,clk 接你板子的系统时钟,rst_n 接上板子的复位按键,gpio 接上板子的 led,uart_debug_pin 接上板子的任意按键(这里接的 key1),uart_rx 和 uart_tx 分别接板子的串口接收与发送端口:
有两种将编译好的二进制程序在本 CPU 上执行的方法。
第一种:直接作为 FPGA 比特流的一部分下载到板子上。
python ../../tools/bin_to_mem.py led_flow.bin led_flow.inst
第二种:使用串口烧录程序。
serial_utils
目录,先按住 key1 不动:
# 这里的 COM 号要根据你自己的来选,我这里是 COM3
python .\serial_send.py COM3 .\binary\led_flow.bin
两种方法相比,第一种方法更为稳妥,第二种方法更为灵活,这里更建议大家使用第一种方法,在程序出问题的时候,第一种方法还可以使用 modelsim 仿真调试。
第二种方法目前还不太稳定,如果遇到第二种方法烧录失败可以多烧录几次(可能因为接触不良),或者尝试一下第一种方法。
测试集存放在 tests/test_case
目录下,以 I-ADD-01.elf.data 为例,首先修改仿真文件 tb_riscv_top 的文件路径:
然后使用 modelsim 软件进行仿真,仿真完后可以看到 tests/output/rv32i
目录下 I-ADD-01.elf.out 文件更新,然后运行 compare.py 脚本进行比对:
python ./compare.py rv32i
运行后可以看到指令测试结果 PASS。
2023年6月13号:第一次提交。
2023年6月20号:添加串口烧录模块,可以通过串口下载程序到 rom 中。
2023年6月28号:成功将cpu移植到板子上,并且跑起 c 实现的流水灯程序。
2023年7月2号:更新了 rom 和 ram 的存储模式,读出的数据要延后一个时钟周期,带来的好处是可以将 rom 和 ram 所使用的资源综合到 bram 上。
2023年7月22号:
2023年8月8号
2023年8月13号
2023年9月11号
2023年10月26号
mail:1468438331@qq.com
QQ 交流群:892873718
RISC-V处理器的设计与实现(三)—— 上板验证(基于野火征途Pro开发板)
RISC-V处理器设计(五)—— 在 RISC-V 处理器上运行 C 程序
下面是 tinyriscv 这个开源项目的地址,本项目很多思路和设计都参考了 tinyriscv 开源项目:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型