# 使用Arduino IDE开发RISC-V处理器
本次移植的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。
{{ :risc-v_软核处理器与step_cyc10_开发板.png?nolink&700 |}}
## 准备工作
* 小脚丫FPGA开发板 STEP-CYC10
* Intel Quantus Prime Lite18.1版本以上
* Arduino IDE 18.4版本以上
**准备1:小脚丫FPGA开发板 STEP-CYC10**\\ 小脚丫STEP-CYC10 是一款基于Intel Cyclone10设计的FPGA开发板。板卡尺寸只有72mm×40mm。核心FPGA芯片选用了Intel公司Cyclone 10 LP系列的10CL016YU256C8G,相比于前一代的Cyclone IV系列的FPGA,它的性能更强,功耗更低,板上的FPGA芯片资源达16000逻辑单元(LEs),同时该板卡最高支持10CL025YU256芯片。另外,板卡上集成了USB Blaster编程器、SDRAM、FLASH等多种外设。板上预留了PCIE子卡插座,你可以方便的进行扩展。
{{ :step_cyc10_fpga开发板资源.png?nolink&600 |}}
STEP-CYC10板卡上集成的编程器能够完美支持开发工具Quartus Prime,你只需要一根MicroUSB连接线就能够完成FPGA的编程仿真和下载,使用更加方便。
**准备2:Intel Quantus Prime软件**\\ Quartus Prime是Altera被Intel收购之后推出的免费、强大的设计软件,包括了从设计输入到综合直至优化、验证以及仿真等各个阶段所需的一切功能。Quartus Prime Lite是大批量器件系列的理想设计工具,可以免费下载使用。Quartus Prime下载安装、使用[[quartus_prime的使用|Quartus Prime下载安装、使用]]
**准备3:Arduino IDE软件**\\ Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)两大核心部分。Arduino IDE基于processing IDE开发,对于初学者来说极易掌握,同时有足够的灵活性。Arduino语言是基于wiring语言开发的,是对 avr-gcc库的二次封装,不需要太多的单片机基础和编程基础,只需简单学习后,你就可以快速的进行开发。[[https://www.arduino.cc/en/Main/Software|Arduino IDE的下载安装]]
## 操作步骤
* 获取PulseRain Reindeer_Step MCU软核
* 配置软核到STEP-CYC10 FPGA开发板
* Arduino IDE安装板卡支持包
* 在Arduino IDE中开发应用程序
* 下载程序到开发板并运行
**步骤1:获取PulseRain Reindeer_Step MCU软核**
本次移植的是在PulseRain Reindeer处理器内核基础上,改进的Reindeer_Step软核,该软核根据STEP CYC10开发板的特点做了如下改进:
* 增加了SDRAM控制器,以利用板上的8M动态内存作为代码和数据内存。
* 增加了对板上硬件资源的支持,如目前增加了UART外设和GPIO外设,并持续更新中。
* 开发了相关的Arduino Support Package,使得用户可以通过Arduino开发环境来直接对软核处理器编程。
{{ :pulserain_reindeer_step_mcu软核结构.png?nolink&700 |}}
Reindeer_Step的源代码已经开源在Github上,你可用如下的命令得到代码 :
git clone https://github.com/PulseRain/Reindeer_Step.git
这个操作会在本地目录建立一个stepfpga 目录
也可以直接点击链接[[https://github.com/PulseRain/Reindeer_Step.git|Reindeer_Step]],在网页的Clone or download选项中Download ZIP文件。
cd Reindeer_Step
进入该目录
git submodule update --init --recursive
注意init和recursive前面是两个 - ,更新所有的submodules\\ (注意该软件遵循GNU通用公共许可证协议)
**步骤2:配置软核到STEP-CYC10 FPGA开发板**
直接从GitHub上clone的项目已默认编译出sof文件,编译后资源占用情况如下图所示:
{{ :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中运行。
{{ :使用quartus_prime文件转换工具将sof文件转换为jic文件.png?nolink&500 |}}
如果不熟悉Quartus prime的使用可以先学习这里的上手教程quartus_prime的使用。\\ 如果不熟悉FPGA的开发可以先学习我们的FPGA入门教程。
**步骤3:Arduino IDE安装板卡支持包**
Arduino IDE可以支持第三方板子的开发,但是需要安装第三方板卡的支持包。
打开Arduino IDE,打开 文件——首选项——附加开发板管理器网址,添加如下链接: **https://raw.githubusercontent.com/PulseRain/Arduino_RISCV_IDE/master/package_pulserain.com_index.json**,确定后,打开 工具——开发板——开发板管理器,在搜索框中输入REINDEER,安装PACKAGE。
{{ :安装板子支持包.png?nolink&500 |}}
下载安装完成后在板卡管理器中有STEP CYC10 Board这个选项。
**步骤4:在Arduino IDE中开发应用程序**
在Arduino IDE 工具一栏,选择开发板为STEP CYC10 Board,下面我们可以开始开发自己的应用程序了,
这里我们编写一段应用程序实现[[reindeer_step_arduino_app1|流水灯和串口打印]]的功能:
#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);
}
点击Arduino IDE的验证✔选项开始编译,程序编译结果会在下面的信息栏中给出。
这里建议用户在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。
## 综合例子演示
在源文件夹中,有一个综合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应用程序]]