前回のChiselの記事ではiotesters
を使って自分のデザインしたChiselのモジュールをテストする方法についてをまとめた
今回は少し前にChiselの公式ツイッターがツイートしていたdiagrammerというChiselから生成されるFIRRTLをグラフにして可視化するツールを試してみた内容を書いてみる。
diagrammerを試してみる
その時のChiselのツイートがこれ↓
Have you seen FIRRTL's new Diagrammer (https://t.co/bzlHLyQS9j)? This lets you visualize your FIRRTL (or Chisel-generated circuits) as Graphviz or interactive SVG. And... Diagrammer is also being published to Maven! So, you can use it directly in your sbt projects. 🚀 pic.twitter.com/JVHney3Jc9
— Chisel (@chisel_lang) 2019年2月14日
diagrammerのgithubは以下↓
インストール
手順は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を変換したもの
Chiselはハードウェアのジェネレータなので、元のソースコードだけでは実際の構成を把握するのが難しいことがあるが、これはジェネレートした際に生成されるFIRRTLを可視化してくれるツールなので、構造の把握に役に立ちそうな気がした。
あと簡単な回路をChiselで書いてFIRRTLを生成したあとにdiagrammerを使って中身を確認していくことで、FIRRTL自体の勉強にも使えそう。
とりあえず次はRocketChipをこれで見てみようと思う。生成にエライ時間かかりそう&デカすぎて開けるのか??という疑惑もあるけど(SodorのCSRFileとかはやたらでかくて、開いても確認するのが難しいレベル。。)