FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Zephyr-RISCVはFreedom E310プラットフォーム(Arty FPGA)をサポートしている

f:id:msyksphinz:20170325154038p:plain

前回少し紹介したZephyr-OSは、実行プラットフォームとしてQEMUだけでなく、Arty FPGA上で動作するFreedom E310もサポートしている。

ただし、OpenOCDによる接続が必要なため、ArtyFPGAに少し配線を追加しないといけないようだ。 手持ちにデバッグ用のケーブルがないので、実機で確かめることはできないが、とりあえず調査してみよう。

msyksphinz.hatenablog.com

Zephyr-OSのRISC-V向けビルド

基本的に以下のgithubにあげてあるREADME.mdが全てだ。

github.com

qemu-riscv32, riscv-gnu-toolchainなどをちゃんとインストールしておくこと。

Zephy-SDKをインストールしておく。これが何に使われるのかはよく分かっていない。 ただし、QEMUでシミュレーションするときに必要になるようだ。

$ sudo ./zephyr-sdk-0.9-setup.run
[sudo] password for msyksphinz:
Verifying archive integrity... All good.
Uncompressing SDK for Zephyr  100%
Enter target directory for SDK (default: /opt/zephyr-sdk/):
Installing SDK to /opt/zephyr-sdk
Creating directory /opt/zephyr-sdk
Success
 [*] Installing x86 tools...
 [*] Installing arm tools...
 [*] Installing arc tools...
 [*] Installing iamcu tools...
 [*] Installing nios2 tools...
 [*] Installing xtensa tools...
 [*] Installing riscv32 tools...
 [*] Installing additional host tools...
Success installing SDK. SDK is ready to be used.

make BOARD=arty_fe310 でArtyFPGA用のバイナリをビルドできる。試しにHifive1で実行できるだろうか。

f:id:msyksphinz:20170404233258p:plain

できなかった。これはシリアルコンソールのレートがあっていないだけのようにも思える。試しにいろいろ変更してみたが上手く行かなかった。 fe310を使うにあたり、drivers/serial/uart_fe310.cのボーレートを利用するようなので、HiFive1のリファレンスをもとに弄ってみたが上手く行かなかった。

UARTの部分にオシロスコープを当てられれば良いのだが、それっぽいピンが無い。ちょっと難しそうだなあ。

RISC-V on ZedBoard for Parallelaのビルド実験

試しに、RISC-V on Parallela ボードのRISC-Vデザインをビルドしてみた。

リポジトリは以下に存在している。

https://github.com/eliaskousk/parallella-riscv

ここでは、Vivadoを用いて合成するので、LinuxマシンにVivadoがインストールされているのが前提だ。

まずはデザインをcloneしてくる。

git clone https://github.com/eliaskousk/parallella-riscv.git

以降で、必要なsubmodulesはビルドスクリプトが勝手にフェッチしてくるので問題ない。

コンフィグレーションの変更を行う。今回は、RISC-VをZedBoardで動かしたいのと、Vivadoを2016.4で動作させるので、以下のような変更を行う。

  • scripts/settings.sh
diff --git a/scripts/settings.sh b/scripts/settings.sh
index 7f7dca2..e651f48 100644
--- a/scripts/settings.sh
+++ b/scripts/settings.sh
@@ -1,10 +1,10 @@
 #!/bin/bash

-BOARD=parallella
+BOARD=zedboard
 export BOARD
 echo "\$BOARD set to ${BOARD}"

-JOBS=8
+JOBS=4
 export JOBS
 echo "\$JOBS set to ${JOBS}"

@@ -12,7 +12,7 @@ VIVADO_PATH=/opt/Xilinx/Vivado
 export VIVADO_PATH
 echo "Vivado path set to ${VIVADO_PATH}"

-VIVADO_VERSION=2015.4
+VIVADO_VERSION=2016.4
 export VIVADO_VERSION
 echo "Vivado version set to ${VIVADO_VERSION}"

次に、ホストのソフトウェアをビルドする。もしかしたらこれは必要ないかもしれない。

sudo apt install openssl-dev  # 必要なファイルのインストール
./scripts/build.host.software.sh

RISC-Vデザインのビルドを行う。Vivadoが立ち上がり、合成が始まる。

