题解 | 用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
);
reg reg_D ;
reg reg_Co;
wire Y0n ;
wire Y1n ;
wire Y2n ;
wire Y3n ;
wire Y4n ;
wire Y5n ;
wire Y6n ;
wire Y7n ;
decoder_38 decoder_38_inst0(
.E (1'b1) ,
.A0 (Ci) ,
.A1 (B) ,
.A2 (A) ,
.Y0n (Y0n) ,
.Y1n (Y1n) ,
.Y2n (Y2n) ,
.Y3n (Y3n) ,
.Y4n (Y4n) ,
.Y5n (Y5n) ,
.Y6n (Y6n) ,
.Y7n (Y7n)
);
assign Co= reg_Co;
assign D= reg_D;
always@(*)begin
case({Y7n,Y6n,Y5n,Y4n,Y3n,Y2n,Y1n,Y0n})
8'b11111110 : begin
reg_D = 0;reg_Co = 0;
end
8'b11111101 : begin
reg_D = 1;reg_Co = 1;
end
8'b11111011 : begin
reg_D = 1;reg_Co = 1;
end
8'b11110111 : begin
reg_D = 0;reg_Co = 1;
end
8'b11101111 : begin
reg_D = 1;reg_Co = 0;
end
8'b11011111 : begin
reg_D = 0;reg_Co = 0;
end
8'b10111111 : begin
reg_D = 0;reg_Co = 0;
end
8'b01111111: begin
reg_D = 1;reg_Co = 1;
end
default: begin
reg_D = 0;reg_Co = 0;
end
endcase
end
endmodule
