简析
3-8译码器
先看一下3-8译码器的真值表和表达式。不知道为什么牛客把3-8译码器的基础题目安排在这道题后面...
真值表:
A2 | A1 | A0 | Y0_n | Y1_n | Y2_n | Y3_n | Y4_n | Y5_n | Y6_n | Y7_n |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
表达式:
本题给出的3-8译码器只有一个使能端口E
。当E==1
时,译码器正常工作;当E==0
时,译码器输出为8'b1111_1111
。
全减器
是借位输入,是被减数,是减数,是差,是借位输出。
需要注意的是,当,,时,被减数小于减数,借位得到,所以借位输出,差;当,,时,借位得到,所以借位输出,差。
真值表:
C_i | A | B | D | C_o |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 0 |
1 | 0 | 0 | 1 | 1 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 |
表达式:
结合3-8译码器的表达式可以得到:
也就是将减数、被减数和借位分别连接到到3-8译码器的、和,然后对输出取反求和就可以得到全减器的输出。
代码
module decoder1(
input wire A,
input wire B,
input wire Ci,
output wire D,
output wire Co
);
wire [7:0] Y;
assign D = ~Y[1] + ~Y[2] + ~Y[4] + ~Y[7];
assign Co = ~Y[1] + ~Y[4] + ~Y[5] + ~Y[7];
decoder_38 myDecoder(
.E (1 ),
.A0 (B ),
.A1 (A ),
.A2 (Ci ),
.Y0n(Y[0]),
.Y1n(Y[1]),
.Y2n(Y[2]),
.Y3n(Y[3]),
.Y4n(Y[4]),
.Y5n(Y[5]),
.Y6n(Y[6]),
.Y7n(Y[7])
);
endmodule