状態遷移図ツール

順序回路(状態機械)の状態遷移表を入力すると、状態遷移図を描き、入力の列に対して状態と出力がどう移り変わるかをたどります。「1が2回続いたら1を出す」「101を見つける」「2進数を3で割った余り」などの例から始めて、表を書き換えながら動きを確かめられます。同じ働きをする状態を見つけてまとめる、状態の最小化も表示します。

状態遷移表

状態遷移図と動き

状態の最小化

最初の行の状態から始めます。ムーア型では、各時刻の出力として、入力を読んで移った先の状態の出力を表示します。図の赤い矢印は、選んだ時刻の遷移です。

状態遷移図と状態遷移表

フリップフロップを含む順序回路は、過去の入力を「状態」として覚え、今の状態と入力から次の状態と出力を決めます。この動きを、状態を丸、遷移を矢印で描いたものが状態遷移図、表にしたものが状態遷移表です。たとえば「1が2回続いたら1を出す」回路では、直前に続いた1の数(0回・1回・2回以上)を3つの状態で覚えます。0が来れば最初の状態に戻り、1が来れば1つ先の状態に進みます。例を選んで時刻のつまみを動かすと、入力ごとにどの矢印をたどるかを確かめられます。

ムーア型とミーリ型

出力が今の状態だけで決まるものをムーア型、状態と入力の両方で決まるものをミーリ型といいます。ムーア型では出力を状態の丸の中に、ミーリ型では矢印に「入力/出力」の形で書きます。ミーリ型は入力が変わるとすぐに出力が変わり、同じ働きを少ない状態で作れることが多い一方、入力のノイズや変化がそのまま出力に出ます。ムーア型は出力がクロックに合わせて変わるので扱いやすく、1クロック遅れる代わりに安全です。「101を見つける」例はミーリ型では3状態ですが、ムーア型にすると「101を見つけた」状態が1つ増えて4状態になります。

状態の最小化

同じ入力の列に対して必ず同じ出力の列を出す2つの状態は、区別する必要がないので1つにまとめられます(等価な状態)。見つけ方は、まず出力が同じ状態どうしを同じ組に入れ、次に「入力0と入力1の行き先が同じ組に入っているか」で組を細かく分け、分け方が変わらなくなるまで繰り返します。最初の状態からたどり着けない状態も取り除けます。状態が減ると、状態を覚えるフリップフロップの数や次の状態を作る論理回路が小さくなります。「無駄な状態を含む表」の例では、6状態が3状態になります。

回路にするには: 状態の割り当て

状態遷移表を実際の回路にするには、各状態に2進数の符号を割り当てます(状態割り当て)。状態が k 個なら、フリップフロップは log₂ k を切り上げた個数あれば足ります。3状態なら2個です。次に、今の状態のビットと入力から、次の状態のビットと出力を求める真理値表を作り、カルノー図などで簡単にしてフリップフロップの入力につなぎます。状態ごとに1個のフリップフロップを使うワンホット符号は、フリップフロップは増えますが次の状態の論理が簡単になり、FPGAでよく使われます。

論理回路の問題を解く

順序回路の説明として正しいものはどれか。

  1. A出力が、現在の入力と、記憶している内部状態によって決まる
  2. B出力が現在の入力だけで決まる
  3. Cアナログ信号だけを扱う
答えと解説を見る

正解:A. 出力が、現在の入力と、記憶している内部状態によって決まる

順序回路は、フリップフロップなどの記憶素子をもち、出力が現在の入力だけでなく過去の入力の履歴(内部状態)にも依存する回路です。カウンタ、レジスタ、ステートマシンが代表例で、自動販売機の投入金額の管理などをモデル化できます。出力が現在の入力だけで決まる回路は組み合わせ回路(加算器、デコーダなど)で、実際のデジタル回路はこの2つをクロックで交互につないだ構造です。

出力が現在の状態だけで決まる順序回路(ステートマシン)の型はどれか。

  1. Aミーリ型
  2. Bムーア型
  3. Cハーバード型
