00→01→10→11を繰り返す順序回路の作り方|状態遷移図から回路図までわかりやすく解説

プログラミング

デジタル回路の学習でよく出てくる問題の一つが、「特定のビット列を順番に出力する順序回路」です。特に「00→01→10→11→00…」のような繰り返しパターンは、フリップフロップや状態遷移を理解する基本問題として頻出です。この記事では、この順番を出力する順序回路について、状態遷移の考え方から回路構成までをわかりやすく整理します。

まずは出力パターンを確認する

今回の出力順序は以下です。

クロック回数 出力
0 00
1 01
2 10
3 11
4 00

つまり、2ビットの値が0→1→2→3→0…と循環している形です。

これは実質的に「2ビットカウンタ」として考えることができます。

状態遷移図で考える

順序回路では、まず状態遷移図を書くと整理しやすくなります。

00 → 01 → 10 → 11↑              ↓└───────←──────┘

各クロックごとに次の状態へ進み、最後にまた00へ戻ります。

この問題は「4状態を順番に循環する回路」と考えると理解しやすくなります。

必要なフリップフロップ数

4状態を表現するには、2ビット必要です。

そのため、通常は以下を使用します。

  • Dフリップフロップ × 2個
  • またはJKフリップフロップ × 2個

初心者向けにはD-FFの方が理解しやすいことが多いです。

Dフリップフロップで考える場合

現在状態をQ1,Q0とすると、次状態は以下になります。

現在状態 次状態
00 01
01 10
10 11
11 00

Dフリップフロップでは、「次状態 = D入力」です。

そのため、次状態表から論理式を求めます。

次状態論理式を求める

状態遷移表から整理すると以下になります。

D0 = NOT Q0D1 = Q1 XOR Q0

つまり、下位ビットは毎回反転し、上位ビットはXORで制御できます。

回路構成イメージ

構成としては以下のようになります。

  • D-FFを2個用意
  • Q0をNOTしてD0へ入力
  • Q1とQ0をXORしてD1へ入力
  • 同じクロックを両方へ接続

これでクロックごとに以下が出力されます。

00 → 01 → 10 → 11 → 00 …

もっと簡単に考える方法

実はこの動きは「2ビットバイナリカウンタ」と同じです。

そのため、市販ICでは以下のようなカウンタICでも実現できます。

  • 74HC93
  • 74LS93
  • 74HC161

FPGAやHDL学習でも、この問題は「カウンタ回路」の基本例として扱われます。

Verilogで書くとこうなる

最近はHDLで学習するケースも増えています。

Verilogでは以下のような非常に短いコードで表現できます。

always @(posedge clk)begin    q <= q + 1;end

2ビット幅にしておけば、自動的に00→01→10→11→00…と循環します。

JKフリップフロップの場合は?

JK-FFでも実現可能です。

ただし、励起表を使ってJ,K入力を求める必要があるため、D-FFより少し複雑になります。

授業や試験では「状態遷移表→励起表→カルノー図」の流れで解く問題として出題されることがあります。

順序回路でよく混乱するポイント

初心者が混乱しやすいポイントとして、以下があります。

  • 現在状態と次状態の違い
  • クロックのタイミング
  • D入力とQ出力の関係
  • 同期式と非同期式の違い

特に「D入力は次状態をそのまま入れる」という考え方を理解すると、D-FF回路はかなり簡単になります。

まとめ

「00→01→10→11→00…」を出力する順序回路は、基本的には2ビットカウンタとして実現できます。

Dフリップフロップを2個使う場合、次状態論理は以下になります。

D0 = NOT Q0D1 = Q1 XOR Q0

この回路をクロック同期で動作させることで、指定された順序を繰り返し出力できます。

順序回路は状態遷移図→状態表→論理式→回路図の順で整理すると理解しやすくなるため、まずはカウンタ回路として考えるのがおすすめです。

コメント

タイトルとURLをコピーしました