HiFive Unleashedは高くて買えないのだけれども、RISC-V SDKであるFreedom-U-SDKを使ってみることにした。
これはデフォルトでRISC-V上で動作するLinuxの環境が乗っているようで、SDカードなど用意してLinuxをビルドすると、ちゃんとHiFiveで動作するらしい。
こちらの記事など参考になる。
前回ビルドしたLinuxを指定して自作RISC-Vシミュレータにかけると、途中でクラッシュしてしまった。
Spikeと一致比較をしているのだが、どうもうまく一致しない。 まださらに検証する必要がありそうだ...というか、mstatusのDirtyビットとかをきちんと実装する必要がありそうだ。
あとは、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ビットの動作モードに基づいて実行がなされる。