現在のPulsar-2プロジェクトは、リポジトリをcloneしてから実行するまでがいろいろコマンドを叩かなくてはならなくて大変なので、クローンしてから自動的に実行できるまでMakefileを最適した。
QuestaSimでシミュレーションを開始するまでにやらなければならないのは、
- リポジトリのクローン
- ISSから生成されるデコーダVerilogファイルの生成
- QuestaSimディレクトリの構築
- QuestaSimディレクトリでのコンパイル
- DPI-Cのプロジェクトのコンパイル
となっている。これらをそれぞれ叩いていると忘れてしまうので、一気通貫できるように工夫しよう。
リポジトリのクローン
リポジトリはサブリポジトリをふんだんに利用した構成になっており、一度cloneしただけでは全てのファイルが取得されない。 なので、submodule updateを利用してサブモジュールを全て取得するのだが、
git clone https://github.com/msyksphinz/pulsar-2.git --recursive cd pulsar-2 git checkout pulsar2_core git submodule update --init --recursive
最後のsubmodule update --init --recursiveは、サブリポジトリの初期化と再帰的なクローンを全てやってくれる優れものだ。これを利用すれば、上記のコマンドだけでまずは全てのファイルをcloneしてくることができる。
Verilogファイルを自動生成する
シミュレーションの環境は、./sim/questa_pulsar2_top で実行するのだが、その前に、デコーダと制御回路はissがデコードテーブルから自動生成するものを利用するため、まずはRubyのコマンドを叩いてそれらを実行する必要がある。 Makefileで実行するとき、多段Makeを利用すれば簡単にディレクトリを移動できるが、今のところissのsrcディレクトリに専用のMakefileを作っていないため、ディレクトリを跨いたコマンドの実行をMakefileから実行しないといけない。 rubyのオプションを調べると、実行時のディレクトリを指定できるオプションがあった。
mips_ctrl: ruby -C../../iss/swimmer_riscv/src ./gen_verilog_dec.rb
実際に上記のコマンドを叩いているのは、./sim/questa_pulsar2_top ディレクトリなのだが、上記のrubyのスクリプトはディレクトリを../../iss/swimmer_riscv/srcまで移動して実行したのと同じになる。
QuestaSimディレクトリの構築
Questaの環境構築をするために、vlib, vmapなどのコマンドをMakefileで記述して環境を構築する。そしてコンパイルコマンドも実行するようにしておく。
DPI-Cのプロジェクトのコンパイル
DPI-Cを利用するためのライブラリも同時に構築する。これにより、コンパイルの終了と同時にDPI-Cのライブラリをビルドするディレクトリ(../../iss/swimmer_riscv/build_dpi/)まで移動してビルドをする。
ここまでの仕事をmake一発でできるような環境を構築しておいた。
あとは、make run_coremark を叩けばサンプルとしてcoremarkを実行できる。