Altifigence Academy

11 / 63 · 概念

デコーダ・ワンホット選択・有効な入力

二進アドレスを個別の選択線に変換し、enable・範囲・選択の不変条件を設計します。

アドレスを選択線に変換する

NN ビットのデコーダデコーダ 二進コードに対応する出力線を有効にする回路です。enable があれば、無効時にすべての出力を 0 にできます。は、入力アドレスを最大 2N2^N 本の出力の一つへ変換します。enable ee を持つ出力 did_i は、次のように定義できます。

di=e∧(a=i)d_i=e\land(a=i)

2-to-4 デコーダでは、d0=ea‾1a‾0d_0=e\overline a_1\overline a_0、d1=ea‾1a0d_1=e\overline a_1a_0、d2=ea1a‾0d_2=ea_1\overline a_0、d3=ea1a0d_3=ea_1a_0 です。enable が 0 なら全出力が 0、1 ならちょうど一つだけが 1 です。

enable=1 でアドレス a1a0 を変えると、d0~d3 の一つだけが有効になります。enable を 0 にし、すべての選択線が無効になることも確認してください。

アドレスからワンホット選択線へ

d[i] = enable AND (2 × a1 + a0 = i)

デフォルト値で全実行経路の出力を定めます

SystemVerilog
module decoder2 (
  input logic en,
  input logic [1:0] addr,
  output logic [3:0] select
);
  always_comb begin
    select = 4'b0000;
    if (en) begin
      case (addr)
        2'd0: select = 4'b0001;
        2'd1: select = 4'b0010;
        2'd2: select = 4'b0100;
        2'd3: select = 4'b1000;
        default: select = 4'b0000;
      endcase
    end
  end
endmodule

最初のデフォルト代入は、前の出力値を記憶しないよう全実行経路を覆います。always_comb と記述するだけで、未定義の分岐が自動的に正しい回路になるわけではありません。

出力数が 2 の累乗でない場合

10 台の装置を選ぶには 4 ビットのアドレスが必要ですが、10~15 は無効です。この場合、全出力 0、エラーフラグ 1 といった方針を仕様で定めます。未使用コードだからといって、任意の出力が許されるわけではありません。

検証では入力と出力の対応だけでなく、複数の選択線が同時に有効にならないか、disable ならすべて無効かを検査します。これらの不変条件不変条件 許可されたすべての実行で、常に真でなければならない条件です。例えば深さ 4 の FIFO の格納数は常に 0 以上 4 以下です。 詳しく見るは、メモリの write enable やバス選択回路で特に重要です。デコーダが大きくなるほどアドレス信号のファンアウトと配線負荷も増えるため、階層的なデコードを考慮します。

自分で考えてみましょう

10 出力のアドレスデコーダを設計します。必要なアドレス幅、無効な入力の数、en=0 で必ず満たす条件を定めてください。

解説を見る

アドレスは ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 ビットで、無効なコードは 6 個です。en=0 ではアドレスに関係なく全選択線が 0 でなければなりません。無効なアドレスでも全出力を 0 にし、別のエラーを示す仕様を選べます。

選択はこのブラウザに適用されます。フッターからいつでも変更できます。