FPGA開発日記

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

環境構築からシミュレーションまでを自動化する

現在のPulsar-2プロジェクトは、リポジトリをcloneしてから実行するまでがいろいろコマンドを叩かなくてはならなくて大変なので、クローンしてから自動的に実行できるまでMakefileを最適した。

QuestaSimでシミュレーションを開始するまでにやらなければならないのは、

  1. リポジトリのクローン
  2. ISSから生成されるデコーダVerilogファイルの生成
  3. QuestaSimディレクトリの構築
  4. QuestaSimディレクトリでのコンパイル
  5. 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一発でできるような環境を構築しておいた。

github.com

あとは、make run_coremark を叩けばサンプルとしてcoremarkを実行できる。