一、什么是 2-4 编码器(2-to-4 Decoder)?
注意,这里你提到的是 2-4 编码器,而通常2-4结构是 解码器(decoder),因为:
- 输入 2 位,表示 $2^2 = 4$ 个可能的状态;
- 输出 4 位,每个位表示某一状态是否激活;
- 所以,应该是 2-4 decoder(解码器)。
而 编码器(Encoder) 是从多输入中“编码”出某个激活信号,方向是反的,如 4-2 编码器。
二、先讲:2-4 解码器(decoder)门级建模
✦ 真值表:
输入 A1 | 输入 A0 | 输出 Y3 | Y2 | Y1 | Y0 |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 0 | 0 |
1 | 1 | 1 | 0 | 0 | 0 |
即输出 $Y_i = 1$ 当且仅当输入是 $i$。
✦ 门级建模实现(使用 and
和 not
门)
module decoder_2to4 (output Y0, Y1, Y2, Y3,input A0, A1
);wire nA0, nA1;not G1(nA0, A0);not G2(nA1, A1);and G3(Y0, nA1, nA0); // 00and G4(Y1, nA1, A0); // 01and G5(Y2, A1, nA0); // 10and G6(Y3, A1, A0); // 11
endmodule
三、再讲:4-2 编码器(encoder)门级建模
✦ 真值表(假设只有一个输入为 1):
输入 I3 | I2 | I1 | I0 | 输出 A1 | A0 |
---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 0 |
0 | 0 | 1 | 0 | 0 | 1 |
0 | 1 | 0 | 0 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | 1 |
✦ 逻辑表达式:
- A0 = I1 | I3
- A1 = I2 | I3
✦ 门级建模实现:
module encoder_4to2 (output A1, A0,input I0, I1, I2, I3
);or G1(A0, I1, I3);or G2(A1, I2, I3);
endmodule
四、完整可选输出例子(带 valid 输出)
在实际编码器中,为防止多输入为 1 引发歧义,一般会加一个 valid
或 enable
信号。
module encoder_4to2_valid (output reg [1:0] A,output reg valid,input [3:0] I
);always @(*) beginvalid = 1'b1;case (I)4'b0001: A = 2'b00;4'b0010: A = 2'b01;4'b0100: A = 2'b10;4'b1000: A = 2'b11;default: beginA = 2'b00;valid = 1'b0;endendcaseend
endmodule
五、门级与行为级的比较
对比项 | 门级建模 | 行为级建模 |
---|---|---|
语法 | 使用基本门(and、or、not) | 使用 always , case , if |
可综合性 | 强 | 强 |
可读性 | 差 | 好 |
灵活性 | 低 | 高 |
时序建模 | 更贴近真实硬件 | 可控制但不直观 |
应用场景 | 教学、后仿、标准元件库建模 | 日常功能设计 |
六、练习建议(Verilog 门级建模)
你可以练习:
- 3-8 decoder(3个输入,8个输出)门级建模
- 8-3 encoder + priority encoder
- 1-4 demux(解复用器)门级建模
- N-bit comparator(大小比较器)