使用兼容 Arduino 的 RISC-V 平台配置低成本 Arty FPGA 板。
  在本文中,我们将探讨如何通过可选择使用 RTL 源代码构建的开源 RISC-V 微控制器来配置经济实惠、基于 Xilinx Artix-7 的 Digilent Arty 电路板 - 其设计过程充分考虑了制造商和爱好者的需要,然后通过 Arduino IDE 或者 makefile 驱动型 GNU 工具链进行编程。
  假设对 Linux、git 和 makefile 驱动型软件构建流程有基本认识。
  Freedom E310
  
E300 平台的顶层块图,© 2017 SiFive 公司版权所有。
  RISC-V 是一款免费开放式指令集架构 (ISA),发布时提供自由许可,鼓励广泛应用并允许任何个人实施他们自己的兼容设备,无论是模拟环境、FPGA(现场可编程门阵列)或 ASIC(专用集成电路)中均可实现。这些设备可能包括从超低功率 IoT(物联网)级设备到移动设备、笔记本电脑/台式机、服务器级设备,甚至还包括专门面向 HPC(高性能计算)应用程序的设备。
  注意:RISC-V 本身并非处理器 — 而是一种 ISA 规范。尽管如此,RISC-V 基金会确实提供了一个叫做 Rocket (https://github.com/ucb-bar/rocket)的参考处理器实例,还有可帮助生成内核的工具和 GNU 编译器工具链。
  SiFive 是由 RISC-V 的投资者成立的商业组织,产品包括 IP 内核和 SoC 平台,获得多个咨询服务公司的支持。他们的 Freedom E300 SoC 平台基于 E3 Coreplex,可以用作 ASIC 并面向 FPGA。
  我们将要载入 Arty 电路板配置内存中的 Freedom E310 芯片的设计是以上图所示的 SoC 架构为基础的。
  硬件
  
  尽管 Digilent Arty 410-319(RS st 编号:134-6478) 集成了可以用于直接编程 Xilinx Artix-35T FPGA 的 USB-JTAG 适配器,以及通常用于在启动时配置 FPGA 的四路 SPI 闪存,但是还需要 ARM-USB-TINY-H USB JTAG 适配器才能调试/编程 RISC-V 内核的连接。
  接口和选项非常丰富!记住,我们谈论的是完全可编程的平台,您可以在这里自由修改 MCU(微控制器单元)本身的设计,还能上传自己的代码以便在平台上运行。
   
USB-JTAG 布线
  Freedom E300 Arty FPGA 开发套件入门指南(https://www.sifive.com/documentation/freedom-soc/freedom-e300-arty-fpga-dev-kit-getting-started-guide/)详细介绍了如何给适配器接线,并说明了如何构建 SoC 和 GNU 工具链以及如何对电路板进行编程等操作。如果您不能确定如何操作,该指南显然是您要参考的规范文档,而且本文描述的步骤都以该指南中的说明为基础的。
  
PMOD 连接器 JD 布线
  使用指南建议的电线颜色,不需要在随附的电路板上安装跳线或从中移除跳线,只要确保您连接的是 PMOD JD,而不是其他连接器即可。
  此外,还需要添加新的 udev 规则,以便访问 ARM-USB-TINY-H:
  编辑 /etc/udev/rules.d/99-openocd.rules,然后添加:
  这些命令行用于 Olimex 调试器,以便和 E310 Arty 开发套件搭配使用

  SUBSYSTEM=="usb", ATTR{idVendor}=="15ba", ATTR{idProduct}=="002a", MODE="664", GROUP="plugdev"
  SUBSYSTEM=="tty", ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", MODE="664", GROUP="plugdev"
  然后输入:
  $ sudo udevadm control --reload-rules
  如果您的用户账户尚未编入 plugdev 组,请将您的用户账户添加到该组,然后退出再重新登录。
  FPGA 工具链
   
  免费的“WebPACK”版 Vivado HL 工具就已经足够了,您可以登录 Xilinx 网站获取下载程序。安装完成后,必须添加 Digilent 电路板支持功能,也就是获取文件并把它们复制到合适的位置。(https://www.sifive.com/documentation/freedom-soc/freedom-e300-arty-fpga-dev-kit-getting-started-guide/)
  例如,下载 Vivado 2017.1 安装程序后的流程是:
  作为根用户执行和运行安装程序:
  $ chmod +x Xilinx_Vivado_SDK_2017.1_0415_1_Lin64.bin
  $ sudo ./Xilinx_Vivado_SDK_2017.1_0415_1_Lin64.bin
  安装电缆驱动程序:
  $ cd /opt/Xilinx/Vivado/2017.1/data/xicom/cable_drivers/lin64/install_script/install_drivers
  $ sudo ./install_drivers
  获取 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/
  返回至主目录和设置环境变量:
  $ cd
  $ source /opt/Xilinx/Vivado/2017.1/settings64.sh
  每次登录或者打开新的终端时,都需要源加载此脚本。
  此时,可以输入以下命令启动 GUI:
  $ vivado
  电路板配置
  
  闪存编程文件集成了预构建 FPGA 比特流和演示程序,可以从 SiFive 网站下载(https://dev.sifive.com/dashboard/ 需要注册账号)。
  启动 Vivado 后,打开 Hardware Manager(硬件管理器),然后连接到目标电路板。之后,右键单击 FPGA,选择 Add Configuration Memory Device(添加配置内存设备),然后选择 Micron 零件 n25q128-3.3v。如果您要对设备进行编程,则可以选择 downloaded .mcs 文件。
    ARV_VivadoAddConfigurationMemoryDevice.png1089x944 68.6 KB


  完成编程后,按一下标示为 PROG 的红色按钮将会配置 FPGA,同时开始运行演示程序,并且 LED1 和 LED2 指示灯也会亮起。
  
  如果您使用终端模拟器连接 /dev/ttyUSB1,则会看见一条消息输出。
  
  此时,您可以跳过下一部分并直接通过 Arduino IDE / GNU 工具链对 SoC 进行编程,或者继续尝试构建 SoC 本身。
  构建芯片!
  
  首先,我们需要重复克隆包含 Chisel RTL (https://chisel.eecs.berkeley.edu/) 源的 GitHub 储存库,以便用于 SiFive E300 和 U500 平台。
  $ git clone --recursive https://github.com/sifive/freedom.git
  克隆需要一点时间,在此过程中,引入依赖项目的所有 git 子模块,如 Rocket Chip Generator 和 Chisel 等,均被克隆。
  完成克隆后,可输入以下命令行,对 Chisel 源进行编译,得到 Verilog:
  $ make -f Makefile.e300artydevkit verilog
  为生成配置内存文件,我们首先要确保已经通过如前所述源加载恰当的 shell 文件设置了 Vivado 环境变量,然后输入:
  $ make -f Makefile.e300artydevkit mcs
  这会驱动 Xilinx FPGA 合成以及布局布线等,过一段时间,您就会获得全新的 .mcs 文件,用于对配置闪存进行编程。
  请注意,默认情况下,生成的闪存图像不包含演示程序,这点和预构建版本一样。但是,可以通过编辑恰当的 makefile (https://github.com/sifive/freedom/blob/master/fpga/e300artydevkit/Makefile#L9),将程序融入到图像中。
  兼容 Arduino
  
  到目前为止,开发 Freedom E310 软件的最简单的方法就是利用 Arduino IDE(集成开发环境),将其指向 Arty 电路板。我们要做的是,首先打开 File(文件)→ Preferences(首选项)→ Settings(设置)选项卡,然后添加 Board Manager(电路板管理器)URL:
  http://static.dev.sifive.com/bsp/arduino/package_sifive_index.json
  然后,打开 Tools(工具)→ Board(电路板)→ Board Manager(电路板管理器),搜索 SiFive Freedom Boards,然后安装这些支持。之后,我们可以选择 Freedom E300 Arty 开发套件电路板,然后打开信任的闪烁示例,对该示例编译并将其上传到电路板。
  
  请注意,如果此时编程失败,有可能是因为 USB-JTAG 没有正确连接到 PMOD 连接器,udev 未配置,或者您不在 plugdev 组中。
  freedom-e-sdk
  
  如果使用您选择的文本编辑器,makefile 驱动型开发则主要由您完成,别担心,这就像是构建独立的 GNU 工具链 freedom-e-sdk (https://github.com/sifive/freedom-e-sdk)一样简单。
  首先,我们需要获取构建的依赖项目:
  $ 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
  然后克隆源并构建:
  $ git clone --recursive https://github.com/sifive/freedom-e-sdk.git
  $ cd freedom-e-sdk
  
  $ make tools
  最后,针对构建和上传演示程序,输入:
  $ make software PROGRAM=demo_gpio BOARD=freedom-e300-arty
  $ make upload PROGRAM=demo_gpio BOARD=freedom-e300-arty
  自由改装
  如果只有少量预算,您可以使用可自定义的微控制器平台立即启动和运行程序,也就是说,您可以自由修改 SoC 设计。或者,如果这稍稍超出了您的舒适区,您将立即获得可能是最出色的 Arduino 兼容性。
  — Andrew Back
  来源:DesignSpark