FC2カウンター FPGAの部屋 Graphvizでステートマシンの図を書いてみた
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Graphvizでステートマシンの図を書いてみた

ブログをFPGAキーワードで検索していたら、Graphvizで仕事用の図を書いているというブログを見つけた。(すみません。どなたのブログかわからなくてしまいました)
Graphvizってもしかして、doxygenをインストールしたとき入れたソフトだなと思い、調べてみると、いろいろな図を書けるということが分かった。(バージョンは2.22です)
そのブログに書いてあったGraphviz チュートリアルのページに詳しく書いてある。ダウンロードはGraphviz本家から。
Graphviz チュートリアルのページによると、テキストファイルで図を各コマンドを書いていけば自動的に図にしてくれるとのこと。
.dotファイルを作って、コマンドプロンプトの窓の中でサンプルを作り、dotコマンドを使って、やってみたがPATHが通っていない。。。
WindowsのスタートからGraphviz 2.22のフォルダを見てみると、Dotty.exeとGVedit.exeがある。
まずはDotty.exeを立ち上げてみる。Dotty.exeを起動すると真っ白な何もない画面が出る。
Dotty_1_090520.png

左クリックすると楕円が表示されるがどうやって図を書くのかよくわからない。右クリックをするとメニューが表示される。
Dotty_2_090520.png

右クリックメニューのコマンドでalf.gvを選んで表示したのがこれ。
Dotty_3_090520.png

こんな風に書ければ良いが、とりあえずやり方が良く分からない(マニュアルはあるのだが、読むのが面倒だし、マウスの真ん中(ホイールクリック)ボタンがうまくいかない)。(ホイールクリックはマウスのせいみたいです。マウスを変えたら線は書けたのですが、楕円の中にステートを書く方法が分かりません)

次にはGVedit.exeを使ってみることにした。
GVeditは、FileメニューからNewを選んで開いた、Graphviz Layoutにコマンドを書いて、GraphvizメニューからRunするとステート図にしてくれる。こんな感じ。
Dotty_5_090520.png

ステート図にするには、Graphvizメニューからsettingsを選んで設定する。
Dotty_4_090520.png

Layout Engine はdotにしたほうが良いようだ。私はPNGファイルを出力するようにしている。

さっそく、Graphviz チュートリアルのページを参考に、今作っているDDR2 SDRAMのコマンドを出力するステートマシンを書いてみたが、条件が多すぎて、あまりうまく書けない。条件を単純化して書いてみたソースがこれ。

digraph ddr2_cmd {
    graph [ranksep = 3, nodesep = 1.0, rankdir = LR];
    NOP -> PALL [label = "pall1_init"];
    NOP -> PALL [label = "pall2_init"];
    NOP -> PALL [label = "refresh and actived banks"];
    NOP -> PALL [label = "not equal_active_bank"];
    NOP -> EMRS [label = "emr2s_init"];
    NOP -> EMRS [label = "emr3s_init"];
    NOP -> EMRS [label = "emrs_dllena_init"];
    NOP -> EMRS [label = "emrs_ocd_def_init"];
    NOP -> EMRS [label = "emrs_ocd_exit_init"];
    NOP -> MRS [label = "mrs_dllrst_init"];
    NOP -> MRS [label = "mrs_init"];
    NOP -> REF [label = "ref1_init"];
    NOP -> REF [label = "ref2_init"];
    NOP -> REF [label = "refresh and not active banks"];
    NOP -> ACT [label = "not addr_fifo_empty and not active_bank"];
    NOP -> READ [label = "read_writex='1' and equal_active_bank"];
    NOP -> WRIT [label =  "read_writex='0' and equal_active_bank"];;
    NOP -> NOP;
    PALL -> NOP;
    EMRS -> NOP;
    MRS -> NOP;
    REF -> NOP;
    ACT -> NOP;
    READ -> NOP;
    WRIT -> NOP;
}


これをGraphzivで図にするとこうなった。
ddr2_cmd_090520.png

Graphzivはいろいろな図を書けそうなので、もっと勉強してみたい。VHDLやVerilog-HDLのステートマシン記述から自動的にGraphzivのフォーマットに直してくれるパーサ?があればいいんだけど。。。

2009/06/03 : 追記
Graphzivの記事をどなたのブログで見たかがわかりました。”日曜プログラマがダラダラ書く”さんの”2009-04-06”でした。
  1. 2009年05月21日 04:29 |
  2. EDAツールについて
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/1116-8ea83aaf
この記事にトラックバックする(FC2ブログユーザー)