FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

ハードウェアの構築からチップ設計までを一気通貫するフレームワークChipyardを試す(1. 環境構築とシミュレーション)

f:id:msyksphinz:20191020175831p:plain

ChipyardというのはRISC-Vをベースとしたチップ設計のためのフレームワークで、ツールセット・ライブラリ・デザインなどを一つにまとめたフレームワークのようだ。このフレームワークを使用することで、ハードウェアの設計からシミュレーション・論理合成・チップ設計まどを一気通貫するフローで行うことができるということを売りにしている。

chipyard.readthedocs.io

  • クイックスタート

まずはリポジトリを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