FSMの記述方法(ワンホット)
以前はバイナリでの記述方法を紹介しましたが、今回はワンホットでの記述方法を紹介します。
変わる
- parameter宣言
- ステート数(FF数)
- 順序回路部のalways文でのリセットでのステートの初期値
- 組み合わせ回路で始めにallゼロでのマスク
- case文の条件は1'b1
- stateの1bitがステート名になる
バイナリコードではcase文は現在のステートの状態によって分けていましたが、ワンホットではどれかのビットはかならず1'b1なので、これをcase文の条件に入れます。
持っているFFでのバイナリで数えた場合、他にも状態があるので論理合成ツールに記述してあるのがすべての場合だと知らせてあげなければいけません。そうしなければラッチが形成されてしまいます。
コメント文により論理合成ツールに伝えるのですが、これはツール依存なので他の方法があればいいのですが、今はこの書き方しか知りません。バイナリコードでのFSM記述方法のように不定xで初期値代入すると論理合成ツールでdon't care扱いにしてくれればいいのですが。