嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

构建开源 MCU 并使用 Arduino 进行编程

ArtyDetail_d51373f0d13466741c7a030d5b88020fd1d82864.jpg

使用兼容 Arduino 的 RISC-V 平台配置低成本 Arty FPGA 板。

在本文中,我们将探讨如何通过可选择使用 RTL 源代码构建的开源 RISC-V 微控制器来配置经济实惠、基于 Xilinx Artix-7 的 Digilent Arty 电路板 - 其设计过程充分考虑了制造商和爱好者的需要,然后通过 Arduino IDE 或者 makefile 驱动型 GNU 工具链进行编程。

假设对 Linux、git 和 makefile 驱动型软件构建流程有基本认识。

Freedom E310

E300_platform_diagram1_768a5763b000897f50f2a6d4a2092801efa61dec.jpg

E300 平台的顶层块图,© 2017 SiFive 公司版权所有。

RISC-V 是一款免费开放式指令集架构 (ISA),发布时提供自由许可,鼓励广泛应用并允许任何个人实施他们自己的兼容设备,无论是模拟环境、FPGA(现场可编程门阵列)或 ASIC(专用集成电路)中均可实现。这些设备可能包括从超低功率 IoT(物联网)级设备到移动设备、笔记本电脑/台式机、服务器级设备,甚至还包括专门面向 HPC(高性能计算)应用程序的设备。

注意:RISC-V 本身并非处理器 — 而是一种 ISA 规范。尽管如此,RISC-V 基金会确实提供了一个叫做 Rocket 的参考处理器实例,还有可帮助生成内核的工具和 GNU 编译器工具链。

SiFive 是由 RISC-V 的投资者成立的商业组织,产品包括 IP 内核和 SoC 平台,获得多个咨询服务公司的支持。他们的 Freedom E300 SoC 平台基于 E3 Coreplex,可以用作 ASIC 并面向 FPGA。

我们将要载入 Arty 电路板配置内存中的 Freedom E310 芯片的设计是以上图所示的 SoC 架构为基础的。

硬件

Assembly1_04e96246b37ce91b1476b96ec253985fe862a316.jpg

尽管 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(微控制器单元)本身的设计,还能上传自己的代码以便在平台上运行。

JTAGWiring_83aaad06f17f31a66246d38656c7042cb54df2f3.jpg

USB-JTAG 布线

Freedom E300 Arty FPGA 开发套件入门指南详细介绍了如何给适配器接线,并说明了如何构建 SoC 和 GNU 工具链以及如何对电路板进行编程等操作。如果您不能确定如何操作,该指南显然是您要参考的规范文档,而且本文描述的步骤都以该指南中的说明为基础的。

PMODWiring_c269fd892f63e66e5b877e7c703a35f747b71a11.jpg

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 工具链

ARV_VivadoHLWebPACK_d6c42b7480c45dbf29dd3f6e629c61e732b9f805.png

免费的“WebPACK”版 Vivado HL 工具就已经足够了,您可以登录 Xilinx 网站获取下载程序。安装完成后,必须添加 Digilent 电路板支持功能,也就是获取文件并把它们复制到合适的位置

例如,下载 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/

$ 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

电路板配置

ARV_VivadoOpenNewHardwareTarget_cb3c5cc87711f3778cb17d7d4675f0eeffcbf63e.png

闪存编程文件集成了预构建 FPGA 比特流和演示程序,可以从 SiFive 网站下载(需要注册账号)。

启动 Vivado 后,打开 Hardware Manager(硬件管理器),然后连接到目标电路板。之后,右键单击 FPGA,选择 Add Configuration Memory Device(添加配置内存设备),然后选择 Micron 零件 n25q128-3.3v。如果您要对设备进行编程,则可以选择 downloaded .mcs 文件。

ARV_VivadoAddConfigurationMemoryDevice_ce1fd82a2aed354151071051e5857ba759bec6af.png

完成编程后,按一下标示为 PROG 的红色按钮将会配置 FPGA,同时开始运行演示程序,并且 LED1 和 LED2 指示灯也会亮起。

DemoProgram_d260ab5611af19382b8bb86055fe39b365862364.jpg

如果您使用终端模拟器连接 /dev/ttyUSB1,则会看见一条消息输出。

ARV_demo_banner_6c30c4b1015f1d5d5d3711765e0e6511e73e68fb.png

此时,您可以跳过下一部分并直接通过 Arduino IDE / GNU 工具链对 SoC 进行编程,或者继续尝试构建 SoC 本身。

构建芯片!

MakeMCS_c98ac4447aea838c70f65e5d0523c3154f2c56fd.jpg

首先,我们需要重复克隆包含 Chisel RTL 源的 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,将程序融入到图像中。如需更多详细信息,请参考此论坛文章

兼容 Arduino

ARV_Arduino_IDE_f6f6b85ebe007d8c8a4624225a4f459ffa7b8638.png

到目前为止,开发 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 开发套件电路板,然后打开信任的闪烁示例,对该示例编译并将其上传到电路板。

Blink_4bd5f62a274f5ae39acfc6965dc4a2d85f38e16b.jpg

请注意,如果此时编程失败,有可能是因为 USB-JTAG 没有正确连接到 PMOD 连接器,udev 未配置,或者您不在 plugdev 组中。

freedom-e-sdk

ARV_make_software_demo_gpio_0ef8b37c777f8d9ed97165a814cfaad04d50f27e.png

如果使用您选择的文本编辑器,makefile 驱动型开发则主要由您完成,别担心,这就像是构建独立的 GNU 工具链

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

ARV_make_upload_demo_gpio_4eea45d08c718c07032b2eca2017da47645fe1b4.png

$ make tools

最后,针对构建和上传演示程序,输入:

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

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

自由改装

如果只有少量预算,您可以使用可自定义的微控制器平台立即启动和运行程序,也就是说,您可以自由修改 SoC 设计。或者,如果这稍稍超出了您的舒适区,您将立即获得可能是最出色的 Arduino 兼容性

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin