ULX3SでFemtoRVを動かしてみる
https://gyazo.com/cf74b48e879cbf6330dbc47a3d15bdb0
M1MacでFemtoRVをビルドして、ULX3S上で動かす手順をまとめた。
事前準備
YosysHQが提供しているOSS CAD Suiteをインストールする。
YosysHQ / OSS CAD Suite
M1 Mac向けのバイナリパッケージをダウンロード
ダウンロードしたファイルに実行権限を与え、展開し、/opt/oss-cad-suite へ配置
code:sh
$ cd ~/Downloads
$ xattr -d com.apple.quarantine oss-cad-suite-darwin-arm64-20241105.tgz
$ tar xf oss-cad-suite-darwin-arm64-20241105.tgz
$ mv oss-cad-suite /opt/
/opt/oss-cad-suite/bin へパスを通す
fujprogをujprogとして使えるようシンボリックリンクを張る
$ ln -s /opt/oss-cad-suite/bin/fujprog /opt/oss-cad-suite/bin/ujprog
FemtoRVはfujprogではなくujprogを利用しているが、fujprogと使い方は一緒なのでシンボリックリンクを張って済ませる
FemtoRVのソースコード取得とビルド
FemtoRVのソースコードを取得し、
code:sh
$ cd ~/src/
ULX3SをMacBookと接続して、FemtoRVのビルドを行う。
(初回のみ RISC-V 用のクロスコンパイラなどがダウンロードされるため少し時間がかかる)
code:sh
$ cd learn-fpga/FemtoRV/
$ make ULX3S
ビルドが成功すると、FemtoRVがULX3Sへアップロードされる。
デフォルトで動作するアプリケーションは commander という、SDカードから実行したプログラムをロードするためのランチャーのようなもののため、分かりやすく動作を確認できない。
分かりやすいサンプルプログラムを動かすため、以下の手順で tinyblinky をビルドする。
tinyblinky を実行
code:sh
$ cd FIRMWARE/ASM_EXAMPLES
$ make clean tinyblinky.hex
$ cd ../..
$ make ULX3S.synth ULX3S.prog_fast
ULX3S本体の、D0からD3までの4つのLEDが激しく明滅すればOK
レイトレーサを実行
次に tinyraytracer を動かしてみる。
code:sh
$ cd FIRMWARE/EXAMPLES/
$ make clean tinyraytracer.hex
$ cd ../..
$ make ULX3S.synth ULX3S.prog_fast
モードを聞かれるので、「OLED 96x64 16」を選択すると、OLEDにレイトレーシングの結果が表示される。
https://gyazo.com/cf74b48e879cbf6330dbc47a3d15bdb0
「make ULX3S」と「make ULX3S.fast」
$ make ULX3S
もろもろビルドされてULX3Sのflashへ書き込まれる
flashではなくSRAMへ書き込む場合はこちら↓
$ make ULX3S.fast
SDカードに入れたプログラムを動かす
デフォルトで動作するFemtoRVのアプリケーション commander は、SDカードから動かしたいプログラムのELFファイルを選択して実行することができる。
まずはSDカードに入れるためのサンプルプログラムをビルドして、SDカードへコピーする。
code:sh
$ cd FIRMWARE/ASM_EXAMPLES/
$ make blinker_loop.elf hello.elf mandelbrot_terminal.elf tinyblinky.elf mandelbrot_OLED.elf test_OLED.elf test_serial.elf
# SDカードへコピー
$ cp *.elf /Volumes/NO\ NAME/
サンプルプログラムをコピーしたSDカードをULX3S実機へ差し込み、commander をULX3Sへアップロードする。
code:sh
$ cd FIRMWARE/FEMTOS/
$ make clean commander.hex
$ cd ../..
$ make ULX3S
SDカード内のプログラム一覧が表示される
https://gyazo.com/570f9307e440cbc63f02183718a00799
UPボタンとDOWNボタンで動かしたいプログラムを選択、RIGHTボタンで実行する。
hello を選択すると、OLEDに激しく Hello, world !! が出力される。
別のプログラムを実行したい場合は、USBケーブルを抜き差しする。
https://gyazo.com/d08a55c369823dcbcd893cc76ba615e5
FAT_FS: Error could not load FAT details (-3)!
動かしてるうちに以下のようなエラーが出ることがある。その時はSDカードを再初期化すればOK。
SDカードの初期化はSDカードコンソーシアム公式のアプリがおすすめ。
https://gyazo.com/766e92fc23a2c048d92c46ec8d303028
FIRMWARE/EXAMPLES
他のサンプルプログラムも動かしてみる。
code:sh
$ cd FIRMWARE/EXAMPLES/
$ make everything
$ cp *.elf /Volumes/NO\ NAME/
cube
https://gyazo.com/b044a83a6882eceb2689ff9f34ba9a70
tinyraytracer
https://gyazo.com/48419432b509545f9252ef8b6ed2b180