ChipyardというのはRISC-Vをベースとしたチップ設計のためのフレームワークで、ツールセット・ライブラリ・デザインなどを一つにまとめたフレームワークのようだ。このフレームワークを使用することで、ハードウェアの設計からシミュレーション・論理合成・チップ設計まどを一気通貫するフローで行うことができるということを売りにしている。
- クイックスタート
まずはリポジトリをcloneして環境を構築する。大量のサブリポジトリがダウンロードされるので注意。
git clone https://github.com/ucb-bar/chipyard.git
cd chipyard
./scripts/init-submodules-no-riscv-tools.sh
- RISC-Vツールセットのインストール
次に、RISC-Vのツールセット群をダウンロードしてビルドする。これも結構な量のツールをダウンロードしてくるのでディスク量に注意。du
してみると15GB程度ディスクを使用していた。
./scripts/build-toolchains.sh
ビルドは自動的に並列実行されるようになっているが、おかげさまで使っているPCのリソースを全部持って行かれた。完了するとenv.sh
をsourceしておく。
source ./env.sh
- ハードウェアのシミュレーション
次に、サンプルプロジェクトをビルドしてRTLシミュレーションを行う。私はVerilatorしか持っていないのでVerilatorを使用する。
cd sims/verilator make # デザインのコンパイル
デザインの生成とコンパイルが行われる。しばらくすると終了するのでシミュレーションを実行する。
./simulator-example-DefaultRocketConfig $RISCV/riscv64-unknown-elf/share/riscv-tests/isa/rv64ui-p-simple +jtag_rbb_enable=1
This emulator compiled with JTAG Remote Bitbang client. To enable, use +jtag_rbb_enable=1. Listening on port 54884
あれ、+jtag_rbb_enable=1
を設定しているのになぜか上手く行かない。とりあえず全部のテストコードを流してみるとうまくいくだろうか。
make run-asm-tests make run-bmark-tests
しばらく時間がかかるが正しく動作しているように見える。
最後に結果が表示され、すべてPASSとなった。
[ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/rv64um-v-mul.out Completed after 61431 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/rv64um-v-mulh.out Completed after 61444 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/rv64um-v-mulhsu.out Completed after 61519 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/rv64um-v-mulhu.out Completed after 61530 cycles ... [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/rv64ui-v-sraw.out Completed after 74209 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/rv64ui-v-srliw.out Completed after 54595 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/rv64ui-v-srlw.out Completed after 74166 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/rv64ui-v-subw.out Completed after 61322 cycles
make run-bmark-tests
の方も問題ないようだ。
[ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/mm.riscv.out Completed after 408500 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/spmv.riscv.out Completed after 187129 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/mt-vvadd.riscv.out Completed after 147974 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/median.riscv.out Completed after 29220 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/multiply.riscv.out Completed after 66162 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/qsort.riscv.out Completed after 395238 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/towers.riscv.out Completed after 26010 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/vvadd.riscv.out Completed after 23160 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/dhrystone.riscv.out Completed after 302026 cycles [ PASSED ] /home/msyksphinz/work/riscv/chipyard/chipyard/sims/verilator/output/example.TestHarness.DefaultRocketConfig/mt-matmul.riscv.out Completed after 62320 cycles