ステートマシン①
ミーリタイプとムーアタイプ
順序回路の分類。これは今まで全く意識したことがなかった。
タイプ | 次の状態 |
---|---|
ミーリタイプ | 保持している状態と、その時点での入力信号によって決定される |
ムーアタイプ | 保持している状態のみによって決定される |
と言われてもわかったようなわからないような。教科書の例をそのままやってみる。
可変長符号デコーダの例
仕様
可変長符号化されたA~Gのデータをシリアルに(1bitずつ)、MSBファーストでクロック同期で受信して、デコードする回路を考える。符号化方法は、
文字 | 符号 |
---|---|
A | 00 |
B | 01 |
C | 100 |
D | 101 |
E | 110 |
F | 1110 |
G | 1111 |
エンコーディングに関して、絵もかいておこう。
ステートマシンの比較
ミーリタイプとムーアタイプそれぞれの状態遷移図を以下に示す。基本的な構造は同じだが、ムーアタイプでは文字を検出した状態(A~G)が加わっている。
タイミングチャートを書くとこんな感じか。
例えばa(dataが"0"→"0")を受け取った場合、
- ミーリタイプではS0状態でのdata="0"を観測した瞬間に出力信号aをアサート
- ムーアタイプではS0状態でのdata="0"を観測したら、次のクロックエッジで出力信号aをアサート&状態を"A"にする
という動作の違いがある。aがアサートされるタイミングがムーアタイプのほうが1cycle遅いことがわかる。また、aのアサート期間もクロックエッジ後にランダムロジックの遅延が入るか否かの違いによって、ムーアタイプのほうが安定期間が長くなる(図中で(5)とか(6)はマスの数。あくまでイメージ)。
次にe(dataが"1"→"1"→"0")の場合。aと違うのは、最後のdataが1→0に変化する点で、最後data="0"を受け取ったときに、
- ミーリタイプではS4状態でのdata値によって、eをアサートしてS0に戻る or S5に遷移するの2種類がありえる。dataが"1"→"0"の変化に伴ってdataが安定するまでに時間がかかる。この遅延によって、aのアサート開始タイミングがaよりも遅くなる。最後の2bitが異なる場合、同じことが起こるので、a,c,gとb,d,e,fでは信号のアサート期間に差が発生する
- ムーアタイプではS4状態でのdata="0"を観測したら、次のクロックエッジで出力信号eをアサート&状態を"E"にする。そのため、受信した文字によってアサート期間がばらつくことはない
という違いが起こる。ミーリタイプにおける、出力信号のアサート期間の違いは教科書にあっさりとした説明しかなくて理解するのに苦戦した。絵を書いたら分かった。
続いて、実際のVerilog記述を確認する。