要約: イネーブル付きアクティブ High 二進デコーダーは ビットコードを 本のうち 1 本のアサートされた出力へ対応付けます。アクティブ Low 型では規約を反転します。単純なエンコーダーはワンホット入力を前提とし、優先エンコーダーは複数 High 入力に対する勝者を定義します。BCD-7 セグメントブロックは、複数のセグメント出力を同時にアクティブにできるため、ワンホットデコーダーではなくコードコンバーターです。
デコーダーとエンコーダーは、コンパクトな二進インデックスと、より幅の広い信号集合の間を変換します。アドレス選択、命令制御、イベント符号化、表示ロジック、その他多くのインターフェースに現れます。名前は論理的な方向を表しますが、完全なインターフェースには極性、イネーブル動作、不正または同時入力に対する方針も必要です。
このガイドでは、ブール式から動作する BCD-7 セグメント表示ドライバーを作り、コモンアノードとコモンカソードの表示器の違いを理解し、優先エンコーダーと割り込み処理におけるその役割を調べ、これらの回路を digisim.io で構築します。
デコーダーとは何か
二進デコーダーは、 ビット入力を 本の出力のうち一つの選択出力へ対応付ける組み合わせ回路です。以下のアクティブ High の例では、選ばれた出力が HIGH、残りが LOW になります。実際のデコーダー IC にはイネーブルがあることが多く、アクティブ Low 出力を使うこともあります。その場合、選択された線は LOW です。

