差别
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
reindeer_step_arduino [2020/01/08 20:12] group003 创建 |
reindeer_step_arduino [2020/01/16 23:21] (当前版本) group003 [返回目录] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | #### 在小脚丫FPGA板上玩转开源农场(FARM)FPGA+Arduino+RISC-V+Make | + | # 使用Arduino IDE开发RISC-V处理器 |
- | + | ||
- | ----- | + | |
- | 经过美国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。 | + | |
- | {{ :farm_开发模式.png?nolink&400 |}} | + | |
- | 如上图所示,在FARM开发模式下,FPGA成为系统的核心芯片。在FPGA中会包含一个支持RISC-V的开源处理器软核 (RISC-V Soft CPU)。该处理器可以包含一个硬件逻辑实现的代码载入器 (Hardware Based Code Loader)。FPGA也会包含所有的(或大部分的)外部设备实现,这些外部设备和RISC-V通过总线相连。对于无法完全用FPGA实现的功能 (例如传感器),FPGA也会实现其控制部分或者数据的读写。 | + | |
- | + | ||
- | 上图中RISC-V 软核的编程,可以通过两种方式。对中小型的裸金属 (bare metal)系统,开发者可以直接在Arduino 集成开发环境下编程,并充分利用Arduino提供的软件支持库。编译结果也可以在集成环境下直接写入到FPGA上的RISC-V软核里。当软件规模变大时,软件的配置和编译可以通过Make来实现,并执行和RISC-V软核配套的代码载入工具,下载编译结果。 | + | |
- | + | ||
- | 在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提供了灵活的选择。Pulserain公司特别将该处理器为小脚丫实验平台做了升级改进,可以同时支持DRAM和FPGA片上BRAM,还对外部中断做了更好的支持。(参考源码[[https://github.com/PulseRain/Reindeer_Step|RISC-V Reindeer_Step 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]])。 | ||
行 18: | 行 7: | ||
- | === 准备工作 === | + | ## 准备工作 |
* 小脚丫FPGA开发板 STEP-CYC10 | * 小脚丫FPGA开发板 STEP-CYC10 | ||
* Intel Quantus Prime Lite18.1版本以上 | * Intel Quantus Prime Lite18.1版本以上 | ||
行 32: | 行 21: | ||
- | === 操作步骤 === | + | ## 操作步骤 |
* 获取PulseRain Reindeer_Step MCU软核 | * 获取PulseRain Reindeer_Step MCU软核 | ||
* 配置软核到STEP-CYC10 FPGA开发板 | * 配置软核到STEP-CYC10 FPGA开发板 | ||
行 76: | 行 65: | ||
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://raw.githubusercontent.com/PulseRain/Arduino_RISCV_IDE/master/package_pulserain.com_index.json**,确定后,打开 工具——开发板——开发板管理器,在搜索框中输入REINDEER,安装PACKAGE。 |
{{ :安装板子支持包.png?nolink&500 |}} | {{ :安装板子支持包.png?nolink&500 |}} | ||
下载安装完成后在板卡管理器中有STEP CYC10 Board这个选项。 | 下载安装完成后在板卡管理器中有STEP CYC10 Board这个选项。 | ||
行 82: | 行 71: | ||
**步骤4:在Arduino IDE中开发应用程序** | **步骤4:在Arduino IDE中开发应用程序** | ||
- | 在Arduino IDE 工具一栏,选择开发板为STEP CYC10 Board,下面我们可以开始开发自己的应用程序了,这里我们编写一段应用程序实现[[reindeer_step_arduino_app1|流水灯和串口打印]]的功能: | + | 在Arduino IDE 工具一栏,选择开发板为STEP CYC10 Board,下面我们可以开始开发自己的应用程序了, |
+ | 这里我们编写一段应用程序实现[[reindeer_step_arduino_app1|流水灯和串口打印]]的功能: | ||
+ | |||
+ | <code c> | ||
+ | |||
+ | #define P0 (REG_GPIO[0]) | ||
+ | #define P1 (REG_GPIO[1]) | ||
+ | #define P2 (REG_GPIO[2]) | ||
+ | #define P3 (REG_GPIO[3]) | ||
+ | |||
+ | int kkk[1*1024]={999, 1000, 10001, 1898, 8888}; | ||
+ | |||
+ | void setup() { | ||
+ | // put your setup code here, to run once: | ||
+ | Serial.print(" ===================="); | ||
+ | P3 = 0xAA; | ||
+ | delay (1000); | ||
+ | |||
+ | } | ||
+ | |||
+ | int t = 0; | ||
+ | |||
+ | uint32_t i = 0; | ||
+ | uint8_t led_position = 0; | ||
+ | |||
+ | void loop() { | ||
+ | |||
+ | Serial.print (i); | ||
+ | i = (i + 1) %(1024); | ||
+ | Serial.print(" ===================="); | ||
+ | kkk [i] = kkk [i] + i; | ||
+ | Serial.print (kkk[i]); | ||
+ | Serial.println (" "); | ||
+ | delay (600); | ||
+ | led_position = (led_position + 1) % 8; | ||
+ | |||
+ | P3 = ~(1 << led_position); | ||
+ | } | ||
+ | </code> | ||
点击Arduino IDE的验证✔选项开始编译,程序编译结果会在下面的信息栏中给出。 | 点击Arduino IDE的验证✔选项开始编译,程序编译结果会在下面的信息栏中给出。 | ||
这里建议用户在Preferences对话框 (菜单File / Preferences) 中打开“Show Verbose Output”选项,这样信息栏中会给出详细的编译结果。 | 这里建议用户在Preferences对话框 (菜单File / Preferences) 中打开“Show Verbose Output”选项,这样信息栏中会给出详细的编译结果。 | ||
行 95: | 行 123: | ||
{{ :程序上传报告.png?nolink&500 |}} | {{ :程序上传报告.png?nolink&500 |}} | ||
- | === 结果演示 === | + | ## 流水灯例子演示效果 |
演示效果如下: | 演示效果如下: | ||
打开串口监视器波特率为115200,可以看到不断打印累加数字,板子上的LED呈现流水灯模式。 | 打开串口监视器波特率为115200,可以看到不断打印累加数字,板子上的LED呈现流水灯模式。 | ||
{{ :演示效果.jpg?nolink&500 |}} | {{ :演示效果.jpg?nolink&500 |}} | ||
更多外设支持正在持续不断的开发中,接下来也会推出更多好玩的Demo。 | 更多外设支持正在持续不断的开发中,接下来也会推出更多好玩的Demo。 | ||
+ | |||
+ | ## 综合例子演示 | ||
+ | 在源文件夹中,有一个综合demo,我们打开sketch文件夹,full_demo文件夹,打开full_demo.ino文件,这是一个Arduino工程,\\ | ||
+ | 在编译这个程序之前,我们需要安装两个库文件:Step_CYC10_I2C.h和Step_CYC10_Seven_Seg_Display.h。\\ | ||
+ | |||
+ | 打开 “项目”—“加载库”—“管理库”,搜索“step_cyc10”,安装I2C和数码管显示两个库。 | ||
+ | |||
+ | {{::arduino加载step_cyc10库文件.png?600|}} | ||
+ | |||
+ | {{::arduino加载step_cyc10库文件2.png?600|}} | ||
+ | \\ | ||
+ | 安装完成之后,编译,下载。 | ||
+ | |||
+ | {{:arduino-risc-v演示.mp4|}} | ||
+ | |||
+ | ## 返回目录 | ||
+ | * [[fpga_risc-v|基于FPGA与RISC-V的嵌入式系统设计]] | ||
+ | - [[reindeer_step_arduino|使用Arduino IDE开发RISC-V处理器]] | ||
+ | - [[reindeer_step_make|使用make配置编译RISC-V应用程序]] |