FPGA開発日記

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

レアジョブを初めて200回到達した

f:id:msyksphinz:20170407000125p:plain

英会話講座としてレアジョブを継続している。 レアジョブはSkypeを使った英会話教室だ。 講師はほとんどがフィリピン人だが、非常に格安、時間がどこでも選べるというのが利点だ。

www.rarejob.com

1年半前くらいから始めたのだが、1日30分のレッスンが200回に到達した。 だいたい3日に1回くらいやっている計算になる。

レアジョブを始めてから変わったのは、とりあえず3日に1回程度は英語をしゃべらざるを得ない状況に置かれるため、会話をするにあたる緊張感が減ってきたこと(最初のころは緊張で汗をかきながら話していた)、 顔が見えない状況で、音声だけでどうにか会話する技術がついたことくらいだろうか。

会話スキル自体については、聞き返す方法のバリエーションが増えたくらいで、いまいち向上していない。 まあ、これも継続かな。

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

ParallelaのオープンソースハードウェアIP

Parallela本体はさすがに無いけれども、Parallelaの周辺回路や制御するための周辺回路はGithubにいくつか公開されている。

github.com

巨大な回路は、使い道がないかもだけれども、FIFOとかデュアルポートメモリインタフェースとか、地味に便利かもね。

github.com

f:id:msyksphinz:20170401171258p:plain

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