NaxRiscvのドキュメントを、改めて位置から読んでみることにしたいと思う。
イントロダクション
NaxRiscv
NaxRiscv は現在、以下の特徴を持つコアである。
- レジスタ・リネーミング付きアウト・オブ・オーダ実行
- スーパースカラ(例:2デコード、3実行ユニット、2リタイア)
- (RV32/RV64) IMAFDCSU(Linux / Buildroot / Debian
- ポータブルHDLだが、分散RAM付きのターゲットFPGA(これまで使用された参照はXilinxシリーズ7)
- (比較的) 低い面積使用率と高い fmax をターゲットとする (最高の IPC ではない)
- 分散型ハードウェア演算 (プラグインでパラメータ設定可能な空のトップレベル)
- カスタマイズを容易にするパイプラインフレームワークをベースとしたフロントエンドの実現
- 複数のリフィルおよびライトバックスロットを備えたノンブロッキングデータキャッシュ
- BTB + GSHARE + RAS ブランチ予測
- ハードウェアリフィル MMU (SV32、SV39)
- 投機的キャッシュヒット予測により、レイテンシ3サイクルでロードを実行
- verilatorシミュレーションとKonata(gem5ファイルフォーマット)によるパイプラインの視覚化
- RISCV外部デバッグサポートv. 0.13.2の実装によるJTAG / OpenOCD / GDBサポート
- Tilelinkによるメモリコヒーレンシのサポート
- オプションのコヒーレントL2キャッシュ
プロジェクトの開発と現状
- このプロジェクトはフリーかつオープンソースである
- ハードウェア(ArtyA7 / Litex)上でDebian/Buildroot/Linuxを上流で実行できる
- 2021年10月に開始し、その後NLnetから資金援助を受けた(https://nlnet.nl/project/NaxRiscv/#ack)
第三者によるドキュメントもこちらで入手可能(CEA-Letiより): https://github.com/SpinalHDL/naxriscv_doc
なぜFPGAをターゲットにしたOoOコアなのか
理由はいくつかある
- シングルスレッドのパフォーマンスを向上させるため。
VexRiscvでLinuxを実行したテストでは、マルチコアが役立つとしても、「ほとんど」のアプリケーションはそれを活用するように作られていないことが明らかになった。 - メモリレイテンシを隠蔽するため(FPGAに大きなL2キャッシュを搭載できるほどのメモリはない)。 - より高度なハードウェア記述パラダイム(Scala/SpinalHDL)を試すため。 - 個人的な興味から。
また、世の中にはOoOのオープンソース・ソフトコアがあまり存在していなかった(Marocchino、RSD、OPAなど)。 いくつかの指標において、より良い結果を出すことができるという賭けだった。 そして、より良いパフォーマンス(面積の犠牲を払って)を提供することで、1命令発行/インオーダ・コアのソフトコアを置き換えるのに十分なほど良い結果を出すことができるだろう。