Help us understand the problem. What is going on with this article?

フリーのRISC-VプラットフォームSiFive Freedom E310をFPGAボードArty A7に書き込む

記事の概要

フリーのRISC-VプラットフォームSiFive Freedom E310をFPGAボードArty A7に書き込みます。

以下のサイトにある手順に従うだけでいいはずなのですが、私は細かい点につまづいて難儀したので、同様の問題に直面した人の参考になるように作業工程を残したく思います

https://github.com/sifive/freedomのREADME

SiFive Freedom E310 Arty FPGA DevKitGetting Started Guide

Freedom E300 Arty DevKit でRISCVを試す

作業環境はUbuntu 18.04.3 LTSになります。
ただし、mcsファイルのFPGAボードへの書き込みにのみWindows環境を使用しました。

FPGAボード

秋月電子で以下を購入しました。

Xilinx社のArtix-7 35Tを搭載したFPGA評価キット

秋葉原店で直接購入される場合は、店頭には置いていないのでスタッフの方に依頼して倉庫から持ってきていただいてください。
Arty A7のFPGAボードは35Tと100Tの2種類ありますが、¥15,800の安い方の35Tを選びました。
また、間違えてArty S7を購入しないようにご注意ください。

ダウンロード

SiFive Freedom E310をダウンロードします

$ git clone https://github.com/sifive/freedom.git
$ cd freedom

freedomで使用するsubrepositoryをupdateします。
私の場合、toolchainの更新に1時間以上を要しました。

$ git submodule update --init --recursiv

追加パッケージ

追加パッケージをインストールします。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev libusb-1.0-0-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev device-tree-compiler pkg-config libexpat-dev python wget
$ sudo apt-get install default-jre

既にインストール済みのものは無視されるだけなので、上記コマンドをそのまま入力すれば問題ありません。

環境構築

sbt、varilator、scala、toolchainのriscv64-unknown-elf-gcc、vivadoをインストールしないといけないのですが、私は既に以下の手順でインストール済みなのでパスします

Ubuntu上でのRISC-Vの環境構築

ビルド

riscv64-unknown-elf-gccにパスを通します。
pathの位置が手順書と異なっているのでご注意ください。各位の環境に合わせてご変更ください。
私の場合、/opt/riscv/bin/riscv64-unknown-elf-gccなので以下を実行します

$ export RISCV=/opt/riscv

(2019/10/27追記)
後で紹介するfreedom-e-sdkのビルドは最新のgccを使用しないとビルドエラーになるので、この段階でそちらを使用した方がいいかもしれません。
https://www.sifive.com/boards

上記サイト中央位置にある「GNU Embedded Toolchain — v2019.08.0」のUbuntu版をインストールして、各位の環境に合わせてpathを指定ください。

$ export RISCV=${HOME}/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14

(追記終わり)

手順書ではvivadoにもパスを通すように指示されていましたが、私の環境では必要ありませんでした。

以下のコマンドを実行してmcsファイルを生成します。

$ make -f Makefile.e300artydevkit verilog
$ make -f Makefile.e300artydevkit mcs

正常に完了すればfreedom/builds/e300artydevkit/objフォルダにE300ArtyDevKitFPGAChip.mcsファイルが生成されています。

私の場合、2番目のmcsファイル生成コマンド実行時に以下のエラーメッセージが出ました。

ERROR: [Board 49-71] The board_part definition was not found for digilentinc.com:arty:part0:1.1. The project's board_part property was not set, but the project's part property was set to xc7a35ticsg324-1L. Valid board_part values can be retrieved with the 'get_board_parts' Tcl command. Check if board.repoPaths parameter is set and the board_part is installed from the tcl app store.

原因はvivadoにArtyのボード定義ファイルが入っていないことでした。
以下からボード定義ファイルをダウンロードします。

https://github.com/Digilent/vivado-boards/

vivado-boards-master/new/board_filesに置いてあるファイルをvivadoのdata/boards/board_filesフォルダにコピーします。
普通にコピー&ペーストできない場合は、管理者権限でcpコマンドを実行してください。