./scripts/build.host.software.sh

しばらく待っているとビルドが終了するので、dcp(design check point)のファイルを読み込んで何がどうなっているのか確認してみよう。

vivado ./zedboard/fpga/zedboard_riscv/system.runs/impl_1/system_wrapper_opt.dcp

f:id:msyksphinz:20170401165650p:plain

当たり前だがほとんどがRISC-Vのデザインとなり、いくつかAXIのインタフェースを備えている。

RISC-V on Parallela Board

RISC-Vの実装としていろいろ調査している中で、Parallelaのホストボードとして利用されているZynq(またはZedBoard)上にRISC-Vを移植してアプリケーションを動作させるというプロジェクトを発見した。

Google Summer of Codeのプロジェクトの一つだったようだ。

summerofcode.withgoogle.com

これは、Parallelaのホスト制御プロセッサとして利用されているZynqにRISC-Vを移植するというもので、プロジェクトの概要を上記プロジェクトページから引用すると、

This project will focus on the integration of the RISC-V rocket core, inside the Zynq FPGA device of Parallela.

このプロジェクトをきちんと調査するまでは、ParallelaとZynq、RISC-Vがどのような関係なのか全くわからなかったが、以下の写真があるようにParallelaとZynq FPGAは密接に関係がある。

https://ksr-ugc.imgix.net/assets/000/225/981/43c4b513ab596eacb98f861f4086d6f2_original.jpg?w=680&fit=max&v=1351108884&auto=format&q=92&s=acaa0908440a8375950e94f5b789abdf

https://ksr-ugc.imgix.net/assets/000/176/636/f655b21138f173cf2c6dc2d3cff7c8f6_original.png?w=680&fit=max&v=1348542744&auto=format&lossless=true&s=dc928dbc1fb0a973bd2812e21719f7e2

