組み合わせ回路を理解する
組み合わせ回路の種類と特徴を一通り理解しておきましょう。このページ以降のユニットでは、ここの内容は既知のものとして扱います。
「組み合わせ回路」って難しそうな名前だけど、要するに『入力が決まれば出力がパッと決まる回路』のことだよ🐾
足し算する回路(加算器)や、信号を選ぶ回路(セレクタ)が代表例!
1. 全加算回路(1ビット加算)
最も基本的な組み合わせ回路のひとつが、1ビット全加算回路(Full Adder)です。
- 入力: A(1ビット)、B(1ビット)、CIN(下位ビットからの桁上がり)
- 出力: Q(和)、COUT(上位ビットへの桁上がり)
全加算回路の真理値表
| A | B | CIN | COUT | Q | 計算 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0+0+0 = 0 → 00 |
| 0 | 0 | 1 | 0 | 1 | 0+0+1 = 1 → 01 |
| 0 | 1 | 0 | 0 | 1 | 0+1+0 = 1 → 01 |
| 0 | 1 | 1 | 1 | 0 | 0+1+1 = 2 → 10 |
| 1 | 0 | 0 | 0 | 1 | 1+0+0 = 1 → 01 |
| 1 | 0 | 1 | 1 | 0 | 1+0+1 = 2 → 10 |
| 1 | 1 | 0 | 1 | 0 | 1+1+0 = 2 → 10 |
| 1 | 1 | 1 | 1 | 1 | 1+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定義 |
3. 4ビット加算回路(リップルキャリー型)
1ビット全加算回路を4つ並べ、隣の回路のCOUT→CINを接続したものがリップルキャリー型4ビット加算回路です。
- FA0が最下位ビット(LSB)、FA3が最上位ビット(MSB)
- 下位ビットの演算が終わらないと上位ビットの演算を開始できない
計算例:2 + 3 = 5
| 加算器 | A(2進数) | B(2進数) | CIN | COUT | Q |
|---|---|---|---|---|---|
| FA0(LSB) | 0 | 1 | 0 | 0 | 1 |
| FA1 | 1 | 1 | 0 | 1 | 0 |
| FA2 | 0 | 0 | 1 | 0 | 1 |
| FA3(MSB) | 0 | 0 | 0 | 0 | 0 |
結果:COUT=0, Q=0101(2進数)= 5(10進数)✓
リップルキャリー型の遅延
| ビット数 | 1ビット加算器遅延 | 合計遅延 |
|---|---|---|
| 4ビット | 2ns / 段 | 8ns |
| 8ビット | 2ns / 段 | 16ns |
| 16ビット | 2ns / 段 | 32ns |
桁数が増えると遅延しちゃうリップルキャリー型の弱点を克服したのが、次の『ルックアヘッド型』だよ🐾
これは面接や試験でもよく聞かれるから、なんとなく違いを知っておくとカッコいいよ!
4. キャリールックアヘッド型加算回路
遅延の原因であるCOUT生成部分を分離し、下位ビットの入力信号A・Bから直接CINを生成する回路がキャリールックアヘッド型です。
- 各ビットのCINはキャリー生成回路が並列に計算
- 上位ビットほどキャリー生成回路の入力が増え、回路規模は大きくなる
4ビット:遅延の比較
| 加算器 | キャリー生成遅延 | 加算器遅延 | 合計 |
|---|---|---|---|
| FA0 | 0ns(CIN=0固定) | 2.0ns | 2.0ns |
| FA1 | 0.5ns(3入力) | 2.0ns | 2.5ns |
| FA2 | 0.6ns(5入力) | 2.0ns | 2.6ns |
| FA3(MSB) | 0.7ns(7入力) | 2.0ns | 2.7ns |
🔵 リップルキャリー型
- 4ビット最大遅延:8ns
- 構造がシンプル
- ビット数増加で遅延が線形増大
🟣 キャリールックアヘッド型
- 4ビット最大遅延:2.7ns
- 5.3ns 高速化(4ビットの場合)
- ビット数が増えても遅延の増加が緩やか
5. セレクタ(マルチプレクサ)
セレクタとは、N本の入力から1本を選択して出力する回路です。マルチプレクサ(MUX)とも呼びます。
2to1セレクタの動作
入力2本(D0・D1)から選択信号SELで1本を選んで出力Qに出す回路です。
| SEL | 出力Q | 動作 |
|---|---|---|
| 0 | D0 | SEL=0のとき、D0がQに出力される |
| 1 | D1 | SEL=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進数 |
|---|---|---|
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 2 | 0010 | 2 |
| 3 | 0011 | 3 |
| 4 | 0100 | 4 |
| 5 | 0101 | 5 |
| 6 | 0110 | 6 |
| 7 | 0111 | 7 |
| 8 | 1000 | 8 |
| 9 | 1001 | 9 |
② デコーダ(4ビット2進数→7セグメント出力)
入力 0101(5)を受け取り、7セグメントの各セグメントをON/OFF制御します。
| 入力 | a | b | c | d | e | f | g | 表示 |
|---|---|---|---|---|---|---|---|---|
| 0101(5) | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 「5」 |
セグメントb・eが消灯(0)、それ以外が点灯(1)→ 「5」 が表示されます。
加算器、セレクタ、デコーダ…これらはこれからVerilogを書くときの「レゴブロック」みたいなものだよ🐾
次はいよいよ『順序回路(時間を記憶する回路)』に進もう!
📌 まとめ
- 全加算回路は A・B・CINの3入力から Q(和)とCOUT(桁上がり)を出力する
- 論理圧縮とはブール代数の法則を使って論理式を簡略化し、回路規模を小さくすること
- リップルキャリー型加算回路の遅延は「1ビット加算器遅延 × ビット数」で線形に増大する
- キャリールックアヘッド型はCINを並列生成することで遅延を大幅に削減できる
- セレクタ(マルチプレクサ)はN本の入力から1本を選択する回路。別名MUX
- エンコーダは符号化回路(入力ビット数 > 出力ビット数)
- デコーダは復号化回路(入力ビット数 < 出力ビット数)
- 演算回路の実現方法は複数あり、方式によって速度や回路規模が異なる
