ハードウェアの気になるあれこれ

技術的に興味のあることを調べて書いてくブログ。主にハードウェアがネタ。

IntelliJ IDEA上でRocket Chipのエミュレータをビルドする

スポンサーリンク

前回に引き続きRocket Chipについて。
通常の手順だとソース追いづらいので、InteliJ IDAE上に環境を構築してデバッガ使ってトレースをするための環境を整えていきます。

Rocket Chipの環境をIntelliJ IDEA上で動かす

環境自体は、前回で既に構築したものをそのまま使います。
そのため、そちらの環境ができていない方でこの記事の内容を試したい場合は、Rocket Chipのgithubリポジトリを見て環境を構築するか、前回の記事をご覧ください。

プロジェクトの作成

Rocket Chipの環境にはbuild.sbtが含まれているので、コレをimportしてプロジェクトを作ればOK。なのでIntelliJ IDEAを開いたらまずは"Import Project"を選択。

下記の画像の様に開いた画面でRocket Chipのgit環境に含まれている"build.sbt"を選択。

f:id:diningyo-kpuku-jougeki:20190702225632p:plain

プロジェクトの設定画面で"Global sbt settings"を展開して、その中の"Launcher"で"Bundled"が選択されていることを確認して、問題なければOKを押す。
#これを確認したのは一回だけRocket Chip同梱のものを使ったら、他のプロジェクトでもそれが参照されてしまいハマったから。。。

f:id:diningyo-kpuku-jougeki:20190702225648p:plain

ということで、これでIntelliJ IDEAでRocket Chipの環境の構築は完了です。
sbt shellを開いて眺めていると、そのうち必要なパッケージの取得が終わり通常通りsbtコマンドが実行可能になります。

f:id:diningyo-kpuku-jougeki:20190702225749p:plain

エミュレータのビルド

いや、コレだけかよ!!と言われる気がするのでIntelliJ IDEA上のsbt shellからエミュレータをビルドする方法を。。。

コマンドラインから"make"を実行したログを確認した方はお気づきかと思いますがMakefileの中でsbtを使ったビルドが実行されています。
なので、このコマンドをそのままIntelliJ IDEA上のsbt shellで実行すれば、同じ様にビルドが可能です。

$ cd emulator
$ make

前回実行した上記の"make"だけでビルドを実行した場合はRocket Chipで用意されているDefaultConfigを使ったエミュレータが生成されるようになっていて、その時のsbtのコマンドは以下のものになります。
なお、この時に1点だけ注意が必要で、ビルド中に生成される中間データが出力されるディレクトリはMakefile上のコマンドで生成される関係で、そのディレクトリが存在していないとエラーが発生してエミュレータの生成に失敗します。
なので、出力先のディレクトリは予め作っておいてください。
以下のDefaultConfigを使用する例だと、

  • ./emulator/generated-src

が中間データの出力先になります。

runMain freechips.rocketchip.system.Generator ./emulator/generated-src freechips.rocketchip.system TestHarness freechips.rocketchip.system DefaultConfig

runMain実行時のsbt shellの画面はこんな↓感じ。

f:id:diningyo-kpuku-jougeki:20190702225837p:plain

上記を実行すると、以下の画像の様に処理が成功しInrelliJ IDEA上のsbt shellでもエミュレータが生成されます。

f:id:diningyo-kpuku-jougeki:20190702225848p:plain

上記のrunMainコマンドの各種引数は以下のようになっています。

runMain freechips.rocketchip.system.Generator <TargetDir> <TopModuleProjectName> <TopModuleName> <ConfigProjectName> <ConfigNameString>

この指定さえ知っておけば他のコンフィグもsbt shell上から実行可能なので、興味があれば試してみてください。