题解 | 用3-8译码器实现全减器
用3-8译码器实现全减器
https://www.nowcoder.com/practice/4a8f2e5058554cea9c1cb2ac8bdea0a7
`timescale 1ns/1ns
module decoder_38(
input E ,
input A0 ,
input A1 ,
input A2 ,
output reg Y0n ,
output reg Y1n ,
output reg Y2n ,
output reg Y3n ,
output reg Y4n ,
output reg Y5n ,
output reg Y6n ,
output reg Y7n
);
always @(*)begin
if(!E)begin
Y0n = 1'b1;
Y1n = 1'b1;
Y2n = 1'b1;
Y3n = 1'b1;
Y4n = 1'b1;
Y5n = 1'b1;
Y6n = 1'b1;
Y7n = 1'b1;
end
else begin
case({A2,A1,A0})
3'b000 : begin
Y0n = 1'b0; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
3'b001 : begin
Y0n = 1'b1; Y1n = 1'b0; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
3'b010 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b0; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
3'b011 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b0;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
3'b100 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b0; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
3'b101 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b0; Y6n = 1'b1; Y7n = 1'b1;
end
3'b110 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b0; Y7n = 1'b1;
end
3'b111 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b0;
end
default: begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
endcase
end
end
endmodule
module decoder1(
input A ,
input B ,
input Ci ,
output wire D ,
output wire Co
);
wire u1_E ;
wire u1_A0 ;
wire u1_A1 ;
wire u1_A2 ;
wire u1_Y0n;
wire u1_Y1n;
wire u1_Y2n;
wire u1_Y3n;
wire u1_Y4n;
wire u1_Y5n;
wire u1_Y6n;
wire u1_Y7n;
assign u1_E = 1 ;
assign u1_A0 = Ci;
assign u1_A1 = B ;
assign u1_A2 = A ;
// 考察最大项
// D,Co
// 000->0,0; 0
// 001->1,1; 1
// 010->1,1; 2
// 011->0,1; 3
// 100->1,0; 4
// 101->0,0; 5
// 110->0,0; 6
// 111->1,1; 7
assign D = u1_Y0n&u1_Y3n&u1_Y5n&u1_Y6n;
assign Co = u1_Y0n&u1_Y4n&u1_Y5n&u1_Y6n;
decoder_38 u1_decoder_38(
.E (u1_E ),
.A0 (u1_A0 ),
.A1 (u1_A1 ),
.A2 (u1_A2 ),
.Y0n (u1_Y0n ),
.Y1n (u1_Y1n ),
.Y2n (u1_Y2n ),
.Y3n (u1_Y3n ),
.Y4n (u1_Y4n ),
.Y5n (u1_Y5n ),
.Y6n (u1_Y6n ),
.Y7n (u1_Y7n )
);
endmodule