Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RISCV软核picorv32
RISCV蜂鸟E203
hbird
在 Picorv32 / 蜂鸟 E203 软核上运行 RT-Thread
发布于 2020-11-28 03:35:44 浏览:2216
订阅该版
[tocm] 这篇文章主要介绍一下如何在2个FPGA软核上运行 RT-Thread。首先会介绍一下我用的 FPGA,接下来分别介绍在 蜂鸟 E203 和 picorv32 上运行 RT-Thread。 > 如果大家对如何在 FPGA 上造 CPU 感兴趣的话,Coursera 上有一门课 nand2tetris 挺有意思的,下面是2个链接分别是课程链接和在FPGA上的实现。 - https://www.coursera.org/learn/build-a-computer - https://github.com/wuhanstudio/nand2tetris-iverilog -------------------- ## 0. FPGA 首先介绍一下我用的 FPGA 开发板,也就是荔枝糖 (EG4S20),这块开发板性价比应当算是很高了,100RMB有20K逻辑单元(LUT4/LUT5混合架构),130KB SRAM,32bit 位宽 64MBit SDRAM,用来跑 RISC-V 的软核相当合适了。 ![tang.jpg](/uploads/20201128/f1daf51fb61bcd9a809b7c92e929e156.jpg) ![TANG_DD.jpg](/uploads/20201128/696bc19dd0a56435828b01e6221f98d9.jpg) 为了给这块 FPGA 烧录 bitstream 把它变成软核,需要下载对应的IDE,下载链接在这里 http://dl.sipeed.com/。依次进入 Tang -> Premier -> IDE,下载最新的 TD Release 和最新的证书 Anlogic.lic,证书下载下来后替换安装路径 license 下的默认证书就可以正常使用了。 详细的安装步骤在这里也有介绍 http://tang.lichee.pro/ -------------------- ## 1. 蜂鸟E203 首先我们需要把FPGA变成一块RISC-V的开发板,因此需要烧录蜂鸟E203的bitstream,接下来就是把它当做单片机一样使用,上传固件了。 ### 1.1 下载源码 为了方便,我把fpga的软核源码和RTT的固件源码放在了同一个仓库里。 ``` $ git clone https://github.com/wuhanstudio/hbird_e203_tang $ cd hbird_e203_tang $ git submodule init $ git submodule update ``` ### 1.2 下载比特流 源码下载下来之后,Tang_E203_Mini 这个目录是软核的 Verilog 代码,hbird-sdk 则是蜂鸟E203的SDK。 接下来用 TD 软件打开源码 Tang_E203_Mini/project/e203egmini_new.al 下的项目,可以直接点 Generate Bitstream 生成比特流上传,当然上传之前也可以在左下角 User Constraints 里面检查一下引脚分配是对的。 ![td.png](/uploads/20201128/cd2f976f53192d82f43834b94c2bf3cd.png) Bitstream 上传成功之后,这块 FPGA 开发板就是一个 RISC-V 单片机了,可以对照下面的引脚图把 JTAG 连接好,就可以上传 RT-Thread 固件了。 ![newtang_pinout.png](/uploads/20201128/980216ce076c1f4fc0fe92559dcb3da4.png) ### 1.3 上传固件 在编译上传之前,可以去芯来科技官网下载对应的 GCC 编译器和 OpenOCD,https://nucleisys.com/download.php,并且把他们安装在平级的目录下,比如: ``` nuclei/ --> gcc --> openocd ``` 详细的说明在蜂鸟 hbird-sdk 的官网也有介绍 https://doc.nucleisys.com/hbirdv2/quick_start/sdk.html。 工具链配置好之后我们就可以一步编译上传固件了: ``` $ cd hbird-sdk/application/rtthread/msh/ $ export NUCLEI_TOOL_ROOT=/opt/nuclei/ # replace with your path $ export PATH=$NUCLEI_TOOL_ROOT/gcc/bin:$NUCLEI_TOOL_ROOT/openocd/bin:$PATH $ make SOC=hbird BOARD=hbird_eval CORE=e203 upload ``` 如果一切正常的话,按照上面的引脚图接好串口(和 FPGA 的引脚分配一致),就可以在控制台看到 RT-Thread 了: ``` \ | / - RT - Thread Operating System / | \ 3.1.3 build Nov 25 2020 2006 - 2019 Copyright by rt-thread team Hello RT-Thread! msh > ``` 这样就成功在蜂鸟E203软核上运行 RT-Thread,具体的移植感兴趣也可以对照仓库代码详细看。 -------------------- ## 2. Picorv32 首先介绍一下 picorv32,它也是一个 Verilog 实现的开源 RISC-V 软核 https://github.com/cliffordwolf/picorv32 这里流程和蜂鸟E203略有区别,因为 picorv32 原版是没有 JTAG 接口的,所以在 EG4S32 的实现直接就把固件放在了 Verilog 实现的 ROM 里面,因此我们需要先编译固件,然后把固件融合在比特流里一起上传。 ### 2.1 下载源码 同样我们先下载源码,为了方便起见,我依旧把FPGA和固件源码放在了同一个仓库里: ``` $ git clone https://github.com/wuhanstudio/picorv32_tang $ cd picorv32_tang $ git submodule init $ git submodule update ``` 如果大家不想自己编译工具链、编译固件,仓库里我也放了预编译好的固件,这样大家可以直接跳过 2.2, 2.3,直接去 2.4 最后一步。 ### 2.2 编译固件 在编译固件前,我们需要 GCC 编译器,这里可以去下载编译好的工具链,也可以自己编译,编译大概需要 20min (i7-8665). 详细的编译流程在这篇文章里也有介绍 https://pingu98.wordpress.com/2019/04/08/how-to-build-your-own-cpu-from-scratch-inside-an-fpga/ ``` $ sudo apt-get install autoconf automake autotools-dev curl libmpc-dev \ libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo \ gperf libtool patchutils bc zlib1g-dev git libexpat1-dev $ sudo mkdir /opt/riscv32i $ sudo chown $USER /opt/riscv32i $ git clone https://github.com/riscv/riscv-gnu-toolchain riscv-gnu-toolchain-rv32i $ cd riscv-gnu-toolchain-rv32i $ git checkout 411d134 $ git submodule update --init --recursive $ mkdir build; cd build $ ../configure --with-arch=rv32i --prefix=/opt/riscv32i $ make -j$(nproc) ``` 工具链准备好之后,我们就可以编译 RT-Thread 了。 ``` $ cd rtthread-nano/rt-thread/bsp/picorv32_blink/ $ mkdir build & cd build $ cmake ../ $ make ``` 这里我们会生成 rt-thread.bin,但是这是没法直接被 FPGA 使用的,FPGA 的 ROM 初始化需要用到 Generate Memory Initialization File (MIF) 格式,因此我们下面需要转换一下格式。 ### 2.3 生成 MIF 文件 这里我准备了一个 python 脚本方便直接把 bin 文件转换为 mif,顺便一提,这里的 ROM 大小是 32x8192 bit 也就是 32KB。 ``` # Copy generated rt-thread.bin out. $ cp rtthread-nano/rt-thread/bsp/picorv32_blink/build/rt-thread.bin bin2mif/ $ cd bin2mif # Generate MIF $ python3 bin2mif.py rt-thread.bin rt-thread.mif ``` 这样我们就可以把编译生成的 rt-thread.mif 放到 FPGA 的项目里替换了。 ``` $ cp bin2mif/rt-thread.mif picorv32_EG4S20/firmware/ ``` -------------------- ### 2.4 上传比特流 我们用 TD 打开源码 picorv32_EG4S20/RISC_V/RISC_V.al 下的项目文件,就可以生成比特流了。 ![td.png](/uploads/20201128/4f37d065373b19f623dc8060ec6174e9.png) 这里大家可以看看 User Constraints 下面的引脚分配,接上串口不出意外就可以看到 RT-Thread 了: ``` \ | / - RT - Thread Operating System / | \ 3.1.3 build Nov 25 2020 2006 - 2019 Copyright by rt-thread team Hello RT-Thread! msh > ``` ## 3. 项目链接 - picorv32 软核: https://github.com/wuhanstudio/picorv32_tang - 蜂鸟 E203 软核: https://github.com/wuhanstudio/hbird_e203_tang 最后感谢 stupid_bird 前期做的工作,我也是在他的基础上进行了一些优化总结。 - https://gitee.com/Stupid_bird/picorv32_EG4S20 - https://github.com/RT-Thread/rtthread-nano/pull/4
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
wuhanstudio
这家伙很懒,什么也没写!
文章
3
回答
243
被采纳
6
关注TA
发私信
相关文章
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
8
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
9
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
4
次点赞
Ghost_Girls
1
篇文章
7
次点赞
xiaorui
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部