組み合わせ回路を理解する

組み合わせ回路の種類と特徴を一通り理解しておきましょう。このページ以降のユニットでは、ここの内容は既知のものとして扱います。

もふねこ

「組み合わせ回路」って難しそうな名前だけど、要するに『入力が決まれば出力がパッと決まる回路』のことだよ🐾
足し算する回路(加算器)や、信号を選ぶ回路(セレクタ)が代表例!

1. 全加算回路(1ビット加算)

最も基本的な組み合わせ回路のひとつが、1ビット全加算回路(Full Adder)です。

  • 入力: A(1ビット)、B(1ビット)、CIN(下位ビットからの桁上がり)
  • 出力: Q(和)、COUT(上位ビットへの桁上がり)
💡
用語 桁上がりのことを Carry(キャリー) と呼びます。CIN = Carry In(桁上がり入力)、COUT = Carry Out(桁上がり出力)。

全加算回路の真理値表

ABCINCOUTQ計算
000000+0+0 = 0 → 00
001010+0+1 = 1 → 01
010010+1+0 = 1 → 01
011100+1+1 = 2 → 10
100011+0+0 = 1 → 01
101101+0+1 = 2 → 10
110101+1+0 = 2 → 10
111111+1+1 = 3 → 11

論理式の導出

COUTが1になる条件(4行)をORでつなぐ:

COUT = Ā・B・CIN + A・B̄・CIN + A・B・C̄IN + A・B・CIN

Qが1になる条件(4行)をORでつなぐ:

Q = Ā・B̄・CIN + Ā・B・C̄IN + A・B̄・C̄IN + A・B・CIN

2. 論理圧縮

論理圧縮とは、ブール代数の法則を使って論理式をできるだけ簡単な形に書き換え、回路規模を小さくすることです。

COUTの論理圧縮手順

ステップ使用した法則
元の式Ā・B・CIN + A・B̄・CIN + A・B・C̄IN + A・B・CIN
Ā・B・CIN + A・B̄・CIN + A・B・(C̄IN + CIN)分配則
Ā・B・CIN + A・B̄・CIN + A・B補元則(X+X̄=1)
CIN・(Ā・B + A・B̄) + A・B分配則
④(完成)COUT = A・B + CIN・(A⊕B)XOR定義
論理圧縮の効果 圧縮前の4つの積項(AND × 4)が、2つの積項(AND × 2 + XOR × 1)に削減されます。回路規模が小さくなり、遅延も改善されます。

3. 4ビット加算回路(リップルキャリー型)

1ビット全加算回路を4つ並べ、隣の回路のCOUT→CINを接続したものがリップルキャリー型4ビット加算回路です。

  • FA0が最下位ビット(LSB)、FA3が最上位ビット(MSB)
  • 下位ビットの演算が終わらないと上位ビットの演算を開始できない

計算例:2 + 3 = 5

加算器A(2進数)B(2進数)CINCOUTQ
FA0(LSB)01001
FA111010
FA200101
FA3(MSB)00000

結果:COUT=0, Q=0101(2進数)= 5(10進数)✓

リップルキャリー型の遅延

ビット数1ビット加算器遅延合計遅延
4ビット2ns / 段8ns
8ビット2ns / 段16ns
16ビット2ns / 段32ns
⚠️
課題 リップルキャリー型は構造がシンプルですが、ビット数が増えると遅延が線形に増大します。
もふねこ

桁数が増えると遅延しちゃうリップルキャリー型の弱点を克服したのが、次の『ルックアヘッド型』だよ🐾
これは面接や試験でもよく聞かれるから、なんとなく違いを知っておくとカッコいいよ!

4. キャリールックアヘッド型加算回路

遅延の原因であるCOUT生成部分を分離し、下位ビットの入力信号A・Bから直接CINを生成する回路がキャリールックアヘッド型です。

  • 各ビットのCINはキャリー生成回路が並列に計算
  • 上位ビットほどキャリー生成回路の入力が増え、回路規模は大きくなる

4ビット:遅延の比較

加算器キャリー生成遅延加算器遅延合計
FA00ns(CIN=0固定)2.0ns2.0ns
FA10.5ns(3入力)2.0ns2.5ns
FA20.6ns(5入力)2.0ns2.6ns
FA3(MSB)0.7ns(7入力)2.0ns2.7ns

🔵 リップルキャリー型

  • 4ビット最大遅延:8ns
  • 構造がシンプル
  • ビット数増加で遅延が線形増大

🟣 キャリールックアヘッド型

  • 4ビット最大遅延:2.7ns
  • 5.3ns 高速化(4ビットの場合)
  • ビット数が増えても遅延の増加が緩やか

5. セレクタ(マルチプレクサ)

セレクタとは、N本の入力から1本を選択して出力する回路です。マルチプレクサ(MUX)とも呼びます。

2to1セレクタの動作

入力2本(D0・D1)から選択信号SELで1本を選んで出力Qに出す回路です。

SEL出力Q動作
0D0SEL=0のとき、D0がQに出力される
1D1SEL=1のとき、D1がQに出力される

論理式

Q = S̄EL・D0 + SEL・D1

SEL=0のとき S̄EL=1 なので D0 が有効。SEL=1のとき SEL=1 なので D1 が有効。

6. エンコーダとデコーダ

🔵 エンコーダ(符号化回路)

  • 入力データを規則に基づいて変換
  • 出力ビット数 < 入力ビット数
  • 例:キーボード・電卓のキー入力

🟣 デコーダ(復号化回路)

  • 符号化データを元の形式に変換
  • 出力ビット数 > 入力ビット数
  • 例:7セグメントLED表示回路

実例:数字ボタン → 7セグメントLED 表示「5」

① エンコーダ(ボタン入力→4ビット2進数)

「5」のボタンが押される → 内部で4ビット2進数に符号化

押したボタン4ビット2進数出力(上位→下位)10進数
000000
100011
200102
300113
401004
501015
601106
701117
810008
910019

② デコーダ(4ビット2進数→7セグメント出力)

入力 0101(5)を受け取り、7セグメントの各セグメントをON/OFF制御します。

入力abcdefg表示
0101(5)1011011「5」

セグメントb・eが消灯(0)、それ以外が点灯(1)→ 「5」 が表示されます。

7セグメントの構造 7セグメントLEDはa〜gの7本のセグメントで構成されています。入力1でそのセグメントが発光します。
もふねこ

加算器、セレクタ、デコーダ…これらはこれからVerilogを書くときの「レゴブロック」みたいなものだよ🐾
次はいよいよ『順序回路(時間を記憶する回路)』に進もう!

📌 まとめ

  • 全加算回路は A・B・CINの3入力から Q(和)とCOUT(桁上がり)を出力する
  • 論理圧縮とはブール代数の法則を使って論理式を簡略化し、回路規模を小さくすること
  • リップルキャリー型加算回路の遅延は「1ビット加算器遅延 × ビット数」で線形に増大する
  • キャリールックアヘッド型はCINを並列生成することで遅延を大幅に削減できる
  • セレクタ(マルチプレクサ)はN本の入力から1本を選択する回路。別名MUX
  • エンコーダは符号化回路(入力ビット数 > 出力ビット数)
  • デコーダは復号化回路(入力ビット数 < 出力ビット数)
  • 演算回路の実現方法は複数あり、方式によって速度や回路規模が異なる