FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages

Freedom-U-SDKで生成したLinuxバイナリを自作RISC-Vシミュレータで実行

HiFive Unleashedは高くて買えないのだけれども、RISC-V SDKであるFreedom-U-SDKを使ってみることにした。

これはデフォルトでRISC-V上で動作するLinuxの環境が乗っているようで、SDカードなど用意してLinuxをビルドすると、ちゃんとHiFiveで動作するらしい。

こちらの記事など参考になる。

qiita.com

前回ビルドしたLinuxを指定して自作RISC-Vシミュレータにかけると、途中でクラッシュしてしまった。

Spikeと一致比較をしているのだが、どうもうまく一致しない。 まださらに検証する必要がありそうだ...というか、mstatusのDirtyビットとかをきちんと実装する必要がありそうだ。

f:id:msyksphinz:20180807022048p:plain

あとは、RISC-Vの仮想メモリアドレス変換についてもまた珍しい機能を見つけた。 これを実装しないと、Linuxはブートしないらしい。くそう。

The MPRV (Modify PRiVilege) bit modifies the privilege level at which loads and stores execute
in all privilege modes. When MPRV=0, translation and protection behave as normal. When
MPRV=1, load and store memory addresses are translated and protected as though the current
privilege mode were set to MPP. Instruction address-translation and protection are unaffected.
MPRV is hardwired to 0 if U-mode is not supported.

簡単に言うと、MPRVビットが1になっているときは、フェッチ以外のメモリアクセスはMPPビットの動作モードに基づいて実行がなされる。