11 / 63 · 概念
译码器、独热选择与有效输入
将二进制地址转换为独立选择线,设计使能、范围和选择不变式。
课时内容可免费阅读,选课后可保存学习进度。
将地址转换为选择线
位译码器译码器 激活与二进制编码对应的输出线的电路。带 enable 时,可在禁用状态下将所有输出置 0。把输入地址转换为最多 个输出中的一个。带使能 的输出 可定义如下。
在 2-to-4 译码器中,、、、。enable 为 0 时所有输出为 0,为 1 时恰好一个输出为 1。
在 enable=1 时改变地址 a1a0,d0~d3 中应只有一个亮起。再将 enable 改为 0,确认所有选择线都关闭。
d[i] = enable AND (2 × a1 + a0 = i)
默认值补全了功能
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 时必须满足的条件。
阅读解释
地址宽度为 位,无效编码有 6 个。en=0 时,无论地址如何,所有选择线都必须为 0。也可以规定无效地址时所有输出为 0,并另行报告错误。