题解 | #串行进位加法器#
串行进位加法器
https://www.nowcoder.com/practice/83c5850805004b6d8c48742f582f304a
`timescale 1ns / 1ns module add_4 ( input [3:0] A, input [3:0] B, input Ci, output wire [3:0] S, output wire Co ); wire [4:1] C_reg; add_full add_full_inst1 ( .A (A[0]), .B (B[0]), .Ci(Ci), .S (S[0]), .Co(C_reg[1]) ); generate genvar i; for (i = 1; i <= 3; i = i + 1) begin : add_half_i add_full add_full_inst2 ( .A (A[i]), .B (B[i]), .Ci(C_reg[i]), .S (S[i]), .Co(C_reg[i+1]) ); end assign Co = C_reg[4]; endgenerate endmodule module add_half( input A , input B , output wire S , output wire C ); assign S = A ^ B; assign C = A & B; endmodule /***************************************************************/ module add_full( input A , input B , input Ci , output wire S , output wire Co ); wire c_1; wire c_2; wire sum_1; add_half add_half_1( .A (A), .B (B), .S (sum_1), .C (c_1) ); add_half add_half_2( .A (sum_1), .B (Ci), .S (S), .C (c_2) ); assign Co = c_1 | c_2; endmodule