Altifigence Academy

11 / 63 · 概念

译码器、独热选择与有效输入

将二进制地址转换为独立选择线,设计使能、范围和选择不变式。

将地址转换为选择线

NN 位译码器译码器 激活与二进制编码对应的输出线的电路。带 enable 时,可在禁用状态下将所有输出置 0。把输入地址转换为最多 2N2^N 个输出中的一个。带使能 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。不能因为某些编码未被使用,就允许任意输出。

验证不仅要检查输入与输出的对应关系,还要检查是否有多根选择线同时激活、禁用时是否全部关闭。这些不变式不变式 所有允许的执行过程中都必须始终成立的条件。例如,深度为 4 的 FIFO 中,存储条目数必须始终在 0 到 4 之间。了解更多对于存储器写使能和总线选择电路尤其重要。译码器越大,地址信号的扇出与布线负载越大,因此需要考虑分层译码。

自己试试

设计一个具有 10 个输出的地址译码器。确定所需地址位宽、无效输入数量,以及 en=0 时必须满足的条件。

阅读解释

地址宽度为 ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 位,无效编码有 6 个。en=0 时,无论地址如何,所有选择线都必须为 0。也可以规定无效地址时所有输出为 0,并另行报告错误。

你的选择适用于此浏览器,可随时在页脚更改。