答えと解説を見る

正解:B. ムーア型

ムーア型では出力が現在の状態だけで決まり、ミーリ型では状態と入力の両方で決まります。ムーア型は出力がクロックのエッジの後にしか変わらず、入力の変化やグリッチが出力に直接伝わらないので安定し、タイミングも予測しやすい反面、入力への反応が1クロック遅れ、状態数が増えがちです。ミーリ型は状態数を減らせて入力に即座に反応できますが、入力の変化が出力に直接伝わります。実際の設計では両者を組み合わせて使います。

HDLで書く状態機械(ステートマシン)の基本的な構成として正しいものはどれか。

  1. A状態を覚えるメモリだけで、論理回路は使わない
  2. B出力を決める回路だけで、状態は覚えない
  3. C今の状態を覚えるレジスタ、次の状態を決める組み合わせ回路、出力を決める組み合わせ回路
答えと解説を見る

正解:C. 今の状態を覚えるレジスタ、次の状態を決める組み合わせ回路、出力を決める組み合わせ回路

状態機械は、今の状態をフリップフロップのレジスタに覚えておき、今の状態と入力から次の状態を組み合わせ回路で決め、クロックのエッジで状態を更新します。出力は今の状態(と入力)から組み合わせ回路で決めます。通信の手順の制御や、自動販売機、信号機の制御など、手順に従って動く回路の多くは状態機械として書かれます。

3つの状態を持つ状態機械で、状態を覚えるのに必要なフリップフロップの数の組み合わせとして正しいものはどれか(バイナリ符号化/ワンホット符号化)。

  1. A3個/2個
  2. B2個/3個
  3. C1個/3個
答えと解説を見る

正解:B. 2個/3個

バイナリ符号化では、状態を2進数の番号で表すので、3つの状態には00、01、10の2ビット(フリップフロップ2個)で足ります。ワンホット符号化では、状態ごとに1つのフリップフロップを使うので3個です。バイナリでは使わない11の符号が残るので、雑音などでそこに入ったときに正しい状態に戻れるよう、defaultで行き先を決めておくと安全です。

n個のフリップフロップで構成したジョンソンカウンタ(ツイストリングカウンタ)がとる状態の数はいくつか。

  1. An
  2. B2n
  3. C2ⁿ
答えと解説を見る

正解:B. 2n

ジョンソンカウンタは、シフトレジスタの最後の出力を反転して先頭に戻す構成で、n個のフリップフロップで2n個の状態を順にとります(3個なら000→100→110→111→011→001)。隣り合う状態で1ビットしか変わらないため、2入力ゲートだけで各状態をデコードでき、グリッチも起きにくい特徴があります。位相が少しずつずれた複数のクロックを作る用途にも使われます。

よくある質問

ムーア型とミーリ型は、どちらを使えばよいですか?

出力をクロックに同期させて安定させたいならムーア型、状態の数を減らしたい、入力にすぐ反応したいならミーリ型が向いています。試験では、与えられた図がどちらの型かを、出力が丸の中に書かれているか矢印に書かれているかで見分けます。

時刻 0 の出力はどうなりますか?

ムーア型では、入力を1つも読んでいない時刻 0 でも、最初の状態の出力が出ています。このツールの「出力の列」には、入力を読んだ後の出力だけを並べています。ミーリ型の出力は入力があって初めて決まるので、時刻 0 の出力はありません。

状態の数はいくつまで入力できますか?

8個までです。入力は0と1の2種類です。状態の名前は6文字まで自由に付けられ、行き先の選択肢にも反映されます。

試験ではどのように問われますか?

基本情報技術者試験や応用情報技術者試験では、状態遷移図や状態遷移表を読み、ある入力の列を与えたときの最後の状態や出力を答える問題がよく出ます。表を入力して時刻を1つずつ進めると、自分のたどり方を確かめられます。

関連する用語

順序回路 フリップフロップ

関連する計算ツール

半導体・電子回路・情報の計算ツール →