デジタル回路の学習でよく出てくる問題の一つが、「特定のビット列を順番に出力する順序回路」です。特に「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
この回路をクロック同期で動作させることで、指定された順序を繰り返し出力できます。
順序回路は状態遷移図→状態表→論理式→回路図の順で整理すると理解しやすくなるため、まずはカウンタ回路として考えるのがおすすめです。


コメント