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

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

FIRRTLの可視化ツールdiagrammerを試してみた

スポンサーリンク

前回のChiselの記事ではiotestersを使って自分のデザインしたChiselのモジュールをテストする方法についてをまとめた

www.tech-diningyo.info

今回は少し前にChiselの公式ツイッターがツイートしていたdiagrammerというChiselから生成されるFIRRTLをグラフにして可視化するツールを試してみた内容を書いてみる。

diagrammerを試してみる

その時のChiselのツイートがこれ↓

diagrammerのgithubは以下↓

github.com

インストール

手順はgithubに記載されているものに従う。

$ git clone https://github.com/freechipsproject/diagrammer
$ cd diagrammer

依存ライブラリ

GraphVizが必要

あと、普通にsbtが動く環境。build.sbtが含まれているので、これをideaでインポートするのが手っ取り早かったので、その方針で試した。

GraphVizインストーラー起動してデフォルトの設定でインストールすればOK

diagrammerの実行

以下のコマンドでsodorのFIRRTLファイルを変換できた。

sbt "runMain dotvisualizer.FirrtlDiagrammer --firrtl-source Top_1stage.fir -t Top_1stage --dot-timeout-seconds 600"

#idea上のsbt shellで実行する場合はダブルクオーテーションの中のrunMain ...を実行すればOK。

  • オプションの説明
  • --firrtl-source : 処理対象のFIRRTLファイルを指定するオプション
  • -t / --target : つけとかないと"style.css"が開けないという例外が発生して失敗した
  • --dot-timeout-deconds : 一つのファイル生成にかける時間。CSRFileモジュールの処理がこのオプション無しだとタイムアウトしたため付与

sodorの1stage版のFIRRTLを変換した結果。

以下は実行時のログ。 ログに記載があるように実行に397秒かかっている。

[info] Running dotvisualizer.FirrtlDiagrammer --firrtl-source Top_1stage.fir -t Top_1stage --dot-timeout-seconds 600
Total FIRRTL Compile Time: 1997.2 ms
creating dot file Top_1stage/Top.dot
print file closed 199 lines printed
creating dot file Top_1stage/DebugModule.dot
print file closed 4181 lines printed
creating dot file Top_1stage/DatPath.dot
print file closed 3799 lines printed
creating dot file Top_1stage/CSRFile.dot
print file closed 15383 lines printed
creating dot file Top_1stage/AsyncScratchPadMemory.dot
print file closed 589 lines printed
creating dot file Top_1stage/CtlPath.dot
print file closed 19678 lines printed
creating dot file Top_1stage/SimDTM.dot
print file closed 35 lines printed
creating dot file Top_1stage/AsyncReadMem.dot
print file closed 41 lines printed
creating dot file Top_1stage/Core.dot
print file closed 187 lines printed
creating dot file Top_1stage/SodorTile.dot
print file closed 258 lines printed
[success] Total time: 397 s, completed 2019/02/24 18:43:36

以下のファイルが生成された。

diningyo@diningyo:~$ ls -l .//Top_1stage
合計 6720
drwxr-xr-x 1 diningyo diningyo       0 2月  18 09:59 ./
drwxr-xr-x 1 diningyo diningyo       0 1月   1  1980 ../
-rw-r--r-- 1 diningyo diningyo    1988 2月  18 10:06 AsyncReadMem.dot
-rw-r--r-- 1 diningyo diningyo    5992 2月  18 10:06 AsyncReadMem.dot.svg
-rw-r--r-- 1 diningyo diningyo   19841 2月  18 10:05 AsyncScratchPadMemory.dot
-rw-r--r-- 1 diningyo diningyo   76059 2月  18 10:05 AsyncScratchPadMemory.dot.svg
-rw-r--r-- 1 diningyo diningyo    9365 2月  18 10:06 Core.dot
-rw-r--r-- 1 diningyo diningyo   34183 2月  18 10:06 Core.dot.svg
-rw-r--r-- 1 diningyo diningyo  413017 2月  18 10:01 CSRFile.dot
-rw-r--r-- 1 diningyo diningyo 2074971 2月  18 10:05 CSRFile.dot.svg
-rw-r--r-- 1 diningyo diningyo  511529 2月  18 10:05 CtlPath.dot
-rw-r--r-- 1 diningyo diningyo 2194225 2月  18 10:06 CtlPath.dot.svg
-rw-r--r-- 1 diningyo diningyo  106468 2月  18 10:01 DatPath.dot
-rw-r--r-- 1 diningyo diningyo  453606 2月  18 10:01 DatPath.dot.svg
-rw-r--r-- 1 diningyo diningyo  117736 2月  18 10:01 DebugModule.dot
-rw-r--r-- 1 diningyo diningyo  533023 2月  18 10:01 DebugModule.dot.svg
-rw-r--r-- 1 diningyo diningyo    1661 2月  18 10:06 SimDTM.dot
-rw-r--r-- 1 diningyo diningyo    5004 2月  18 10:06 SimDTM.dot.svg
-rw-r--r-- 1 diningyo diningyo   12436 2月  18 10:06 SodorTile.dot
-rw-r--r-- 1 diningyo diningyo   41004 2月  18 10:06 SodorTile.dot.svg
-rw-r--r-- 1 diningyo diningyo      87 2月  18 10:01 styles.css
-rw-r--r-- 1 diningyo diningyo    5520 2月  18 10:01 Top.dot
-rw-r--r-- 1 diningyo diningyo   18169 2月  18 10:01 Top.dot.svg
-rw-r--r-- 1 diningyo diningyo    3323 2月  18 10:01 Top_hierarchy.dot
-rw-r--r-- 1 diningyo diningyo   10892 2月  18 10:01 Top_hierarchy.dot.svg

以下がsodorの1stage版のトップレベルのファイル(Top.dot.svg)。このファイルはブラウザで開くと各モジュールの部分がリンクになっていて、クリックするとその対象モジュールのSVGファイルにジャンプできるようになっている。

diagrammerで作ったSodor 1st-stage版のトップ階層図

次の画像はSodor(1stage)のTopモジュールのFIRRTLを変換したもの

Sodor 1st stage のトップブロックの構造

Chiselはハードウェアのジェネレータなので、元のソースコードだけでは実際の構成を把握するのが難しいことがあるが、これはジェネレートした際に生成されるFIRRTLを可視化してくれるツールなので、構造の把握に役に立ちそうな気がした。
あと簡単な回路をChiselで書いてFIRRTLを生成したあとにdiagrammerを使って中身を確認していくことで、FIRRTL自体の勉強にも使えそう。
とりあえず次はRocketChipをこれで見てみようと思う。生成にエライ時間かかりそう&デカすぎて開けるのか??という疑惑もあるけど(SodorのCSRFileとかはやたらでかくて、開いても確認するのが難しいレベル。。)