sudo cp -r vivado-boards-master/new/board_files/* /tools/Xilinx/Vivado/2019.1/data/boards/board_files/

(参考)
ひでみのアイデア帳

FPGAボードへの書き込み

私はmacのVirtualBoxでUbuntuを使用しているのですが、USBがFPGAボードを認識しませんでした。
以下のサイトなどを参照して色々と試しましたが、認識されませんでした。

MacでVirtualBox上にてUSB機器を認識しない時の対処

そこで仕方なく、ARty A7への書き込みはwindows環境のvivadoで行いました。

まずvivadoを起動後、「Flow」→「Open Hardware Manager」を選択してください。

OpenHardwareManager.png

「Open Target」→「Auto Connect」でArty A7が選択されます。

opentarget.png

次にFPGAボード名「xc7a35t」を右クリックして「Add Configuration Memory Device」を選択してください。

AddMemoryDevice.png

ここで手順書では以下を選択するように書かれています

  • 25q128-3.3v-spi-x1_x2_x4
    • Micron
    • 128
    • spi
    • x1_x2_x4

ですが、私の購入したFPGAボードに搭載されていたのは別のメモリでした。

  • s25fl128sxxxxxx0
    • Spansion
    • 128
    • spi
    • x1_x2_x4

AddConfiguration.png

正しいメモリを選択した上で「Do you want to program the configuration memory device now?」にOKします。

DoYouwantMemoryNow.png

次にConfiguration file にE300ArtyDevKitConfig.mcs を選択して実行します。

ConfigurationFile.png

書き込みに成功したら、ボード上のPROGボタンを押してください。
FPGAボード上の3つのLED、LD4、LD5、LD6が点灯します。

次にすること

freedom-e-sdkには様々なサンプルが置かれています。
次はこれらを実際に試してみたいと思います。

(2019/10/27追記)
freedom-e-sdk サンプルプログラムのビルドを追加しました

freedom-e-sdk サンプルプログラムのビルド

freedom-e-sdkには幾つかのサンプルがあります。
今回は試しに"hello"をビルドしてみます。

このサンプルプログラムは/opt/riscv/bin/riscv64-unknown-elf-gccでは正常にビルドできませんでした。
フォーラムなどを見たところ、gccのバージョン違いがエラーの原因になるようです。
そこでSiFiveのサイトから適切なバージョンを直接ダウンロードします

https://www.sifive.com/boards

上記リンク先から、以下の3項目のUbuntu版をインストールしてください。

  • GNU Embedded Toolchain — v2019.08.0
  • OpenOCD — v2019.08.2
  • QEMU — v2019.08.0

ビルドに必要なのは「GNU Embedded Toolchain — v2019.08.0」だけですが、OpenOCDはFPGAボードへの書き込み時に使用するので、インストールしておきます。
QEMUは念の為にインストールしておきました。
次にパスを通します。.bashrcを編集します。

$ vi ./.bashrc

binファイルのある階層を以下のように記述します。
インストールした場所に応じて変更してください。

# FREEDOM E SDK
export RISCV_OPENOCD_PATH=/home/kosukematsui/riscv-openocd-0.10.0-2018.12.0-x86_64-linux-ubuntu14
export RISCV_PATH=/home/kosukematsui/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14

以上の準備が済みましたら、freedom-e-sdkをダウンロードします

$ git clone --recursive https://github.com/sifive/freedom-e-sdk.git
$ cd freedom-e-sdk
$ git submodule update --init --recursive

以下のコマンドでビルドが実行されます。

$ make [PROGRAM=hello] [TARGET=freedom-e310-arty] [CONFIGURATION=debug] software

もしくは

$ make BSP=metal PROGRAM=hello TARGET=freedom-e310-arty software

ビルドに成功すると、/hello/debugの階層に、hello.elfファイル、hello.hexファイル、hello.lstファイルが生成されています。

再ビルドする場合は、ビルド前にcleanで削除してください。

$ make [PROGRAM=hello] [TARGET=freedom-e310-arty] [CONFIGURATION=debug] clean

JTAG接続した状態で以下のコマンドを実行すると、FPGAボードに書き込まれるそうです。
私はOlimex ARM-USB-TINY-H を取り寄せ中なので、まだ試せていません。

$ make [PROGRAM=hello] [TARGET=freedom-e310-arty] [CONFIGURATION=debug] upload

(追記)
Olimex ARM-USB-TINY-H を用いて、実際にアップロードできることを確認しました。
SiFive Freedom E310のサンプルプログラムをArty A7に書き込む

参考

本記事作成後に以下の記事を見つけました。
とても詳細に手順が説明されているのでご参照ください。

RISC-VをArty A7 FPGA用にビルドする方法
RISC-VをArty A7 FPGAに実際に書き込む
RISC-VをFreedom Studioでビルド・デバッグする方法

(2019/10/27追記)
InterFace 2019年12月号の7章「定番ボードではじめるRISC-Vマイコン」でHiFiveボードを対象に、freedom-e-sdkのビルドと書き込み手順が紹介されていました。
本記事の手順よりも洗練されていると感じたので、是非ご参照ください。

その記事では、更にリアルタイムOS Zephyrの実装、OS上で動作するアプリの作成方法まで紹介されており、Arty A7でも同様のことができるか試してみたいと思います。

Kosuke_Matsui
https://qiita.com/matsui_685 にも何点か記事を置いています
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした