chiselで簡単なRV32Iもどきを作りました
先日からコツコツRISCVを作ってたんですが、とりあえず spikeとのレジスタチェック、命令トレースチェック環境を構築し、 簡単なMain関数の実行が適切に流れるところまで確認しました!!
以下の設計方針で簡単に作成しただけですが、ある程度早めに良い感じでできました!! さすが、chiselという感じで、トレーサについてもchisel(scala) onlyで対応できました。(一部簡単なスクリプトはpythonですが)
- パイプラインなし。1clock動作のprocessor
命令実行してから次の命令なのでハザードは起こらない。 - RV32Iの一部命令のみ実装 (後は必要に応じて実装予定です)
- テストはプログラムをspikeで実行させ、実行ログに記載の次PC値とWrite Backレジスタの値を、 比較して一致することを確認
ここまで来たらデバッガも欲しくなりますね。
なんとRISC-Vにはデバッガ仕様があるようなので調べて、実装してみようと思います。
いや、まずはコンプライアンステストを通すことが先決かもしれませんね。
--> 3/1(日) 1:00: 1日かけて通しました!なかなか罠みたいな点多かったですが、なんとかなりました。おかげでRV32Iの基本仕様の理解が進んだ気がしました!
進捗記録
- 2/29
2/28
- Load/Store命令追加
- AUIPC命令追加
add auipc, jalr, load/store instructions. expect.txt OK! · moamoai/chisel_riscv@48b59c5 · GitHub
2/27:
- jal/bra命令追加
- Signed imm対応
mod imm for signed. · moamoai/chisel_riscv@dd76072 · GitHub
2/26
- OP_IMM, LUI命令を追加 add LUI/OP-IMM/OP instructions. · moamoai/chisel_riscv@b2b721d · GitHub
- PCを追加。また命令カウンタの期待値比較を追加 add PC, mod tools · moamoai/chisel_riscv@329f9f8 · GitHub
2/25
2/24
- パイプラインモジュール追加
あとがき
というわけで、RV32Iもどきを作ってみました。 実は去年にPythonでシミュレータ作っていたのですが、このときは14くらいしかパタン通せませんでした。 しかし、今回はすべてPassしたのでよかったです!
もしかしたら、成長しているかもと思えました。