ResearchFIG.1 MiNTs-CPUの構成を簡略化した図です。Verilator上のRTLシミュレーションで動作を確認しています。
RTLシミュレーション段階
MiNTs-CPU
SystemVerilogで設計した、RV64IMACのインオーダーCPUです。cpu.kanataso.netのCPU自作教材を出発点に、Linuxの起動、参照モデルとのロックステップ検証、性能カウンタを使った改善へと発展させてきました。
GitHubでコードを見る- 61,610,275
- Whisperとのロックステップ比較で一致した命令数
- 54 / 54
- rv64uiテストの合格数
- CPI 2.393
- Linux起動の100Mサイクル計測。改善前は2.529
FIG.2 Branch-heavy loop
Rocket Chipとのサイクル差が、ほぼなくなった
1xループで、MiNTs-CPUの総サイクル数からRocket Chipの総サイクル数を引いた値です。
改善前
+19,968fetch側BTBを導入
+9,970fetch / issueのbypassを導入
−31
すべての数値を表で見る
| サイクル数 | 1x | 2x | 4x |
|---|---|---|---|
| Rocket Chip | 70,045 | 65,042 | 62,545 |
| MiNTs-CPU:改善前 | 90,013 | 75,025 | 67,537 |
| MiNTs-CPU:fetch側BTBを導入 | 80,015 | 70,027 | 65,039 |
| MiNTs-CPU:fetch / issueのbypassを導入 | 70,014 | 65,026 | 62,538 |
共通のRV64整数アセンブリによる、分岐の多いループでの比較です。CPU全体の性能がRocket Chipと同等という意味ではありません。値はシミュレーションによるもので、シリコンやFPGAでの結果ではありません。
測定の詳細をQiitaで読む現在の実装
Current implementation
- ISA
- RV64IMAC
- パイプライン
- インオーダー5段
- 特権モード
- M / S / U
- 仮想メモリ
- Sv39、共有PTW、ITLB、DTLB
- メモリ保護
- 8エントリのPMP(命令、データ、PTWの物理アクセスを検査)
- キャッシュ
- 4KiB I-cache、16KiB D-cache(write-through)、8エントリのstore buffer
- 分岐予測
- 2-bit PHT、fetch側BTB、JALR BTB、RAS
- 割り込み・周辺
- ACLINT、PLIC互換コントローラ、NS16550A互換UART
- 起動
- OpenSBI v1.3.1 → Linux 6.12 → BusyBox
- 検証
- riscv-tests、独自Cテスト、Linux起動、Whisperロックステップ
未対応の機能
Not yet supported
- F / D 浮動小数点
- Zb* ビット操作
- SMP / キャッシュコヒーレンス
- write-back D-cacheの安定版
- RVA23への完全準拠
- FPGAでのタイミングクロージャ
共同研究・技術連携
Collaborate with us
MiNTs-CPUは研究段階のもので、製品やサービスとして提供しているものではありません。