Research
RTLシミュレーション段階

MiNTs-CPU

SystemVerilogで設計した、RV64IMACのインオーダーCPUです。cpu.kanataso.netのCPU自作教材を出発点に、Linuxの起動、参照モデルとのロックステップ検証、性能カウンタを使った改善へと発展させてきました。

GitHubでコードを見る
CPU CORE / RV64IMAC / IN-ORDER 5-STAGEIFFETCHBPREDITLBI-CACHEIDDECODEREGFILEEXALUBRANCHMUL/DIVFORWARDMEMDTLBPMPD-CACHESTORE BUFWBWRITEBACKRETIREMMU / PROTECTIONSV39 PTWPMP CHECKVERIFICATION / MEASUREMENTWHISPER LOCKPERF COUNTI/D ARBITER / MMIO DECODEBOOT ROMRAMUARTPLICACLINTDEBUG
FIG.1 MiNTs-CPUの構成を簡略化した図です。Verilator上のRTLシミュレーションで動作を確認しています。
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,968
  • fetch側BTBを導入

    +9,970
  • fetch / issueのbypassを導入

    −31
すべての数値を表で見る
サイクル数1x2x4x
Rocket Chip70,04565,04262,545
MiNTs-CPU:改善前90,01375,02567,537
MiNTs-CPU:fetch側BTBを導入80,01570,02765,039
MiNTs-CPU:fetch / issueのbypassを導入70,01465,02662,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は研究段階のもので、製品やサービスとして提供しているものではありません。

相談する