オープンソースのISAとして注目を集め始めているRISC-V、ハードでLinuxのような革命が起こせるのかと期待されています。
RISC-Vはオープンソースでコードも公開されているため、誰でもFPGAにRISC-Vコアをビルドして動作させることができます。
今回は、Xilinx Artix FPGAを搭載したDigilentのArty A7ボード用にRISC-Vとその上で動作するプログラムをビルドしたいと思います。
今回の記事でビルドしたファイルをFPGAへ書き込む方法は別の記事で解説しています。
準備
必要なもの
Digilent Arty A7
Xilinx Artix A7を搭載したDigilentの開発ボードです。
Olimex
ARM-USB-TINY-H JTAGアダプタです。デバッグで必要となります。
動作環境
ホストOS:Ubuntu 18.04
Ubuntu18.04はVirtualbox上で動作させずに、Windows10 PCにマルチブートでインストールしました。
Vivadoはかなりのメモリを食うので、Virtualboxで動かすとメモリが足りなくなります。
ちなみに、私はRufusを使用して外付けハードディスクにUbuntuをインストールしました。
以下のような利点があります。
・Vivadoの容量が大きいため
・複数メンバーで開発環境を共有できるため
Windowsと同じハードディスクにマルチブートでも全然問題ありません。
今回はUbuntuのインストールが既に終わっている前提で始めます。
RISC-V FPGAビルド
RISC-VをArty A7 FPGAボード用にビルドする手順を説明します。
環境構築は、Digikey Digilent Arty A7 with Xilinx Artix-7 Implementing SiFive FE310 RISC-V(英文)を参考にしています。
Vivadoのインストール
VivadoのWebPackは無料で使用可能なFPGA開発ツールです。
インストーラーは「Vivadoのダウンロードページ」でダウンロードしてください。
ダウンロードには、Xilinxの登録が必要です。
下記コマンドでインストーラを実行します。
実行権限を付与して実行しています。
インストール後、インストーラは削除して構いません。
sudo chmod +x Xilinx_Vivado_SDK_2019.1_0524_1430_Lin64.bin ./Xilinx_Vivado_SDK_2019.1_0524_1430_Lin64.bin
無料で使えるWebPACKを選択します。
今回はArty A7で動作させるため、必要なものだけインストールします。
フルインストールすると、数十GBの容量が必要になります。
必要なものだけインストールするようにしましょう。
インストール先を/home/user/riscv/tool/Xilinxにしました。
userは、ユーザー名です。
アクセス権のあるhomeディレクトリ配下などの任意のディレクトリにインストールします。
かなり時間がかかると思います。気長に待ちましょう。
VivadoのDigilent開発ボードファイルのインストール
Gitから最新を取得したDigilent Arty A7の開発ボードファイルをVivadoのディレクトリにコピーします。
cd /home/user/riscv/tool git clone https://github.com/Digilent/vivado-boards cp -rv ./vivado-boards/new/board_files/* ./Xilinx/Vivado/2019.1/data/boards/board_files/
gitがインストールされていない場合は、sudo apt install gitでインストールできます。
RISC-V ツールチェーンのインストール
RISC-Vのツールチェーンをインストールします。
コンパイルに必要なGCCとデバッグに必要なOpenOCDをインストールします。
インストール後は、tar.gzは削除して構いません。
cd /home/user/riscv/tool wget -c https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.1.0-2019.01.0-x86_64-linux-ubuntu14.tar.gz wget -c https://static.dev.sifive.com/dev-tools/riscv-openocd-0.10.0-2018.12.0-x86_64-linux-ubuntu14.tar.gz tar xf riscv64-unknown-elf-gcc-8.1.0-2019.01.0-x86_64-linux-ubuntu14.tar.gz tar xf riscv-openocd-0.10.0-2018.12.0-x86_64-linux-ubuntu14.tar.gz
ツールチェーンがインストールできているか確認
GCC
GCCがインストールできたか以下のコマンドで確認できます。
バージョンは異なってもエラーが出ていなければOKです。
/home/user/riscv/tool/riscv64-unknown-elf-gcc-8.1.0-2019.01.0-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (GCC) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
OpenOCD
下記エラーが起きるため、事前にインストールしておきます。
error while loading shared libraries: libftdi1.so.2: cannot open shared object file: No such file or directory
sudo apt install libftdi1-dev
OpenOCDがインストールできたか以下のコマンドで確認できます。
/home/user/riscv/tool/riscv-openocd-0.10.0-2018.12.0-x86_64-linux-ubuntu14/bin/openocd --version Open On-Chip Debugger 0.10.0+dev-gcd32bd4 (2018-12-19-01:15) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html
Download the SiFive Freedom repository
FreedomのコードをGitで取得してきます。
FreedomはSiFive社が公開しているFPGAコード
cd /home/user/riscv git clone --recursive https://github.com/sifive/freedom
Artix-7 35T / Artix-7 100T のビルド
Freedomをビルドする前に、ビルドで使用する変数を定義しておきます。
.bashrcに記載しておくことで次回起動時も変数が保存されます
cd /home/user nano .bashrc # Add for building freedom --> export RISCV=/home/user/riscv/riscv64-unknown-elf-gcc-8.1.0-2019.01.0-x86_64-linux-ubuntu14 export PATH=/home/user/riscv/Xilinx/Vivado/2019.1/bin:$PATH # Add from building freedom <-- source .bashrc
念の為、確認しておきましょう。
echo $RISCV /home/user/riscv/riscv64-unknown-elf-gcc-8.1.0-2019.01.0-x86_64-linux-ubuntu14
ビルド時にエラーとなるため、事前にインストールが必要です。
sudo apt install make sudo apt install default-jre sudo apt install maven sudo apt install device-tree-compiler sudo apt install python
Artix-7 35Tをビルドする場合
Artix-7 35Tをビルドする場合は、以下のコマンドを実行してください。
cd /home/user/riscv/freedom make BOARD=arty -f Makefile.e300artydevkit clean make BOARD=arty -f Makefile.e300artydevkit verilog make BOARD=arty -f Makefile.e300artydevkit mcs
Artix-7 100Tをビルドする場合
Artix-7 100Tをビルドする場合は、以下のコマンドを実行してください。
cd /home/user/riscv/freedom make BOARD=arty_a7_100 -f Makefile.e300artydevkit clean make BOARD=arty_a7_100 -f Makefile.e300artydevkit verilog make BOARD=arty_a7_100 -f Makefile.e300artydevkit mcs
参照
・Digilent Arty A7 with Xilinx Artix-7 Implementing SiFive FE310 RISC-V
・SiFive Core IP FPGA Eval Kit User Guidev3p0
まとめ
RISC-Vをビルドする方法をまとめました。
実機を使わなくても、ビルドした結果を見てコンフィグレーションでビルド結果が変わるかなど確認することはできます。
次はArty A7 FPGAボードに実際に書き込む方法を解説していきます。
RISC-Vについて興味がある方は、次の本が参考になると思います。
著者は、RISC-Vに実際に参画しているCPUアーキテクチャの権威 パターソン先生です。