(https://www.kickstarter.com/projects/adapteva/parallella-a-supercomputer-for-everyone より引用)

プロジェクトの成果として、Zynqデザインの中にRISC-Vを統合することは完了したようだ。 ただし、そこから具体的に何か新しいアプリケーションを動作させたかというとちょっと分からない。

プロジェクトのやる事自体は分かるのだが、目的がいまいちよく分からない。。。 ARMがあるならそれを使えばよいし、わざわざ低速なRISC-V IPを使う理由は良く分からないが。。。

ちなみに、成果リポジトリは以下にアップロードされている。

GitHub - eliaskousk/parallella-riscv: RISC-V port to Parallella Board

RISC-Vプラットフォーム Freedom E300 ArtyFPGA ボードの実験

Freedom PlatformをFPGAボードへ書き込む。

ArtyFPGAを知り合いから借りてきたので、それにダウンロードした。

https://japan.xilinx.com/products/boards-and-kits/arty.html

Arty FPGARISC-Vをダウンロードして動作させるための手順は、SiFiveにある、 “Freedom E310 Arty FPGA Getting Started Guide” が詳しい。

https://dev.sifive.com/develop/freedom-e310-arty-dev-kit-v1-0/

MCSファイルをダウンロードするのにSPIメモリを追加する必要がある。

Configuration Memory Deviceを追加する必要があり、以下のSPIメモリを選択して追加する。

f:id:msyksphinz:20170401012609p:plain

f:id:msyksphinz:20170401012554p:plain

ビルドしたMCSファイルを追加し、書き込みを行う。正常終了することを確認した。

f:id:msyksphinz:20170401012618p:plain

ブート時のコンソールをUARTで取得する

RISC-V on Arty FPGAの動作の様子は、UART経由で取得できる。 TeraTermを開いて、UARTを以下のように設定した。

f:id:msyksphinz:20170401012628p:plain

この状態でArtyFPGAのPROGボタンを押して、デザインをリロードする。

UARTにメッセージが表示された!

f:id:msyksphinz:20170401012633p:plain

また、0~2のキーを入力することで、ArtyFPGA上のLEDの色を制御することができる。

前回記事

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

RISC-V ISS Spikeのチュートリアル資料

RISC-VのMLにSpikeのチュートリアル資料が投稿されていた。

groups.google.com

SpikeのOverviewと、それを実現するためのソースコードの一覧となっている資料だ。

f:id:msyksphinz:20170331214642p:plain

  • メモリシステム
  • キャッシュ構成
  • TLB & MMU
  • プロセッサのOverview
  • Hartのモデル
  • 例外モデル

Spikeの内部構成がある程度把握できるようになる資料なので、初心者の方は一読してみてはどうだろうか。

RISC-V SiFive Freedomプラットフォームのビルド手順

前回、SiFiveのFreedomプラットフォームについてまとめたが、今回は実際にそのプロジェクトを触ってみる。

Freedomプラットフォームはgithubに公開されており、デバイスさえあれば誰でもビルドすることができるようになっている。

github.com

ビルド対象のFPGAは2種類用意されており、Freedom EverywhereではDigilentのArty FPGA、Freedom UnleashedではXilinxのVC707 FPGA Boardをターゲットとしている。

f:id:msyksphinz:20170328235514p:plain

とりあえずWebPackを持っている私としては、DigilentのArty FPGAボードのほうが入手しやすい(持ってないけど)。 どのようなプロジェクトが出来上がるのか、確認しておこう。

Vivado WebPackでFreedom E310 Arty FPGA Dev Kitをビルドするためには

Vivado WebPackはデフォルトではArty FPGAボードの情報を持っていない。したがって、VivadoをインストールしてすぐにArty向けにビルドをしてもエラーをはいて終了してしまう。

そこで、DigilentのホームページからArty FPGAボードのボード情報ファイルを取得してきた。

Vivado Version 2015.1 and Later Board File Installation [Reference.Digilentinc]

f:id:msyksphinz:20170328235822p:plain

“Download"からボード情報をダウンロードして、展開した。これをXilinxのVivadoインストールフォルダの/data/boards/board_filesに展開する。

f:id:msyksphinz:20170328235936p:plain

上手く行けば、VivadoのCreate Projectから、Artyボードを選択できるようになっているはずだ。

f:id:msyksphinz:20170329000522p:plain

これを確認して、SiFiveプラットフォームをビルドしてみる。

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

無事にビルドが完了し、FPGA用のMCSファイルが生成されると、以下のようなメッセージとともにVivadoが終了する。

...
#   create_fileset -simset sim_1
# }
# set obj [current_fileset -simset]
# add_files -norecurse -fileset $obj [glob -directory $srcdir {*.v}]
# set_property TOP {tb} $obj
# if {[get_filesets -quiet constrs_1] eq ""} {
#   create_fileset -constrset constrs_1
# }
# set obj [current_fileset -constrset]
# add_files -norecurse -fileset $obj [glob -directory $constrsdir {*.xdc}]
source script/cfgmem.tcl
# lassign $argv mcsfile bitfile datafile
# set iface spix4
# set size 16
# set bitaddr 0x0
# write_cfgmem -format mcs -interface $iface -size $size \
#   -loadbit "up ${bitaddr} ${bitfile}" \
#   -loaddata [expr {$datafile ne "" ? "up 0x400000 ${datafile}" : ""}] \
#   -file $mcsfile -force
Command: write_cfgmem -format mcs -interface spix4 -size 16 -loadbit {up 0x0 obj/system.bit} -loaddata {} -file obj/system.mcs -force
Creating config memory files...
Creating bitstream load up from address 0x00000000
Loading bitfile obj/system.bit
Writing file obj/system.mcs
Writing log file obj/system.prm
===================================
Configuration Memory information
===================================
File Format        MCS
Interface          SPIX4
Size               16M
Start Address      0x00000000
End Address        0x00FFFFFF

Addr1         Addr2         Date                    File(s)
0x00000000    0x0021728B    Mar 28 23:45:11 2017    obj/system.bit
0 Infos, 0 Warnings, 0 Critical Warnings and 0 Errors encountered.
write_cfgmem completed successfully
INFO: [Common 17-206] Exiting Vivado at Tue Mar 28 23:45:45 2017...
make[1]: Leaving directory '/home/msyksphinz/work/freedom/fpga/e300artydevkit'
cp /home/msyksphinz/work/freedom/fpga/e300artydevkit/obj/system.mcs /home/msyksphinz/work/freedom/builds/e300artydevkit/sifive.freedom.everywhere.e300artydevkit.E300ArtyDevKitConfig.mcs

dcp(Design Check Point)が生成されていたので、ちょっと見てみた。

f:id:msyksphinz:20170329001650p:plain

Coreplexが、CPUの部分だ。

関連記事

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

RISC-Vプラットフォーム SiFive Freedomについて

RISC-VのASICチップおよび評価ボードとして、SiFiveのHiFive1ボードがすでに世界中で販売されているが、このHiFive1の持つFreedomプラットフォームについてまとめておこう。

そもそもHiFive1のRISC-Vプラットフォームはどのようになっているのだろう。

SiFive Freedomプラットフォームについて

そもそもHiFive1とは何なのか

dev.sifive.com

HiFive1は、SiFive FE310-G000という製品名として定義されている。

The FE310-G000 is the first Freedom E300 SoC, and forms the basis of the HiFive1 developmentboard for the Freedom E300 family.

f:id:msyksphinz:20170328004906p:plain

FE310-G000のブロックダイアグラム

ブロックダイアグラムの左側が、E31 CoreplexというCPUコアの部分になる。 HiFive1のE31 Coreplexは、以下のような構成となっている。

  • コア構成 : RV32IMAC (浮動小数点無し)
  • 分岐予測 : 40エントリのBranch-Target Buffer(BTB), 128エントリの分岐ヒストリ, 2エントリのReturn Stack Pointer(RAS)
  • 整数乗算 : 1サイクルあたり8ビットの乗算、つまり32ビットの計算を4クロックで実行
  • 整数除算 : 1ビットあたり1サイクル。計算サイクルは可変
  • 命令キャッシュ : 16kB, 2ウェイセットアソシアティブ
  • データキャッシュ : 16kB SRAM
  • システムマスクROM : 8kB ブートコード、コンフィグレーション文字列、デバッグROMルーチン挿入用

Freedom プラットフォームについて

Freedom プラットフォームには、現在2種類が存在する。 Freedom Unleashedという大規模SoC向けプラットフォームと、Freedom Everywhereというマイコン向けプラットフォームだ。 それぞれのプラットフォームの特徴を比較してみる。

Freedom Unleashed Freedom Everywhere
コア種類 U5 Coreplex at 1.6GHz+ E3 Coreplex
アーキテクチャ RV64GC RV32IMC/RV32EMC
マルチコア マルチコア、キャッシュコヒーレンシ -
Peripherals PCIe 3.0, USB3.0, GbE, DDR3/4 On chip Flash, OTP, SRAM
プロセス TSMC 28nm TSMC 180nm
OS Linux FreeRTOS
デバッグツール サポート サポート
FPGA VC707 FPGA Board(Xilinx) Arty FPGA Board(Xilinx)
ASIC - HiFive1

Freedom Unleashed

UNIXベースのSoCプラットフォームを構築するためのプラットフォーム。マシンラーニング、ストレージ、ネットワークなどの用途向けとなっている。

サポートFPGAボード

現在では、VC707 FPGAをサポートしている。開発環境は、githubから入手可能だ。

https://dev.sifive.com/static/core/images/dev-boards/xilinx-virtex-7-fpga-vc707-evaluation-kit.7cc42519defd.jpg

ブロックダイアグラム

f:id:msyksphinz:20170328010836p:plain

Freedom U500プラットフォームは、1~8コアまでのマルチコアをサポートしている。またキャッシュコヒーレンシをとるためのL2ユニットと、DDR3/4、PCI-Express Gen3.0, Ethernet, USB-3.0などを接続可能だ。

Freedom Everywhere

マイクロコントローラタイプのプラットフォーム。組み込みマイクロプロセッサ、IoT、ウェアラブルなどのマーケット向け。

サポートFPGAボード

現在では、Arty FPGAボードをサポートしている。開発環境は、githubから入手可能だ。 また、ASICチップとして、HiFive1が入手できる。

https://dev.sifive.com/static/core/images/dev-boards/arty-artix-7.cf703ff39240.jpg

https://dev.sifive.com/static/core/images/dev-boards/hifive1.c27e1a6465d5.png

ブロックダイアグラム

ブロックダイアグラムはHiFive1のものと同一だ。

f:id:msyksphinz:20170328004906p:plain

関連記事

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com