题解 | #串行进位加法器#
串行进位加法器
https://www.nowcoder.com/practice/83c5850805004b6d8c48742f582f304a
// // 串行进位加法器,4位 进位加法器 `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:0] cout; assign cout[0] = Ci; genvar i; generate for(i = 0; i < 4; i = i+1) begin: add_full_4 add_full u1_add_full( .A (A[i] ), .B (B[i] ), .Ci (cout[i] ), .S (S[i] ), .Co (cout[i+1] ) ); end endgenerate assign Co = cout[4]; endmodule // 全加器 module add_full( input A, input B, input Ci, output wire S, output wire Co ); // 第一个,半加 wire Si; wire Coi; // 第二个,半加 wire Coo; add_half u1_add_half( .A (A ), .B (B ), .S (Si ), // Si = A ^ B; .C (Coi ) // Coi = A & B; ); add_half u2_add_half( .A (Si ), .B (Ci ), .S (S ), // S = A ^ B ^ Ci; .C (Coo ) // Coo = (A ^ B) & Ci; ); // 进位 assign Co = Coo | Coi; endmodule // 半加器 module add_half( input A, input B, output wire S, output wire C ); assign S = A^B; assign C = A&B; endmodule