さて、今回は現在のRTLデザインにおいては欠かせないステートマシン(FSM)について書いてみようと思います。
正式には"Finite State Machine"で日本語では「有限状態機械」などと訳すのでしょうが、現場のエンジニアには単に「ステートマシン」と呼んだほうがとおりが良いと思います。
ディジタル回路でステートマシンというと、
ムーア型だのミーリ型だの
はたまた
グレイ、ジョンソン、ワンホット
だのといったキーワードが出てくると思いますが、個人的にはそういったキーワードは教科書で一度読んでおけばいいかなぁ程度に思っています。
ムーアかミーリかと悩むよりは入力を全て単一のクロックに同期させたほうが良いし、出力のハザードを考慮してステートの遷移の際のハミング距離を1に抑える努力をするよりは出力にレジスタを付けて出したほうがずっと楽な場合が多いと思うからです。
正直、ステートの宣言などは列挙型で行なって合成ツールで勝手に最適化してくれる方が自分は好きです。
最も、最近の合成ツールは勝手にやってたりするので手動で苦労してステートをエンコードしても無駄になっているかもしれませんが。。。
まあ、どうしてもパフォーマンスが達成できない場合にはそのあたりをいろいろチューニングする破目になるのかもしれませんが、生産性・検証のことを考えるとできるだけ実装に近い部分を考慮しないですむほうが良いでしょう。
では次回、具体的に(簡単な)ステートマシンの設計をやってみたいと思います。
0 件のコメント:
コメントを投稿