Step1: 基于RISC-V内核的Freedom E310 MCU

RISC-V 是一个自由开放的指令集架构(ISA),是在一个自由许可证下发布的。它鼓励广泛采用并允许任何人实现他们自己的兼容设备,无论是在仿真、FPGA还是ASIC。这些可能是任何东西,从一个超低功率的 IoT 类设备,到移动,笔记本电脑/桌面和服务器类,甚至针对 HPC 应用的设备。


请注意,RISC-V 本身并不是一个处理器,它是一个 ISA 规范。尽管 RISC-V 基金会确实提供了一个名为 Rocket 的参考处理器实现,以及促进内核生成的工具,还有一个 GNU 编译器工具链。


由 RISC-V 的发明者创立的商业组织 SiFive 提供了包括 IP 核和 SoC 平台在内的产品,由咨询服务支持。他们的 E300 SoC 平台基于 E3 Coreplex,可用作 ASIC ,也可以用于 FPGA。


我们将载入 Arty 开发板配置内存的 Freeedom E310 微控制器正是基于上图所示的 SOC 架构。


* 上图为Freedom E310平台的顶层架构图

Step2: 硬件部分

虽然 Digilent Arty 开发板 集成 USB-JTAG 适配器可用对 Xilinx FPGA Artix-35T 和用于上电时配置 FPGA 的 Quad-SPI flash 芯片进行编程,但是还需要 ARM-USB-TINY-H USB JTAG 适配器,用于连接 RISC-V 内核调试与编程。


虽然需要连接这么多接口,但是请记住,我们使用的是一个完全可编程的平台,你可以自由修改 MCU 本身的设计,此外还可以上传自己的代码来运行。


E300的Arty FPGA开发工具包入门指南》包含了如何连接 USB-JTAG 的细节,以及说明如何构建 SoC 和 GNU 工具链和对开发板进行编程等。这显然是规范化文档,在这篇文章中描述的步骤是基于包含在《指南》中的指令。


使用《指南》中建议的线颜色,不需要更改板上的跳线帽,只需要确保你连接到PMOD-JD 接口,而不是其它 PMOD 接口。上图2,图3,分别是USB-JTAG连线图PMOD-JD接口连线图


为了连接上ARM-USB-TINY-H,我们需要添加新的 udev 规则,打开/etc/udev/rules.d/99-openocd.rules,并添加如下代码:

# These are for the Olimex Debugger for use with E310 Arty Dev Kit

SUBSYSTEM=="usb", ATTR{idVendor}=="15ba", ATTR{idProduct}=="002a", MODE="664", GROUP="plugdev"

SUBSYSTEM=="tty", ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", MODE="664", GROUP="plugdev"

返回控制终端,使用如下命令,重新加载 udev 规则:

$ sudo udevadm control --reload-rules


如果你的用户帐户尚未在 plugdev 组中,则需要将其添加到用户组,然后退出用户,然后再登陆。

Step3: FPGA工具链部分

登录到Xilinx网站,下载一个工具下载器,选择免费的 “WebPACK” 版本的 Vivado HL 工具就足够了。在完成安装后,必须添加 Digilent 板卡支持包,这只是获取板卡文件并将其复制到适当位置的问题。


例如,在下载 Vivado 2017.1 安装程序后,流程是:


1  切换到 root 用户,使安装文件获得可执行属性,并执行:

$ chmod +x Xilinx_Vivado_SDK_2017.1_0415_1_Lin64.bin

$ sudo ./Xilinx_Vivado_SDK_2017.1_0415_1_Lin64.bin

2  安装驱动:

$ cd /opt/Xilinx/Vivado/2017.1/data/xicom/cable_drivers/lin64/install_script/install_drivers

$ sudo ./install_drivers

3  获取 Digilent 开发板支持包,并复制到适当位置:

$ git clone https://github.com/Digilent/vivado-boards.git

