Verylで作るCPU
まえがき
本書を読むとわかること
対象読者
必要な知識
本書のソースコード / 問い合わせ先
CPUの自作
RISC-V
本書の構成
凡例
第I部 RV32I/RV64Iの実装
1 環境構築
1.1 Veryl
1.2 Verilator
1.3 riscv-gnu-toolchain
2 ハードウェア記述言語 Veryl
2.1 ハードウェア記述言語
2.2 Verylの基本文法、機能
3 RV32Iの実装
3.1 CPUは何をやっているのか?
3.2 プロジェクトの作成
3.3 定数の定義
3.4 メモリ
3.5 最上位モジュールの作成
3.6 命令フェッチ
3.7 命令のデコードと即値の生成
3.8 レジスタの定義と読み込み
3.9 ALUによる計算の実装
3.10 レジスタに結果を書き込む
3.11 ロード命令とストア命令の実装
3.12 ジャンプ命令、分岐命令の実装
4 Zicsr拡張の実装
4.1 CSRとは何か?
4.2 CSR命令のデコード
4.3 csrunitモジュールの実装
4.4 ECALL命令の実装
4.5 MRET命令の実装
5 riscv-testsによるテスト
5.1 riscv-testsとは何か?
5.2 riscv-testsのビルド
5.3 テスト内容の確認
5.4 テストの終了検知
5.5 テストの実行
5.6 複数のテストの自動実行
6 RV64Iの実装
6.1 XLENの変更
6.2 ADD[I]W、SUBW命令の実装
6.3 SLL[I]W、SRL[I]W、SRA[I]W命令の実装
6.4 LWU命令の実装
6.5 LD、SD命令の実装
7 CPUのパイプライン化
7.1 CPUの速度
7.2 パイプライン処理の実装
7.3 データ依存の対処
8 CPUの合成
8.1 FPGAとは何か?
8.2 テスト用の最上位モジュールの作成
8.3 FPGAへの合成① (TangMega138K)
8.4 FPGAへの合成② (PYNQ-Z1)
あとがき
著者について
謝辞
このプロジェクトに貢献する
参考文献
▶