符号化された入力ビットを解読し、対応する1本の出力線を有効にする回路。
デコーダ(解読回路)とは、符号化された入力ビットを解読し、対応する1本の出力線を有効にする回路です。たとえば2ビットの入力を受け取ると、その値が指す番号の出力線1本だけを1にします。
身近な例で考えると、マンションの郵便受けに似ています。「2号室」という部屋番号(符号)を見て、たくさんある郵便受けのうち2号室の1つだけを開ける、というイメージです。番号という短い情報から、対応する1つだけを選び出します。
上のツールで▶ボタンを押すと、2ビットの入力が与えられ、その値に対応する1本の出力線だけが有効になるまでの流れを確認できます。
デコーダは入力の2進値を10進数の番号として読み取り、その番号の出力線だけを1にします。残りの出力はすべて0のままです。つまり「いつでも出力のうち1本だけが有効」になります。
2ビット入力デコーダの動きは次のとおりです。
・① 入力を読む:A1・A0 の2ビットを2進数の値として読み取る
・② 番号を決める:その値(0〜3)が選ぶべき出力線の番号になる
・③ 1本だけ有効に:その番号の出力線を1、他をすべて0にする
入力と出力の対応は次のようになります。
・入力 00 → Y0 だけ1
・入力 01 → Y1 だけ1
・入力 10 → Y2 だけ1
・入力 11 → Y3 だけ1
入力が n ビットあれば、出力線は最大 2^n 本もてます。2ビットなら4本、3ビットなら8本です。これは「番号を符号にまとめる」エンコーダのちょうど逆の働きです。上のツールの真理値表で、各入力に対応して1本だけが1になる様子を確認できます。
デコーダは「番号を指定して1つを選ぶ」場面であちこちに使われます。少ないビットで多くの対象から1つを選べるので、コンピュータの内部で重宝されます。
代表的な用途は次のとおりです。
・アドレスデコード:CPU(=中央処理装置)が出したメモリのアドレス(番地)を解読し、その番地のメモリ素子だけを選んで読み書きする
・命令デコード:プログラムの命令コードを解読し、対応する処理回路を有効にする
・7セグメントLEDの点灯制御:数字の符号を解読し、点灯させるべき部分を選ぶ
とくにアドレスデコードは身近な例えで言えば、図書館で「請求番号」を渡すと、その番号の棚1つだけが選ばれるようなものです。たくさんのメモリ素子の中から、CPUが指定した1つだけを正確に選び出す。デコーダはこうした「番号→1つの選択」をハードウェアで高速にこなしています。
デコーダの中身は、NOT ゲートと AND ゲートを組み合わせた論理回路です。2-to-4 デコーダなら、出力 4 本それぞれに対応する4 個の AND ゲートと、入力を反転するNOT ゲート(インバータ)で実現できます。
各出力の論理式。「その入力パターンのときだけ AND の結果が 1 になる」ように、必要な箇所だけ NOT で反転して AND に入れます。
・Y0=入力 00 のとき 1 → Y0 = ¬A1 AND ¬A0
・Y1=入力 01 のとき 1 → Y1 = ¬A1 AND A0
・Y2=入力 10 のとき 1 → Y2 = A1 AND ¬A0
・Y3=入力 11 のとき 1 → Y3 = A1 AND A0
なぜ AND ゲートを使うのか。AND は「両方の入力が 1 のときだけ 1 になる」性質を持ちます。各出力に「自分の入力パターンに完全一致するときだけ 1」を要求できるので、入力の組み合わせを丁度 1 通りずつ拾い出せます。「全部の条件がそろったときだけ点灯」というスイッチを 4 個並べているイメージです。
エンコーダは OR ゲートだけで作れましたが、デコーダは NOT + AND の組み合わせが必要になります。これは「いつでも 1 本だけが 1、ほかは必ず 0」という厳しい条件を満たすためです。
実用的なデコーダの多くには、イネーブル(Enable、有効化)信号と呼ばれる追加の入力があります。これはデコーダ全体の ON/OFF スイッチとして働きます。
動作
・EN = 1:通常通り動作。入力 A1A0 に応じて 1 本の出力が 1 になる
・EN = 0:入力が何であっても、すべての出力が強制的に 0 になる(デコーダの動作を一時停止)
なぜ便利か:デコーダの拡張
たとえば 2-to-4 デコーダを 2 個使って 3-to-8 デコーダ相当を作れます。新しく追加した 1 ビットの上位アドレスを、それぞれのデコーダの EN として与えると、上位ビットが 0 のときは 1 個目だけ、1 のときは 2 個目だけが動作します。これで合計 8 本の出力を選び分けられます。
メモリ分割でも活躍。コンピュータが複数のメモリ IC を組み合わせて大きなメモリ領域を作るとき、上位アドレスをデコードしてどの IC を選ぶかを決めます。このとき各 IC のチップセレクト端子(CS、=EN と同じ役割)にデコーダの出力をつなぐと、必要な IC だけが反応する仕組みになります。
身近な例で言うと、マンションのインターホンのようなものです。インターホンの主電源(EN)が ON のときだけ、特定の部屋の番号を押せばその部屋のチャイムが鳴ります。電源(EN)が OFF なら、どの番号を押しても何も鳴りません。
デコーダは入力ビット数によってサイズが分かれます。「N ビットの入力 → 最大 2^N 本の出力」の関係で、入力が 1 ビット増えるごとに出力数は2 倍に増えていきます。
| 呼び名 | 入力線 | 出力線 | 計算 | 主な用途 |
|---|---|---|---|---|
| 2-to-4 | 2本 | 4本 | 2² = 4 | 小規模選択 |
| 3-to-8 | 3本 | 8本 | 2³ = 8 | 8ビット選択 |
| 4-to-16 | 4本 | 16本 | 2⁴ = 16 | メモリ番地選択 |
| BCD→7セグ | 4本 | 7本 | 0〜9 を変換 | 7セグLED表示 |
BCD-to-7セグメントデコーダは特殊なデコーダで、4 ビットの BCD(2 進化 10 進数)コードを受け取り、7 セグメント LED の点灯パターン(7 本の出力)に変換します。たとえば入力が 0010(=2)なら、7 セグの「a, b, d, e, g」の 5 本を 1 にして「2」の形を表示します。電卓や時計の数字表示でおなじみの仕組みです。
必要なゲート数
2-to-4 デコーダ:AND ゲート 4 個 + NOT ゲート 2 個
3-to-8 デコーダ:AND ゲート 8 個 + NOT ゲート 3 個
4-to-16 デコーダ:AND ゲート 16 個 + NOT ゲート 4 個
このように、出力数(=必要な AND ゲート数)が指数的に増えるのがエンコーダとの大きな違いです。
エンコーダの「N → log₂(N)」とデコーダの「N → 2^N」は、「log と 2^」の対関係になっています。ペアで覚えると、丸暗記ではなく仕組みとして理解できます。
7 セグメント LEDは、電卓・デジタル時計・家電のディスプレイなどで数字を表示するための部品です。7 本の発光帯(セグメント)a〜gを組み合わせて、0〜9 の数字を表示します。
仕組み。BCD(4 ビットで 0〜9 を表す符号)を受け取った BCD-to-7セグメントデコーダは、内部の真理値表を参照して「この数字を表示するなら、どのセグメントを点けるか」を決め、7 本の出力線で各セグメントを制御します。
各数字の点灯パターン
・0:a,b,c,d,e,f を点灯(g 消灯)→「□」のような枠
・1:b,c だけ点灯 → 右側の縦棒
・2:a,b,d,e,g を点灯(c,f 消灯)→「2」の形
・8:全部点灯 → 全部光る
なぜ専用のデコーダがあるのか。BCD(4 ビット)から 7 セグの「どこを光らせるか」への変換は、人間にとっては当たり前でも、回路にはかなり複雑な対応表です。専用のデコーダ IC を使うことで、CPU から「4 ビットの数字を送るだけ」で表示でき、ソフトウェアやハードウェアが単純になります。
身近に言えば、「数字の絵」を組み立てるパズルセットのようなものです。BCD という指示書を見て、決まった部品(セグメント)を組み合わせて数字を作る。デコーダがその指示書を読み取って組立て指示を出す職人さん、というイメージです。