FE EXAM

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

複数の入力信号のうちどれが有効かを、より少ないビットの符号に変換する回路。

INTERACTIVE VISUALIZATION
入力線
出力ビット
フェーズ
idle
有効な入力
出力符号
シナリオ
ステップ1 / 5
STEP 1/5まだどの入力も有効でないエンコーダ(=符号化回路)には4本の入力線 D0〜D3 があります。今はどれも0(無効)の状態です。これから1本だけが1(有効)になり、その番号を2ビットの符号に変換していきます。
エンコーダ4入力 → 2ビットD00D10D20D30?Y1?Y0
真理値表(4入力 → 2ビット)
有効な入力D3D2D1D0Y1Y0
D0000100
D1001001
D2010010
D3100011
解説

📌
エンコーダとは

エンコーダD0D1D2D3Y1Y0

エンコーダ(符号化回路)とは、複数の入力信号のうちどれが有効かを、より少ないビットの符号に変換する回路です。たとえば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つはセットで使われることがよくあります。たとえば多くの信号を符号にまとめて(エンコーダ)少ない配線で送り、受け取った側で元の信号に戻す(デコーダ)、という使い方です。エンコーダで圧縮した情報を、デコーダで元どおりに展開する関係だと考えると分かりやすいです。

🔌
論理ゲートでの実装

D0D1D2D3ORY1ORY0Y1 = D2 OR D3 / Y0 = D1 OR D3

エンコーダは抽象的な「真理値表通りに動く回路」ではなく、実際は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 で並列に判定しているだけです。複雑そうに見えても、論理回路としてはとてもシンプルな構造です。

プライオリティエンコーダ

複数同時1D0=1D1=0D2=1D3=1プライオリティエンコーダ番号大きい方を優先採用11(D3を採用)D0/D2/D3 が同時に1 → D3 が最優先 → 出力 11

通常のエンコーダは「同時に有効になる入力は 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-24本2本log₂(4)=2小規模信号選択
8-to-38本3本log₂(8)=38ビット入力
16-to-416本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^」がペアの関係になっていることに気づくと、丸暗記でなく仕組みとして理解できます。

🛠️
実際に使われる場面

⌨️キーボード
どのキーが押されたかをスキャンコードへ
🖱️割り込み制御
複数の割込み源から優先順位付き番号へ
🎚️メモリ選択
アドレスをデコーダと組合せて領域選択
AD変換器
フラッシュ型でアナログを瞬時に符号化

エンコーダは見えないところで、私たちが普段使っているたくさんの機器の中で動いています。代表的な使われ方を 4 つ紹介します。

① キーボード入力
キーボードには 100 個以上のキーがありますが、これを 1 本ずつ CPU まで配線するのは現実的ではありません。キーボードコントローラ内のエンコーダが、押されたキーの位置を「スキャンコード」という短い番号に変換し、それを CPU に伝えます。たとえば「A キー」なら 0x1E のような決まった番号です。

② CPU の割り込みコントローラ
マウス、キーボード、ネットワーク、HDD など、多くの周辺機器が CPU に「処理してほしい」という割り込み信号を送ります。プライオリティエンコーダが、どの装置からの割り込みかを符号化し、同時発生時は優先順位を判断。CPU は番号を見るだけで、どの装置を相手にすればよいか分かります。

③ メモリの領域選択
メモリの中で「どの番地にアクセスするか」を決めるとき、エンコーダとデコーダがセットで使われます。アドレスバスの上位ビットをエンコーダで圧縮した符号にし、それをデコーダで展開してメモリ領域を選択します。大量の配線を少ない本数で代表させる役割です。

④ フラッシュ型 AD 変換器
マイクの音声センサなどから入ってくるアナログ電圧をデジタル値に変換する場面で、複数のコンパレータ(比較器)を並列に並べた回路を使います。電圧の大きさに応じて「どの段階のコンパレータが反応したか」を、プライオリティエンコーダが瞬時に符号化します。高速な AD 変換に欠かせない仕組みです。

共通するキーワードは「多くの線を少ない符号にまとめる」。エンコーダはハードウェアの世界での「圧縮係」「番号付け係」として、現代のあらゆる電子機器の縁の下を支えています。

練習問題

🎯
基本情報技術者 練習問題

Q1.エンコーダ(符号化回路)の説明として最も適切なものはどれか。
A.複数の入力のうち有効な1本の番号を、より少ないビットの符号に変換する回路
B.少ないビットの入力から対応する1本の出力線を有効にする回路
C.複数の入力から選択信号で1つを選んで出力する回路
D.クロックに同期して値を記憶する回路
Q2.4本の入力をもつエンコーダでは、出力は最低何ビット必要か。
A.1ビット
B.2ビット
C.4ビット
D.8ビット
Q3.エンコーダで入力 D2 だけが有効になったとき、2ビットの出力(上位ビット, 下位ビット)はどれか。
A.0 0
B.0 1
C.1 0
D.1 1

関連コンテンツ