$ sudo cp -r vivado-boards/new/board_files/* /opt/Xilinx/Vivado/2017.1/data/boards/board_files/

4  返回 home 目录,建立环境变量:

$ cd

$ source /opt/Xilinx/Vivado/2017.1/settings64.sh

注:该指令在每次打开新的命令行终端时都要执行一遍。


5  打开Vivado图形化界面可以输入:

$ vivado

Step4: 开发板配置

已经建立好的FPGA固化程序,还包含一个演示工程。该程序可以从SiFive网站下载(需要注册)。


打开 Vivado 后,点击打开硬件管理器,并连接上目标板卡(Arty 开发板)。选中FPGA右击,选择 Add Configuration Memory Device,选择型号为 Micron part n25q128-3.3v 的Flash 芯片。点击OK后,可以选择下载好的 .mcs 文件对 Flash 进行固化。


当固化完成时,可以按下板卡上标注 PROG 的红色按钮,FPGA 将自动配置。接着演示程序将开始运行,LED1 和 LED2 将被点亮。


如果你用终端模拟器连接上了 /dev/ttyUSB1,可以看到输出信息。

至此,你可以跳过下一节内容,直接利用 Arduino IDE 或者 GNU 工具链对该 SoC 进行编程。当然你可以尝试对 SoC 进行编译。

Step5: Soc 芯片编译

首先我们需要利用 Git 工具将 SiFive E300 和 U500 平台的 RTL 源代码 下载下来。

$ git clone --recursive https://github.com/sifive/freedom.git


这将需要一些时间,因为需要将依赖关系的所有 git 子模块,如 Rocket 芯片生成器和芯片组等都下载下来。


当 Git 执行完成,我们可以对 Verilog 源文件进行编译。

$ make -f Makefile.e300artydevkit verilog


在生成固化程序之前,需要确认已经建立 Vivado 的环境变量,然后再生成固化程序:

$ make -f Makefile.e300artydevkit mcs


这个命令会利用 Vivado 工具对 Xilinx 的 FPGA 进行综合,以及布局布线等。该过程需要等待一段时间,执行结束后,生成了新的.mcs文件,可以用于配置 Flash。


需要注意的是,新生成的配置文件没有包含演示程序。当然,也可以通过修改 makefile 文件将演示程序添加进配置文件。

Step6: 兼容 Arduino IDE

针对 Arty 开发板的 Freedom E310 已经支持利用 Arduino IDE 进行开发,因此这是目前,最简单的软件开发方式。我们需要做的是选择 File → Preferences → Settings 和添加开发板管理的网址:

http://static.dev.sifive.com/bsp/arduino/package_sifive_index.json 


然后点击 Tools → Board → Board Manager,搜索 SiFive Freedom Boards,并安装开发板支持文件。这样,我们就可以选择 Freedom E300 Arty DevKit board,打开 blink example 演示程序,编译并上传至板卡。


注意,如果 USB-JTAG 没有正确连接到 PMOD 接口,或者 udev 没有配置,又或者用户不在 plugdev 用户组,都有可能导致下载程序失败。

Step7: freedom-e-sdk

如果你更喜欢使用文本编辑器和 makefile 进行开发, freedom-e-sdk 的 GNU 工具链会是很好的选择。构建 GNU 工具链同样很简单。


1  首先安装工具链的依赖库

$ sudo apt-get install autoconf automake libmpc-dev libmpfr-dev libgmp-dev gawk bison flex texinfo libtool libusb-1.0-0-dev make g++ pkg-config libexpat1-dev zlib1g-dev


2  下载、编译 freedom-e-sdk 的源文件

$ git clone --recursive https://github.com/sifive/freedom-e-sdk.git

$ cd freedom-e-sdk

$ make tools

3  编写代码,并编译上传至开发板

$ make software PROGRAM=demo_gpio BOARD=freedom-e300-arty


$ make upload PROGRAM=demo_gpio BOARD=freedom-e300-arty


有时间和精力的话,你甚至可以定制属于你自己的微控制器平台,自由设计 SoC 芯片。当然如果你觉得这部分超出了你的能力范围,跟着上述指南操作到这里,你已经拥有了最酷的兼容 Arduino 的 FPGA 开发板啦!

评论