順序回路の説明として正しいものはどれか。
- A出力が、現在の入力と、記憶している内部状態によって決まる
- B出力が現在の入力だけで決まる
- Cアナログ信号だけを扱う
順序回路(状態機械)の状態遷移表を入力すると、状態遷移図を描き、入力の列に対して状態と出力がどう移り変わるかをたどります。「1が2回続いたら1を出す」「101を見つける」「2進数を3で割った余り」などの例から始めて、表を書き換えながら動きを確かめられます。同じ働きをする状態を見つけてまとめる、状態の最小化も表示します。
お気に入りと最近使ったツールは、このブラウザ内(localStorage)にのみ保存されます。
最初の行の状態から始めます。ムーア型では、各時刻の出力として、入力を読んで移った先の状態の出力を表示します。図の赤い矢印は、選んだ時刻の遷移です。
ほかの入力は今の値のまま、選んだ入力だけを今の値の1/4〜4倍の範囲で変えたときの結果です。赤い点が今の値です。
フリップフロップを含む順序回路は、過去の入力を「状態」として覚え、今の状態と入力から次の状態と出力を決めます。この動きを、状態を丸、遷移を矢印で描いたものが状態遷移図、表にしたものが状態遷移表です。たとえば「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つも読んでいない時刻 0 でも、最初の状態の出力が出ています。このツールの「出力の列」には、入力を読んだ後の出力だけを並べています。ミーリ型の出力は入力があって初めて決まるので、時刻 0 の出力はありません。
8個までです。入力は0と1の2種類です。状態の名前は6文字まで自由に付けられ、行き先の選択肢にも反映されます。
基本情報技術者試験や応用情報技術者試験では、状態遷移図や状態遷移表を読み、ある入力の列を与えたときの最後の状態や出力を答える問題がよく出ます。表を入力して時刻を1つずつ進めると、自分のたどり方を確かめられます。