差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
reindeer_step [2019/04/10 09:22] jingjing |
reindeer_step [2019/05/10 12:01] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
- | ==== 在小脚丫FPGA板上玩开源农场(FARM)——FPGA+Arduino+RISC-V+Make ==== | + | #### 在小脚丫FPGA板上玩转开源农场(FARM)FPGA+Arduino+RISC-V+Make |
----- | ----- | ||
- | 经过美国PulseRain公司Changyi Gu先生与小脚丫团队的不懈努力,在小脚丫CYC10开发板上成功移植了PulseRain Reindeer RISC-V 软核,并且开发了配套Arduino IDE的板子支持包,使得用户可以通过Arduino开发环境直接对嵌入到FPGA中的RISC-V软核进行编程。说到这种FPGA+Arduino+软核CPU的开发方式,是不是有种似曾相识的感觉,不错,之前我们就在STEP MAX10开发板上移植过PulseRain Technology的8051软核FT51-1T([[fpga项目_使用arduino玩转fpga|使用Arduino玩转FPGA]]),采用的正是这种嵌入式开发方式。 | + | 经过美国PulseRain Technology与小脚丫团队的不懈努力,在小脚丫Cyclone10开发板上成功移植了PulseRain Reindeer RISC-V 软核,并且开发了配套Arduino IDE的板子支持包,使得用户可以通过Arduino开发环境直接对嵌入到FPGA中的RISC-V软核进行编程。说到这种FPGA+Arduino+软核CPU的开发方式,是不是有种似曾相识的感觉,不错,之前我们就在STEP MAX10开发板上移植过PulseRain Technology的8051软核FT51-1T([[fpga项目_使用arduino玩转fpga|使用Arduino玩转FPGA]]),采用的正是这种嵌入式开发方式。 |
FPGA优秀的性价比和灵活性;开源硬件Arduino及其丰富的软件库;开源的编译器和工具链GNU;再加上如今热度空前的开源处理器RISC-V,形成了一种灵活快速的新型嵌入式开发方式FRAM: FPGA+Arduino+RISC-V+Make。 | FPGA优秀的性价比和灵活性;开源硬件Arduino及其丰富的软件库;开源的编译器和工具链GNU;再加上如今热度空前的开源处理器RISC-V,形成了一种灵活快速的新型嵌入式开发方式FRAM: FPGA+Arduino+RISC-V+Make。 | ||
行 12: | 行 12: | ||
在Changyi Gu即将出版的新书《基于FPGA与RISC-V的嵌入式系统设计》中将会详细讨论FRAM这一新型的嵌入式开发方式,敬请期待。 | 在Changyi Gu即将出版的新书《基于FPGA与RISC-V的嵌入式系统设计》中将会详细讨论FRAM这一新型的嵌入式开发方式,敬请期待。 | ||
- | 本次移植的RISC-V软核是由Changyi Gu主持设计的 PulseRain Reindeer 处理器内核,该软核在2018年由RISC-V 基金会官方举办的全球 Soft CPU 设计大赛中脱颖而出,荣获季军 ([[https://riscv.org/2018/10/risc-v-contest/|RISC-V SoftCPU Contest]])。PulseRain Reindeer是一个Von Neumann架构的软CPU,支持RISC-V RV32I [M]指令集,并具有2 x 2流水线架构,是综合平衡了速度和面积的结果,为所有FPGA平台上的软CPU提供了灵活的选择(参考[[https://github.com/PulseRain/Reindeer|RISCV RV32I[M] Soft CPU]])。 | + | 本次移植的RISC-V软核是由Changyi Gu主持设计的 PulseRain Reindeer 处理器内核,该软核在2018年由RISC-V 基金会官方举办的全球 Soft CPU 设计大赛中脱颖而出,荣获季军 ([[https://riscv.org/2018/10/risc-v-contest/|RISC-V SoftCPU Contest]])。PulseRain Reindeer是一个Von Neumann架构的软CPU,支持RISC-V RV32I [M]指令集,并具有2 x 2流水线架构,是综合平衡了速度和面积的结果,为所有FPGA平台上的软CPU提供了灵活的选择。Pulserain公司特别将该处理器为小脚丫实验平台做了升级改进,可以同时支持DRAM和FPGA片上BRAM,还对外部中断做了更好的支持。(参考源码[[https://github.com/PulseRain/Reindeer_Step|RISC-V Reindeer_Step Soft CPU]])。 |
下面我们就在小脚丫CYC10 FPGA开发板上玩一把开源FRAM。 | 下面我们就在小脚丫CYC10 FPGA开发板上玩一把开源FRAM。 | ||
行 39: | 行 39: | ||
* 下载程序到开发板并运行 | * 下载程序到开发板并运行 | ||
- | **步骤1:获取PulseRain Reindeer_Step MCU软核**\\ | + | **步骤1:获取PulseRain Reindeer_Step MCU软核** |
本次移植的是在PulseRain Reindeer处理器内核基础上,改进的Reindeer_Step软核,该软核根据STEP CYC10开发板的特点做了如下改进: | 本次移植的是在PulseRain Reindeer处理器内核基础上,改进的Reindeer_Step软核,该软核根据STEP CYC10开发板的特点做了如下改进: | ||
- | * 增加了SDRAM控制器,以利用板上的8M动态内存作为代码和数据内存 | + | |
+ | * 增加了SDRAM控制器,以利用板上的8M动态内存作为代码和数据内存。 | ||
* 增加了对板上硬件资源的支持,如目前增加了UART外设和GPIO外设,并持续更新中。 | * 增加了对板上硬件资源的支持,如目前增加了UART外设和GPIO外设,并持续更新中。 | ||
- | * 开发了相关的Arduino Support Package,使得用户可以通过Arduino开发环境来直接对软核处理器编程 | + | * 开发了相关的Arduino Support Package,使得用户可以通过Arduino开发环境来直接对软核处理器编程。 |
{{ :pulserain_reindeer_step_mcu软核结构.png?nolink&700 |}} | {{ :pulserain_reindeer_step_mcu软核结构.png?nolink&700 |}} | ||
Reindeer_Step的源代码已经开源在Github上,你可用如下的命令得到代码 : | Reindeer_Step的源代码已经开源在Github上,你可用如下的命令得到代码 : | ||
行 63: | 行 65: | ||
注意init和recursive前面是两个 - ,更新所有的submodules\\ (注意该软件遵循GNU通用公共许可证协议) | 注意init和recursive前面是两个 - ,更新所有的submodules\\ (注意该软件遵循GNU通用公共许可证协议) | ||
- | 步骤2:配置软核到STEP-CYC10 FPGA开发板\\ 直接从GitHub上clone的项目已默认编译出sof文件,编译后资源占用情况如下图所示: | + | **步骤2:配置软核到STEP-CYC10 FPGA开发板** |
+ | |||
+ | 直接从GitHub上clone的项目已默认编译出sof文件,编译后资源占用情况如下图所示: | ||
{{ :pulserain_reindeer_step_mcu软核编译报告.png?nolink&500 |}} | {{ :pulserain_reindeer_step_mcu软核编译报告.png?nolink&500 |}} | ||
使用Micro USB数据线连接PC和开发板后,使用Quartus Prime软件可以直接下载到FPGA。但是sof文件是下载到FPGA的SRAM,掉电会丢失,在CYC10上板载了一块SPI Flash,我们可以将sof文件转换为jic文件,通过JTAG下载到Flash中,每次上电时FPGA会将配置数据读取到SRAM中运行。 | 使用Micro USB数据线连接PC和开发板后,使用Quartus Prime软件可以直接下载到FPGA。但是sof文件是下载到FPGA的SRAM,掉电会丢失,在CYC10上板载了一块SPI Flash,我们可以将sof文件转换为jic文件,通过JTAG下载到Flash中,每次上电时FPGA会将配置数据读取到SRAM中运行。 | ||
行 69: | 行 73: | ||
如果不熟悉Quartus prime的使用可以先学习这里的上手教程quartus_prime的使用。\\ 如果不熟悉FPGA的开发可以先学习我们的FPGA入门教程。 | 如果不熟悉Quartus prime的使用可以先学习这里的上手教程quartus_prime的使用。\\ 如果不熟悉FPGA的开发可以先学习我们的FPGA入门教程。 | ||
- | 步骤3:Arduino IDE安装板卡支持包\\ Arduino IDE可以支持第三方板子的开发,但是需要安装第三方板卡的支持包。 | + | **步骤3:Arduino IDE安装板卡支持包** |
+ | |||
+ | Arduino IDE可以支持第三方板子的开发,但是需要安装第三方板卡的支持包。 | ||
打开Arduino IDE,打开 文件——首选项——附加开发板管理器网址,添加如下链接: **https://github.com/PulseRain/Arduino_RISCV_IDE/raw/master/package_pulserain.com_index.json**,确定后,打开 工具——开发板——开发板管理器,在搜索框中输入REINDEER,安装PACKAGE, 目前是1.1.5 版本。 | 打开Arduino IDE,打开 文件——首选项——附加开发板管理器网址,添加如下链接: **https://github.com/PulseRain/Arduino_RISCV_IDE/raw/master/package_pulserain.com_index.json**,确定后,打开 工具——开发板——开发板管理器,在搜索框中输入REINDEER,安装PACKAGE, 目前是1.1.5 版本。 | ||
{{ :安装板子支持包.png?nolink&500 |}} | {{ :安装板子支持包.png?nolink&500 |}} | ||
下载安装完成后在板卡管理器中有STEP CYC10 Board这个选项。 | 下载安装完成后在板卡管理器中有STEP CYC10 Board这个选项。 | ||
- | 步骤4:在Arduino IDE中开发应用程序\\ 在Arduino IDE 工具一栏,选择开发板为STEP CYC10 Board,下面我们可以开始开发自己的应用程序了,这里我们编写一段应用程序实现[[reindeer_step_arduino_app1|流水灯和串口打印]]的功能: | + | **步骤4:在Arduino IDE中开发应用程序** |
+ | |||
+ | 在Arduino IDE 工具一栏,选择开发板为STEP CYC10 Board,下面我们可以开始开发自己的应用程序了,这里我们编写一段应用程序实现[[reindeer_step_arduino_app1|流水灯和串口打印]]的功能: | ||
点击Arduino IDE的验证✔选项开始编译,程序编译结果会在下面的信息栏中给出。 | 点击Arduino IDE的验证✔选项开始编译,程序编译结果会在下面的信息栏中给出。 | ||
这里建议用户在Preferences对话框 (菜单File / Preferences) 中打开“Show Verbose Output”选项,这样信息栏中会给出详细的编译结果。 | 这里建议用户在Preferences对话框 (菜单File / Preferences) 中打开“Show Verbose Output”选项,这样信息栏中会给出详细的编译结果。 | ||
+ | {{ :程序编译报告.png?nolink&500 |}} | ||
+ | |||
+ | **步骤5:下载程序到开发板并运行** | ||
+ | |||
+ | Arduino开发板之所以能够使用串口实现一键下载,是因为在主控制器内部有Bootloader,而在我们的软核内部没有使用软件bootloader,而是在软核中嵌入了OCD (onchip debugger)模块,相当于MCU内部的硬件BOOT模块,通过外接串口同样可以实现串口一键下载。 | ||
+ | {{ :程序下载内部结构图.png?nolink&500 |}} | ||
+ | STEP CYC10板载了一片USB转串口芯片CP2102,通过Micro USB数据线连接到PC USB口,在设备管理器中会出现一个端口号,如COM4 | ||
+ | 在Arduino IDE中选择工具——端口,选择对应的端口号。在工具——编程器一栏选择编程器为USBasp。 点击上传按钮⇒,软件会对程序编译后下载到板子。 | ||
+ | {{ :程序上传报告.png?nolink&500 |}} | ||
+ | |||
+ | === 结果演示 === | ||
+ | 演示效果如下: | ||
+ | 打开串口监视器波特率为115200,可以看到不断打印累加数字,板子上的LED呈现流水灯模式。 | ||
+ | {{ :演示效果.jpg?nolink&500 |}} | ||
+ | 更多外设支持正在持续不断的开发中,接下来也会推出更多好玩的Demo。 |