题解 | 用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