状態遷移図の書き方
FPGA設計で、ある決まったシーケンスで実行したいときステートマシンを使うが、ステートマシンは状態遷移図で直接的に表せる。
◇
状態遷移図の書き方は次のとおり。
(1) 1つの状態を1つのブロックで書く
UMLでは、ブロック内を横線で区切って、上に状態名、下にその状態で実行する動作を書くことになっているが、動作を書くと図が大きくなって読みにくくなるので、遷移条件に関わる動作に限定した方がよいかもしれない。
(2) 遷移を矢印で書き、矢印の横に遷移条件を書く。条件がない矢印は無条件で(次のクロックに必ず)遷移する。(UMLでは遷移条件を[ ]で書く)
・ 遷移条件が成り立たないときはその状態に留まるが、留まる矢印は冗長なので描かなくてよい。
・ 複数の遷移先がある場合に、遷移条件どうしが同時に成り立ちうるなら優先順も書く。
・ どの状態からも強制的に遷移するような矢印(リセットや異常検出など)は、矢印を全部描くと読みにくくなるので分離した方がよい。
◇◇
状態遷移図の書き方のルール自体は上記のように簡単だが、何を1つの状態として定義するかは難しい。(→ステートの決め方)
例えば、状態S1を1回だけ実行をした後にdone信号が来るまで待つというシーケンスを
と描いてしまうと、doneを待つ間に状態S1を繰り返し実行してしまうことになり不都合で、正しくは次のようにS1の他にウエイトしている状態S2を設けなければならない。