basic_RV32s: オープンソース RISC-V RV32I CPU 設計ガイド
(github.com/RISC-KC)4種類のCPUと2種類のSoC設計による実習を通じて、RISC-V CPU設計の基礎を学べる basic_RV32s を紹介します。
basic_RV32s の要約
- 兵役中の6か月間で制作した、FPGAで動作可能な softcore RISC-V RV32I CPU
- Dhrystone 1.11 DMIPS/MHz、Coremark 1.10 Coremark/MHz の性能を達成
韓国国内で設計されたRV32IベースCPU論文の中でも最上位クラスの性能。
(RISS 126本の論文のうち、RV32I benchmark を含む11本を参照、執筆日時点)
(@50MHz 動作) - 段階的なCPU設計プロセスとSoC設計
- 3つのシングルサイクルコア(37F, 43F, 46F)
- 1つの5段パイプラインコア(46F5SP)
- パイプラインコアを搭載した2種類のSoC設計
(46F5SP_SoC - Debug, Benchmark)
- 直感的で理解しやすいハイレベルなモジュール抽象化と設計
- RISC-V CPU設計を学べる各種ドキュメントを提供
- RV32I Cheatsheet Excel
- 開発日誌、デバッグ記録
- アーキテクチャ設計ガイドライン
- すべてのアーキテクチャおよびモジュール別ロジック説明ドキュメント
- ベアメタル移植ガイドライン
- RISC-V GNU GCC Toolchain RV32I ビルドガイドライン
- Dhrystone ベンチマーク RV32I ベアメタル実行ガイドライン など
- コメントなしのクリーンコードと、コメント付きのデュアルフォーマット構造コードを提供
- 信号レベルのアーキテクチャブロック図を提供
- 学部2年生2人 が単独で論文投稿し、ISOCC 2025 で学会発表
- RISC-V 公式学習リポジトリ riscv/learn に掲載
- Learning Resources - Intermediate-Level Resource
開発背景
2024年12月15日、兵役中に同期の1人と一緒にCPUを直接作るプロジェクトを始めました。少し前にちょうど1周年を迎えました。
基礎的なコンピュータアーキテクチャに基づいてRISC-V CPUを作ること自体は、理論が非常に豊富で教材も多く、比較的学びやすいものでした。しかし実際にキーボードの前に立つと、それは別の問題として迫ってきました。
大学で浅く学んだ VerilogHDL で本格的なプロジェクトを始めるのは初めてでしたが、コーディング力以前に、RISC-V CPUを作るための文書、マニュアル、ガイドラインを含んだ実際のオープンソースRISC-Vの例がほとんどないことに気づきました。(riscv/learn - open implementations 基準)
もちろん、NEORV32 や DarkRISCV など、すでに実装されたコアを分解して分析することは学習に適した方法ですが、設計思想や開発記録など、設計上の問題に対してその設計がなされた根拠や理由を正確に理解し、探し出すのはかなり大変でした。
そこで私は、このプロジェクトを単なるオープンソースRISC-V CPU実装にとどめず、RISC-V RV32I CPU を作るための包括的なオープンソースガイドラインへと拡張することにしました。初心者が成長していく記録が、次の初心者たちにとって良い足跡になるのではないかと思ったからです。
basic_RV32s の紹介
上の要約にあるように、開発ログやコア設計に関する文書、RISC-V CPU制作に関する失敗メモなどを含んでおり、パターソン=ヘネシーの方法論をベースアーキテクチャとして、私のようなRISC-Vハードウェア設計初心者を対象にしています。
中核設計は、RV32Iで37個の命令をサポートする37Fアーキテクチャから始まり、次のように拡張される段階的な形で提供されます。
- 37F : ベースアーキテクチャ、シングルサイクル
- 43F : 6個の Zicsr 拡張命令をサポート
- 46F : EBREAK、ECALL、mret 命令をサポート
- 46F5SP : データフォワーディングと2ビットFSM動的分岐予測器を備えた5段パイプライン拡張
コアをFPGAに実装するために 46F5SP_SoC を設計し、2つのバージョンを作成しました。
- デバッグ版
命令をデバッグしながら、段階ごとの実行過程をボタン操作でUART通信を通じて確認できます。 - ベンチマーク版
Dhrystone や Coremark などを実行し、UART を通じて直接結果を得られます。
最近更新された 46F5SP_MMIO_SoC は、UART出力をサポートする MMIOを実装して printf 機能をサポートします。このSoCは、適切なリンカ、ブートスクリプト、syscall などの BSP ファイル群を通じてコンパイルすれば、Dhrystone 2.1 や Coremark など、さまざまなCプログラムの結果を直接得ることができます。
締めくくり
RISC-V に対する私たちの情熱が、初心者たちのスタートの助けになれば幸いです。そして最も重要なのは、このプロジェクト全体がオープンソースだという点です。
このプロジェクトを活用して、RISC-V コミュニティにより良い学習チュートリアルや文書、プロセッサデザインを作り、誰でも自由に貢献できるという意味です。
私はこのプロジェクトの目的のために、さらに多くのものが必要だと感じています。プロジェクトを進めながら検証に終わりはないことを知りましたし、私は専門家ではないため、さまざまなハザードを含め、私の知らない不具合が多く含まれている可能性があります。だからこそ、このリポジトリは frozen ではなく、今も開かれたままです。どうか 熟練者の方々に私たちの成果を見てフィードバックしていただければ、大きな助けになります。それは私たちだけでなく、このプロジェクトを見て学ぶすべての人にとっても同じです。
今後
現在は RV32I の次として RV64I 拡張を終え、RV64IM への拡張、さらに当初の夢だった韓国の汎用CPU(RVA23)を作るという目標に向かって進んでいます。ima_make_rv64 というリポジトリで、現在は RV64IMA 拡張までの開発に専念しています。見守っていただけると本当にありがたいです。
まだコメントはありません。