2-to-4 デコーダーでは、2 ビット入力が 4 出力のうちどれを HIGH にするか選びます。入力 10(二進数 2)は出力 をアクティブにします。
2-to-4 デコーダー: 真理値表とブール式
| 0 | 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 | 0 | 1 |
各出力は、入力変数(補数または非補数)の一意な AND 組み合わせです。
標準的な積和形の図では、二つの反転と四つの 2 入力 AND 項を使います。合成された ASIC または FPGA は、同じ機能を異なるセルまたはルックアップテーブルへマッピングする場合があります。
より大きいデコーダーへの拡張
3-to-8 デコーダーは、八つの最小項を使う同じブールパターンに従います。一般に直接的な積和形では、出力ごとに一つの最小項があります。これは教育用の構成であり、物理的なゲート数に関する普遍的な要件ではありません。より大きなデコーダーは普通、階層的に構成されます。
7 セグメント表示器
7 セグメント表示器は、8 の字に配置した 7 本の LED セグメントを使って 10 進数字を表示します。各セグメントには a から g のラベルがあります。
━━━━━ (a)
│ │
(f) (b)
│ │
━━━━━ (g)
│ │
(e) (c)
│ │
━━━━━ (d)
0 から 9 までの数字を表示するには、適切なセグメントの組み合わせを選んで点灯します。たとえば数字「7」では、a、b、c のセグメントをオンにし、d、e、f、g はオフのままにします。
コモンカソードとコモンアノード
7 セグメント表示器には物理的な構成が二つあり、ドライバー回路を設計するときには違いが重要です。
- コモンカソード: すべてのセグメント LED が共通のグラウンド(カソード)接続を共有します。アノードを HIGH で駆動するとセグメントが点灯します。この構成ではデコーダー出力はアクティブ HIGHであり、論理 1 がセグメントをオンにします。
- コモンアノード: すべてのセグメント LED が共通の正電源(アノード)接続を共有します。カソードを LOW に引くとセグメントが点灯します。この構成ではデコーダー出力をアクティブ LOWにする必要があり、論理 0 がセグメントをオンにします。
DigiSim の論理的な 7 セグメントコンポーネントは、アクティブ High のセグメントコマンドを使います。物理表示器では、出力極性はインターフェースの一部にすぎません。電流制限を設け、ドライバーが必要な電流をソースまたはシンクできるかを確認し、セグメントごとおよびパッケージ全体の電力制限を守ってください。
重要な洞察: これは単純なデコーダーではない
7 セグメントデコーダーは、標準的な二進デコーダーとは根本的に異なります。4-to-16 デコーダーは一度にちょうど一つの出力をアクティブにします。7 セグメントデコーダーは複数のセグメントを同時にアクティブにします(数字「8」では全 7 セグメントが点灯します)。これは同じ 4 ビット BCD 入力から導かれる、独立した 7 出力関数を持つ組み合わせ論理回路です。
BCD-7 セグメント: 真理値表
BCD(Binary Coded Decimal)は、0 から 9 までの数字を表すために 4 ビットを使います。デコーダーは各数字を適切なセグメントパターンへ対応付けます。
| 数字 | a | b | c | d | e | f | g | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| 3 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
| 4 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 5 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 6 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
| 7 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 8 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 9 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
BCD 値 10 から 15 は 10 進数字コードの範囲外です。その表示パターンは設計ごとに異なります。システム契約に従い、空白、エラーグリフ、16 進の A–F、またはドントケア動作を定義してください。
セグメント出力のブール式を導出する
七つのセグメントはそれぞれ、四つの BCD 入力 、、、 の独自のブール関数です。これらの式を導くには、各セグメントを点灯する数字を調べ、積和形を書きます(または最小化にカルノー図を使います)。
セグメント a(上の水平線)
セグメント a は数字 0、2、3、5、6、7、8、9 で ON、数字 1 と 4 で OFF です。 となる最小項を列挙すると:
カルノー図で最小化すると(BCD 入力 10-15 をドントケアとして扱う)、次のように単純化できます。
または等価に: ( と の XNOR)。
セグメント g(中央の水平線)
セグメント g は数字 2、3、4、5、6、8、9 で ON、数字 0、1、7 で OFF です。最小化された式は次です。
展開形は: 。
セグメント d(下の水平線)
セグメント d は数字 0、2、3、5、6、8、9 で ON、数字 1、4、7 で OFF です。最小化された式は次です。
残りの四つのセグメント(b、c、e、f)も同じ手順に従います。最小項を列挙し、不正入力の方針を決め、カルノー図に結果を配置し、最小化された式を抽出します。商用の 74x47/48 系ドライバーは指定済みの BCD-セグメント動作を実装しますが、その内部ネットワークがこれらの特定の式と一致する必要はありません。
不正な BCD 入力を扱う
BCD が使う入力値は 0 から 9 だけですが、4 ビット入力は 10 から 15 も表せます。これらの不正な入力では表示器に何を示すべきでしょうか。よくある方法は三つです。
- 表示器を空白にする: すべてのセグメントをオフにします。これは定義された結果を与えますが、別の診断がなければ上流の故障を隠すことがあります。
- ドントケアとして扱う: 入力 10–15 を最適化の自由度として扱います。ロジックを単純化できますが、結果のパターンは未指定であり、それらの入力が表示器で問題になり得ないときだけ許容されます。
- 16 進数字を表示する: 16 進表示では入力 10-15 を文字 A から F へ対応付けるため、追加のセグメントパターンが必要です。
上の式ではドントケア方式を使っています。専用の BCD-7 セグメントガイドでは、全七関数を導出し、その仮定が安全な場合を説明しています。
digisim.io で 7 セグメントドライバーを作る
動作する表示ドライバーは、次の手順で構築します。
- BCD 入力を置く。 四つの INPUT_SWITCH コンポーネントを加え、、、、 とラベルを付ける。
- 補数を生成する。 四つの NOT ゲートを置き、、、、 を作る。
- セグメントロジックを作る。 各セグメント(a から g)について、AND と OR ゲートでブール式を実装する。上の最小化した式を使い、セグメント a から始める。
- 表示器へ接続する。 SEVEN_SEGMENT_DISPLAY コンポーネントを置き、各セグメント出力を表示器上の対応するセグメント入力へ配線する。
- 体系的にテストする。 入力スイッチを BCD 値 0000 から 1001 まで切り替え、各入力で正しい数字が現れることを確認する。
近道として DIGIT_DISPLAY コンポーネントを使えます。ゲートレベルの演習では、目に見える一例で止めず、有効な十数字と不正な六つのコードをすべてテストしてください。
エンコーダーとは何か
エンコーダーはデコーダーの逆演算を行います。 本の入力線(アクティブになるのは最大一つであるべき)を受け、どの入力がアクティブかを示す ビット二進コードを出力します。
| 機能 | デコーダー | エンコーダー |
|---|---|---|
| 方向 | 二進コードからワンホットへ | ワンホットから二進コードへ |
| 入力 | ビット | 本 |
| 出力 | 本 | ビット |
| 例 | アドレスからメモリーチップ選択 | キーボードキーからスキャンコード |
単純な 4-to-2 エンコーダー
基本的な 4-to-2 エンコーダーには 4 入力(、、、)と 2 出力(、)があります。ブール式は次のとおりです。
これは、一度にちょうど一つの入力だけがアクティブなら正しく動作します。複数の入力が同時にアクティブになると、出力は曖昧になります。
優先エンコーダー
実システムでは、複数の入力が同時にアクティブになることがあります。優先エンコーダーは、最も優先順位の高いアクティブ入力(通常はインデックス最大のもの)だけをエンコードすることで、この曖昧さを解決します。
| Valid | エンコードした入力 | ||||||
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | X | X | 0 | なし |
| 0 | 0 | 0 | 1 | 0 | 0 | 1 | |
| 0 | 0 | 1 | X | 0 | 1 | 1 | |
| 0 | 1 | X | X | 1 | 0 | 1 | |
| 1 | X | X | X | 1 | 1 | 1 | (最高優先順位) |
X の項目は「ドントケア」を意味します。上位優先順位の入力がアクティブであるとき、下位優先順位の入力は無視されます。Valid 出力は、入力が一つでもアクティブかを示します。これは「入力 0 がアクティブ」と「入力が一つもアクティブでない」を区別する必要がある下流ロジックにとって重要です。
割り込み処理における優先エンコーダー
優先エンコーダーの最も重要な応用の一つは、割り込みコントローラーです。マイクロプロセッサーシステムでは、複数のハードウェアデバイス(キーボード、ネットワークカード、タイマー、ディスクドライブ)が、割り込み要求線をアサートすることで CPU の注意を同時に要求できます。
優先エンコーダーは、最高順位の適格な要求を特定してそのインデックスを出力できます。完全な割り込みコントローラーは、さらに保留中のイベントを記録し、マスクと優先状態を適用し、プロトコルで定義した割り込み識別子またはベクターを配信し、サービスを追跡し、選ばれなかった要求を保存します。ステートレスなエンコーダー単体では、下位優先順位の要求を保留したままにできません。
Intel 8259A は、要求、マスク、サービス中、優先度解決、ベクター生成の動作を組み合わせたコントローラーの歴史的な例です。デバイス全体を 8 入力エンコーダーへ還元すると、これらの状態を持つ機能を見落とします。
digisim.io で 3-to-8 デコーダーを作る
完全な 3-to-8 デコーダーを構築する手順は次のとおりです。
- 入力を置く。 、、 とラベルを付けた三つの INPUT_SWITCH コンポーネントを加える。
- 補数を生成する。 、、 用に三つの NOT ゲートを置く。
- AND 配列を作る。 八つの 3 入力 AND ゲートを置く。各ゲートは、元の入力と補数入力の一意な組み合わせを受ける。
- …以下のように続ける…
- 出力を加える。 各 AND 出力を OUTPUT_LIGHT へ接続する。入力を切り替えると、任意の時点でちょうど一つのライトだけがオンになるはずです。
- イネーブル線を加える(任意)。 各出力をイネーブル信号と AND して、メモリーアドレスデコードに使えるイネーブル付きデコーダーを作る。
応用
メモリーアドレスデコード
プロセッサーシステムでは、デコーダーがアドレスに応答するメモリーまたは I/O ターゲットの選択に役立ちます。二つの上位アドレスビットにつないだ 2-to-4 デコーダーは、空間を等しい四つの 2 のべき乗領域に分けられます。ほかのマップには追加のアドレスビットとアクセス修飾子が必要です。ターゲットがトライステートバスを共有する場合、バス制御ロジックは有効な出力が最大一つとなるようにしなければなりません。現代のオンチップ相互接続の多くは、内部トライステート配線ではなくマルチプレクスされた応答を使います。
キーボードエンコーディング
スキャンされたキー行列は、行/列の観測値を作ります。優先エンコーダーは、複数のアクティブな列線を意図的に一つのインデックスへ縮約できますが、ほかの同時キーを失います。複数キーのロールオーバーが必要な設計では、完全な行列状態を保存して処理します。電気的なゴースト、接点のデバウンス、スキャンコード生成、優先順位は別個の懸案です。
表示システム
BCD-7 セグメント変換は時計、メーター、家電、スコアボードに現れます。多重化表示器では、複数の数字位置がセグメント駆動を共有できます。制御器は一つのパターンを提示して対応する数字を有効にし、次へ進みます。フリッカー、カメラ、明るさ、デューティサイクル、デバイス制限から、完全フレームと一桁ごとのリフレッシュレートを選んでください。普遍的な 1 kHz しきい値はありません。ドライバーと数字選択の遅延がゴーストセグメントを作り得るなら、ブランキングを挿入してください。
CPU の命令デコード
小さな教育用 CPU では、4 ビットオペコードを 4-to-16 デコーダーへ送り、選択された線をフェッチ・デコード・実行サイクル中の ALU、レジスター、メモリー制御に寄与させることができます。実際の命令デコードは階層的、テーブル駆動、マイクロコード、分散型の場合があり、制御信号は通常、オペコード情報をタイミング状態やほかの命令フィールドと組み合わせます。
タイミングとハザード
組み合わせ出力は同時に変化しません。複数の入力ビットが変わると、最小項デコーダーは、短時間だけ古い出力、出力なし、または物理ハードウェアでは、補数・非補数経路の遅延が異なるため意図しない出力を選択することがあります。7 セグメントネットワークは遷移パターンを一瞬表示する場合があります。
消費側が同期してサンプルするなら、入力または出力をレジスターに入れてください。多重化表示器では、ゴーストが問題になる場合、数字/パターン切り替え中にブランキングします。チップ選択と書き込みイネーブルでは、静的な真理値表だけに頼らず、ハザードを解析し、ターゲットデバイスのタイミング要件を満たしてください。
自分で試す
- 2-to-4 デコーダーを作る。 適切な反転を持つ四つの AND 項を使います。有効な各入力組み合わせで出力がちょうど一つ HIGH になり、無効時には HIGH がないことを検証します。
- 7 セグメント表示器を配線する。 少なくともセグメント a と g のブール式をゼロから実装し、出力を SEVEN_SEGMENT_DISPLAY へ接続します。
- 4-to-2 エンコーダーを作る。 4 個のボタンのどれが押されたかを 2 ビット二進コードにエンコードします。
- エンコーダーへ優先ロジックを加える。 二つのボタンが同時に押されたとき、番号の大きいボタンが勝つようにします。
- 表示付きの完全な BCD カウンターを作る。 COUNTER を 7 セグメントデコーダーにつなぎ、0 から 9 まで自動で数えるのを観察します。
デコーダーへカウント入力を供給するには、カウンターと状態機械を続けてください。または、すべてのデコーダー出力の主要構成ブロックである AND ゲートコンポーネントリファレンス を開いてください。マルチプレクサーは逆のルーティング問題を解きます。マルチプレクサーガイド を参照してください。



