複数の入力信号のうちどれが有効かを、より少ないビットの符号に変換する回路。
エンコーダ(符号化回路)とは、複数の入力信号のうちどれが有効かを、より少ないビットの符号に変換する回路です。たとえば4本の入力線のうち1本が有効になると、その線の番号を2ビットの2進数で出力します。
身近な例で考えると、エレベーターの行き先ボタンに似ています。何階のボタンが押されたか(多くのボタンのうち1つ)を、「3階」という短い番号にまとめて伝えるイメージです。多くの線の情報を、コンパクトな番号に圧縮します。
上のツールで▶ボタンを押すと、4本の入力のうち1本が有効になり、その番号が2ビットの符号として確定するまでの流れを確認できます。
エンコーダは入力と出力の対応をあらかじめ決めた真理値表のとおりに動きます。真理値表(=入力と出力の全パターンを書き出した表)の各行が、1つの入力が有効なときの出力を表します。
4入力エンコーダの動きは次のとおりです。
・① 入力を見る:D0〜D3 のうちどれが1(有効)かを調べる
・② 行を探す:真理値表でその入力に対応する行を見つける
・③ 符号を出す:その行の2ビット(上位 Y1・下位 Y0)を出力する
具体的には、入力番号を2進数にした値がそのまま出力になります。
・D0 が有効 → 00
・D1 が有効 → 01
・D2 が有効 → 10
・D3 が有効 → 11
入力が n 本あれば、それを番号で区別するのに必要なビット数は log2(n) 本です。4本なら2ビット、8本なら3ビットで足ります。上のツールの真理値表で、各入力に対応する2ビットの符号を確認できます。
エンコーダとデコーダ(解読回路)は、ちょうど逆向きの働きをします。エンコーダが「多くの入力線→少ないビットの符号」なら、デコーダは「少ないビットの符号→1本の出力線」です。
| 項目 | エンコーダ | デコーダ |
|---|---|---|
| 入力 | 多くの線(例: 4本) | 少ないビット(例: 2本) |
| 出力 | 少ないビット(例: 2本) | 多くの線のうち1本 |
| 役割 | 番号にまとめる(圧縮) | 番号から1本を選ぶ(展開) |
この2つはセットで使われることがよくあります。たとえば多くの信号を符号にまとめて(エンコーダ)少ない配線で送り、受け取った側で元の信号に戻す(デコーダ)、という使い方です。エンコーダで圧縮した情報を、デコーダで元どおりに展開する関係だと考えると分かりやすいです。
エンコーダは抽象的な「真理値表通りに動く回路」ではなく、実際はOR ゲートを組み合わせた論理回路として作られています。4-to-2 エンコーダなら、たった2 個の OR ゲートで実現できます。
論理式の作り方。出力の各ビットが「1 になる入力」を真理値表から拾い出し、それらを OR で結ぶだけです。
・Y1(上位ビット)=D2 のとき 1、D3 のとき 1 → Y1 = D2 OR D3
・Y0(下位ビット)=D1 のとき 1、D3 のとき 1 → Y0 = D1 OR D3
動作の確認
・D2 が 1 のとき:Y1 = 1, Y0 = 0 → 符号 10(=2) ✓
・D3 が 1 のとき:Y1 = 1, Y0 = 1 → 符号 11(=3) ✓
・D1 が 1 のとき:Y1 = 0, Y0 = 1 → 符号 01(=1) ✓
・D0 が 1 のとき:Y1 = 0, Y0 = 0 → 符号 00(=0) ✓
身近な例で言うと、「赤組(D2 か D3)に手を挙げた人がいたら、上位ビットを点灯」「奇数組(D1 か D3)に手を挙げた人がいたら、下位ビットを点灯」というルールを 2 つの OR で並列に判定しているだけです。複雑そうに見えても、論理回路としてはとてもシンプルな構造です。
通常のエンコーダは「同時に有効になる入力は 1 本だけ」を前提にしています。もし 2 本以上が同時に 1 になると、出力が誤った値になってしまいます(D1=1 と D2=1 が同時だと、OR の結果が D3 と同じ符号 11 になってしまう)。
これを解決するのがプライオリティエンコーダ(優先順位付きエンコーダ)です。「複数の入力が同時に 1 になったら、あらかじめ決めた優先順位の高い入力を採用する」仕組みになっています。
動作例(D3 が最優先のとき)
・D0=1, D2=1, D3=1 が同時に有効 → 最優先の D3 を採用して符号 11 を出力
・D0=1, D2=1 が同時に有効 → 次に優先の D2 を採用して符号 10 を出力
・D0=1 のみ → 符号 00 を出力
使いどころ。CPU の割り込みコントローラがもっとも有名な応用例です。複数の周辺機器(マウス、キーボード、HDD など)から同時に割り込み要求が来たとき、優先順位の高い装置(例:システムクロック>HDD>キーボード)を先に処理する必要があります。プライオリティエンコーダがその判断を瞬時に行います。
身近な例で言うと、救急病院のトリアージに似ています。同時に複数の患者が来ても、緊急度の高い人から処置する、というルールがあらかじめ決まっているので混乱しません。プライオリティエンコーダも「同時に来てもどれを採用するかを事前に決めておく」という考え方で曖昧さをなくします。
エンコーダは入力数によってサイズが分かれます。「N 本の入力 → log₂(N) 本の出力」の関係なので、入力が増えれば出力も少しずつ増えます。
| 呼び名 | 入力線 | 出力線 | 計算 | 用途例 |
|---|---|---|---|---|
| 4-to-2 | 4本 | 2本 | log₂(4)=2 | 小規模信号選択 |
| 8-to-3 | 8本 | 3本 | log₂(8)=3 | 8ビット入力 |
| 16-to-4 | 16本 | 4本 | log₂(16)=4 | キーボード入力 |
| 10-to-4 (BCDエンコーダ) | 10本 | 4本 | 10進→4bit | テンキー→BCD変換 |
BCD エンコーダ(10-to-4)は少し特殊です。「BCD(2 進化 10 進数)」とは、10 進数の 1 桁を 4 ビットで表す方式のこと。0〜9 の 10 本の入力線に対応して、4 ビットの BCD コードを出力します(例:「3」が押されたら 0011 を出力)。
サイズが大きくなると、必要な論理ゲート数も増えます。8-to-3 エンコーダなら 3 個の OR ゲート、16-to-4 エンコーダなら 4 個の OR ゲート(それぞれ入力が 8 本)で済むため、シンプルな割に大量の入力を扱えるのがエンコーダの強みです。
逆方向のデコーダは「N 本の入力ビット → 2^N 本の出力」になるので、3-to-8 デコーダ、4-to-16 デコーダのように出力側がエンコーダのちょうど反対になります。「N と 2^N」「log₂ と 2^」がペアの関係になっていることに気づくと、丸暗記でなく仕組みとして理解できます。
エンコーダは見えないところで、私たちが普段使っているたくさんの機器の中で動いています。代表的な使われ方を 4 つ紹介します。
① キーボード入力
キーボードには 100 個以上のキーがありますが、これを 1 本ずつ CPU まで配線するのは現実的ではありません。キーボードコントローラ内のエンコーダが、押されたキーの位置を「スキャンコード」という短い番号に変換し、それを CPU に伝えます。たとえば「A キー」なら 0x1E のような決まった番号です。
② CPU の割り込みコントローラ
マウス、キーボード、ネットワーク、HDD など、多くの周辺機器が CPU に「処理してほしい」という割り込み信号を送ります。プライオリティエンコーダが、どの装置からの割り込みかを符号化し、同時発生時は優先順位を判断。CPU は番号を見るだけで、どの装置を相手にすればよいか分かります。
③ メモリの領域選択
メモリの中で「どの番地にアクセスするか」を決めるとき、エンコーダとデコーダがセットで使われます。アドレスバスの上位ビットをエンコーダで圧縮した符号にし、それをデコーダで展開してメモリ領域を選択します。大量の配線を少ない本数で代表させる役割です。
④ フラッシュ型 AD 変換器
マイクの音声センサなどから入ってくるアナログ電圧をデジタル値に変換する場面で、複数のコンパレータ(比較器)を並列に並べた回路を使います。電圧の大きさに応じて「どの段階のコンパレータが反応したか」を、プライオリティエンコーダが瞬時に符号化します。高速な AD 変換に欠かせない仕組みです。
共通するキーワードは「多くの線を少ない符号にまとめる」。エンコーダはハードウェアの世界での「圧縮係」「番号付け係」として、現代のあらゆる電子機器の縁の下を支えています。