記事の概要
Ubuntu上にRISC-Vの開発環境を構築する手順を説明します。
Chiselを使用することを前提にしていますが、Verilogを使用される方は「vivadoのインストール」と「RISC-Vクロスコンパイラのビルド」のみご参照ください。
また、本記事でのインストールは2019年7月20日時点のバージョンなどになります。
使用したPC
本記事においては以下のPCを使用しています。
- Ubuntu 16.04LTS
- メモリ 3.7GB
- プロセッサ 2.67GHz x 4
- OS 64ビット
2017年8月に発刊されたFPGAマガジンの記事において、RISC-V用コンパイラはWindowsマシンやWindows上の仮想環境では正常にビルドできないと書かれていました。
現在では改善されているかは調べていませんが、Ubuntuを使用することにしました。
私はUbuntu PCを所有していなかったので、型落ちのPCを初期化してUbuntuをインストールしました。
Yahooオークションなどでは中古PCにUbuntuをインストールしたものが安く売られているので、それらを利用するのもいいかもしれません。
Scala開発環境構築
Chiselを用いてRISC-Vを開発する場合はScalaが必要です。
Verilogで開発する場合、この作業は不要になります。
以下の手順は、sbt公式サイトの「Linux への sbt のインストール」を参照しています。
OpenJDKのインストール
Scalaを使用する場合、ScalaはJava仮想マシン上で動作するのでJDKをインストールします。
必要になるのはバージョン8になります
sudo apt install openjdk-8-jdk
sbt インストール
以下のコマンドを実行してください。
echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
sudo apt-get update
sudo apt-get install sbt
インストールが正常に完了されているか、sbtシェルを起動して確認します。
sbt
正常に完了していれば、以下のように起動します。シェルを閉じるには、exitと入力するか、Ctrl+D を押してください。
[info] Loading project definition from /home/kosukematsui/project
[info] Set current project to kosukematsui (in build file:/home/kosukematsui/)
[info] sbt server started at local:///home/kosukematsui/.sbt/1.0/server/XXXXXXXXX/sock
sbt:kosukematsui>
Scalaを対話シェルで試したい場合は以下を入力します。
sbt console
起動後にプログラムを入力すれば応答します。
scala> println("Hello, World!")
Hello, World!
Verilatorのインストール
ChiselのシミュレーションをするためのC++コードを出力するツールになります
以下はhttps://www.veripool.org/projects/verilator/wiki/Installingを参照しています。
Verilator依存パッケージをインストールします。
sudo apt-get install git make autoconf g++ flex bison
gitリポジトリからcloneを行い、Verilatorのビルドとインストールを実行します。
git clone http://git.veripool.org/git/verilator
unset VERILATOR_ROOT
cd verilator
git pull
autoconf
./configure
make
sudo make install
vivadoのインストール
インストール手順はFPGAの部屋「Ubuntu16.04にVivado 2016.4をインストール」を参照しました。
Xilinx社のダウンロードから「Vivado Design Suite - HLx Edition - 2019.1 Full Product Installation」 の「Vivado HLx 2019.1: Vivado HLx 2017.4: WebPACK および Editions - Linux 用自己解凍型ウェブ インストーラー (BIN - 115.05 MB) 」をダウンロードします。
ダウンロードにはUser IDとPasswardの登録が必要になります。
インストーラを実行します。
cd ~/ダウンロード
chmod +x Xilinx_Vivado_SDK_Web_2019.1_0524_1430_Lin64.bin
sudo ./Xilinx_Vivado_SDK_Web_2019.1_0524_1430_Lin64.bin
インストール画面の起動後、基本的にはNEXTを押していくだけでインストールできますが、以下の設定などが必要になります。
- Select Install画面では、登録したUser IDとPasswardを入力する
- Select Ediition to Install 画面では「Vivado Webpack」を選択
- Vivado HL Webpack の画面では、「Software Development Kit (SDK)」のチェックが入っているかを確認
- FPGAボードを使用する場合は、対応するFPGAボードにもチェックが入っているかを確認する(私の場合はArtyシリーズに初期状態でチェックが入っていることを確認しました)
インストール完了後は~/.bashrcにパスを追加します。使用しやすいエディタで編集してください。
vi ~/.bashrc
以下を追加します。
Pathはvivadoをインストールした場所に合わせて適宜変更ください。
私の場合は/toolsにvivadoをインストールしましたが、参照した幾つかのサイトでは/optにインストールする例が多いようでした
# Xilinx vivado
source /tools/Xilinx/Vivado/2019.1/settings64.sh
alias xsdk='env SWT_GTK3=0 xsdk'
alias vivado='env SWT_GTK3=0 vivado'
FPGAボードを使用する場合
FPGAボードを使用する場合は、FPGAボードファイルとボードに対応する制約ファイルが必要になります
私が使用しているARTY S7のFPGAボードは最初からインストールされていました。
そうでない場合は、FPGAボードファイルを入手して、例えばXilinx/Vivado/2019.1フォルダ以下のdata/boards/board_files に格納ください。
ARTY S7の制約ファイルはhttps://github.com/Digilent/digilent-xdc/から入手しました。
これはvivadoで論理合成する際に使用します。
QEMUのインストール
現時点での最新版のqemu-4.0.0をインストールします。
以下のコマンドのバージョンは適宜変更してください。
wget https://download.qemu.org/qemu-4.0.0.tar.xz
tar xf qemu-4.0.0.tar.xz
cd qemu-4.0.0/
mkdir build
cd build/
sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
../configure --target-list=riscv32-softmmu,riscv64-softmmu,riscv64-linux-user,riscv32-linux-user --prefix=/opt/qemu-riscv
make
sudo make install
インストール完了後は~/.bashrcにパスを追加します。使用しやすいエディタで編集してください。
vi ~/.bashrc
以下を追加します。
# QEMU
export PATH=${PATH}:/opt/qemu-riscv/bin
インストール完了後、正常に完了しているかは、バージョン番号が表示できるかを見ることで確認できます。
新しい端末を開くか、
source ~/.bashrc
を実行後に、以下のコマンドでご確認ください。
qemu-system-riscv32 --version
qemu-system-riscv64 --version
qemu-riscv64 --version
RISC-Vクロスコンパイラのビルド
RISC-V用のクロス開発環境を構築します。
ビルド手順はhttps://github.com/riscv/riscv-gnu-toolchainおよびソフトウェアプラットフォーム屋のメモ帳「RISC-V 32bit版gnu-toolchainのビルド&インストール方法」を参照しました。
toolchainをインストールします。
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
依存パッケージをインストールします。
sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
ビルド作業は環境や目的に合わせて、後述する4通りから選択します。
私はNewlib cross-compilerとLinux cross-compiler 32-bit and 64-bit両対応版をビルドしました。
ビルドには数時間を要します。
以下のコマンドでフォルダ内に移動後、各コマンドを実行ください。
cd riscv-gnu-toolchain/
Newlib cross-compilerをビルドする場合
./configure --prefix=/opt/riscv
sudo make
Linux cross-compiler RV64GC (64-bit)対応版をビルドする場合
./configure --prefix=/opt/riscv
sudo make linux
Linux cross-compiler RV32IM (32-bit)対応版をビルドする場合
./configure --prefix=/opt/riscv --with-arch=rv32gc --with-abi=ilp32d
sudo make linux
Linux cross-compiler 32-bit and 64-bit両対応版をビルドする場合
./configure --prefix=/opt/riscv --enable-multilib
sudo make linux
パスを通す
ビルド完了後は~/.bashrcにパスを追加します。使用しやすいエディタで編集してください。
vi ~/.bashrc
以下を追加します。
Pathはインストールした場所に合わせて適宜変更ください。
# RISC-V toolchain
export PATH=${PATH}:/opt/riscv/bin
インストール完了後、正常に完了しているかは、バージョン番号が表示できるかを見ることで確認できます。
新しい端末を開くか、
source ~/.bashrc
を実行後に、以下のコマンドでご確認ください。
Newlib cross-compiler
riscv64-unknown-elf-gcc -v
Linux cross-compiler RV64GC (64-bit)対応版
riscv64-unknown-linux-gnu-gcc -v
Linux cross-compiler RV32IM (32-bit)対応版
riscv32-unknown-linux-gnu-gcc -v
Linux cross-compiler 32-bit and 64-bit両対応版
riscv64-unknown-linux-gnu-gcc -v
最後に
上記手順でうまくインストールできない場合はお気軽にご質問ください。
また、手順に誤りや不足があれば、ご指摘いただけると助かります。
その他参照サイト
- 堀江徹也氏「RISC-Vマイコンの作り方」サポートページ
変更履歴
- 2019年10月3日
QEMUのインストールコマンドで64bit版のriscv64-softmmuが抜けていたので修正
(誤)
../configure --target-list=riscv32-softmmu,riscv32-softmmu,riscv64-linux-user,riscv32-linux-user --prefix=/opt/qemu-riscv
(正)
../configure --target-list=riscv32-softmmu,riscv64-softmmu,riscv64-linux-user,riscv32-linux-user --prefix=/opt/qemu-riscv