水曜日, 8月 08, 2007

ステートマシン その3

前回、とりあえずの状態遷移図を描いてみました。

この状態遷移図では、仕様の中の次の機能が表されていません。

・ドアが完全に開いた状態で、5秒間"閉"ボタンが押されなければドアを閉じる

どうやって実現しますか?
多分、カウンタを用意する必要がありますね。

あと、仕様に明記されていることではありませんが

・ドアが開いている最中に"閉"ボタンを押した場合

及び

・ドアが閉まっている最中に"開"ボタンを押した場合

も考えておいた方が良さそうです。
そういうシチュエーションはよくありますよね。

隠れた仕様というものは設計を進めるうちに意外に出てくるものです。
いきなりコーディングをはじめるとそういったものにかき回されて、いつの間にかスパゲッティにということになりかねません。

特にHDLはソフトのプログラミング言語と違って必ずしも上から下へ流れていくわけではないので、ある程度静的な構造が見えていないと全体が把握しづらくなります。

それでは、仕様を満足する状態遷移図を見てみましょう。



ドア状態カウンタは外部に置いても良いと思いますが、今回は同じモジュールの中に置くことにします。

ではこの状態遷移図をコーディングの1歩手前まで持っていこうと思います。
とはいってもやることは単純で、日本語のままだと変数名として使えないのでそれっぽい英語に変換して、代入や条件判断を記号に変えるだけです。

次のようになります。



ここまでくれば、ほぼそのままコーディングに持っていけるはずです。

それでは次回、これを元にVerilogでステートマシンをコーディングしてみたいと思います。

0 件のコメント: