FSM設計
via EDN japan
有限ステートマシン設計には何に注意すればよいのか。
FSM設計の問題点
他の状態に遷移できなくなる。
⇒リセット信号で初期状態に戻れるようにしてください…。
- 最終デッドロック
分岐条件にカウンタなどの複雑な条件を混ぜている場合、起こる可能性が高い。ある程度、遷移を繰り返した際に突如デットロックに陥る。検証で確認するのが困難。
⇒分岐条件は簡潔に。
- デットトランジション&到達不可能な状態
冗長なロジック。
⇒誤動作の原因となりえるので消してください。
- レジスタ値の固定
状態のエンコード処理の誤り等により、状態レジスタが"Hi"or"Low"に固定されてしまう。
⇒エンコード表をしっかり確認。冗長な状態、冗長なレジスタが無い事を確認。
- 非同期入力
深刻。非同期入力の対策を適切に行わないと、想定外な遷移等の様々な問題を引き起こす。
⇒非同期入力を入れない。ハンドシェイクを行う。
状態のエンコーディング方法
状態レジスタのエンコードの仕方によって回路特性は大きく変わります。ワンホット、グレイエンコーディングを行う場合は、後々の保守や拡張の為に明示的にしておいた方が良いでしょう。設計思想で使い分ける必要があると思うけど、特に理由が無ければワンホットが良いかなぁ。(もしくはワンホットでハミング距離が2の物を作るとか)
- ワンホット・エンコーディング
全ての状態において状態レジスタの1bitしか"Hi"にならない。回路規模は大きくなるものの、組み合わせ回路の段数が少なくなるので、タイミング的に有利になる。ただし、状態を表現するのに必要なレジスタは多くなる。
- グレイ・エンコーディング
あらゆる遷移において、遷移元と遷移先の状態の状態レジスタの値が1bitだけ異なる。遷移の際に変化するレジスタが1つだけなので低消費電力設計向け。状態が多くなった時、後からの仕様変更の際に適切なエンコードを探すのが困難になる可能性がある。
- ミニマム・エンコーディング
何も考えずに設計すると、大抵この形になる。少ないレジスタをフルに使用して状態を表現する。
遷移方式
- ミーリ(Mealey)型
一つの状態の中に条件分岐を持ち、複数の出力を切り替える。ロジック段数の増加によりタイミング・パスの問題が大きくなる。
- ムーア(Moore)型
一つの状態の中に条件分岐を持たない。ただし、状態数が増える。ムーア型の方を推奨。
複雑で大きなFSMはタイミングエラーや性能劣化に繋がるだけでなく、検証の複雑化も招きます。少ない状態、かつ簡潔な遷移を考えて。素敵な設計ライフを!
#そもそも論理合成ツールでFSMを最適化してもらえば良いじゃん。なんて声もありますが…。理解はしておきたいですね。