FPGA開発日記

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

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (11. 自作RISC-VシミュレータでBBLとvmlinuxを起動する2)

UCBが開発しているRISC-VのシミュレータSpikeや、Rocket-ChipのRTLデザインは通常はシステムコールを持っていない。 つまり、当然ながらC言語printf("Hello World\n");などと書いても動作しないのだが、そこはコンパイラとフロントエンドサーバfesvr、pk(Proxy Kernel)によって肩代わりすることでこれらのシステムコールを実現している。

というわけで、vmlinuxを起動するところのデバッグをしていたのだが、昨日はブートの途中で止まっていた。 いろいろ修正した結果、メモリアクセス関連の実装がかなりナイーブな実装をしており、それで遅くなっていることが分かってきた。

修正すると、ある程度まともになってきた。 ただし、Spikeシミュレータは爆速だなあ...トレースファイルを出力するようにすれば、かなり対等な速度で動作するのだけれど...

f:id:msyksphinz:20180804014236g:plain
図. Spikeシミュレータと自作RISC-Vシミュレータで同時にvmlinuxを起動する。左がSpike, 右が自作RISC-Vシミュレータ。

次に、ディスク関係の実装を進めていこうかな。