/*This is a 32 bit carry save adder module built using the CSA_unit blocks cascaded with each other. The commented parameters in the module declaration can be used if this 32-bit adder needs to be cascaded to form higher bit adders similar to how CSA_unit modules have been cascaded to form this 32 bit model. This module will be used to build wallace tree multiplier, which will be my next project to be uploaded to opencores. **The testbench has also been uploaded. Please refer to it if needed. */ `timescale 1ns / 1ps module csa_32Bit( input [31:0] a, input [31:0] b, input [31:0] c, /*input cin, input s_back_x, output s_x,*/ output [31:0] sum, output cout ); wire cin, s_back_x; wire s_x; assign cin = 1'b0; csa_unit a1(a[0], b[0], c[0], cin, s_back_2, sum[0], sum[1], cout1); csa_unit a2(a[1], b[1], c[1], cout1, s_back_3, s_back_2, sum[2], cout2); csa_unit a3(a[2], b[2], c[2], cout2, s_back_4, s_back_3, sum[3], cout3); csa_unit a4(a[3], b[3], c[3], cout3, s_back_5, s_back_4, sum[4], cout4); csa_unit a5(a[4], b[4], c[4], cout4, s_back_6, s_back_5, sum[5], cout5); csa_unit a6(a[5], b[5], c[5], cout5, s_back_7, s_back_6, sum[6], cout6); csa_unit a7(a[6], b[6], c[6], cout6, s_back_8, s_back_7, sum[7], cout7); csa_unit a8(a[7], b[7], c[7], cout7, s_back_9, s_back_8, sum[8], cout8); csa_unit a9(a[8], b[8], c[8], cout8, s_back_10, s_back_9, sum[9], cout9); csa_unit a10(a[9], b[9], c[9], cout9, s_back_11, s_back_10, sum[10], cout10); csa_unit a11(a[10], b[10], c[10], cout10, s_back_12, s_back_11, sum[11], cout11); csa_unit a12(a[11], b[11], c[11], cout11, s_back_13, s_back_12, sum[12], cout12); csa_unit a13(a[12], b[12], c[12], cout12, s_back_14, s_back_13, sum[13], cout13); csa_unit a14(a[13], b[13], c[13], cout13, s_back_15, s_back_14, sum[14], cout14); csa_unit a15(a[14], b[14], c[14], cout14, s_back_16, s_back_15, sum[15], cout15); csa_unit a16(a[15], b[15], c[15], cout15, s_back_17, s_back_16, sum[16], cout16); csa_unit a17(a[16], b[16], c[16], cout16, s_back_18, s_back_17, sum[17], cout17); csa_unit a18(a[17], b[17], c[17], cout17, s_back_19, s_back_18, sum[18], cout18); csa_unit a19(a[18], b[18], c[18], cout18, s_back_20, s_back_19, sum[19], cout19); csa_unit a20(a[19], b[19], c[19], cout19, s_back_21, s_back_20, sum[20], cout20); csa_unit a21(a[20], b[20], c[20], cout20, s_back_22, s_back_21, sum[21], cout21); csa_unit a22(a[21], b[21], c[21], cout21, s_back_23, s_back_22, sum[22], cout22); csa_unit a23(a[22], b[22], c[22], cout22, s_back_24, s_back_23, sum[23], cout23); csa_unit a24(a[23], b[23], c[23], cout23, s_back_25, s_back_24, sum[24], cout24); csa_unit a25(a[24], b[24], c[24], cout24, s_back_26, s_back_25, sum[25], cout25); csa_unit a26(a[25], b[25], c[25], cout25, s_back_27, s_back_26, sum[26], cout26); csa_unit a27(a[26], b[26], c[26], cout26, s_back_28, s_back_27, sum[27], cout27); csa_unit a28(a[27], b[27], c[27], cout27, s_back_29, s_back_28, sum[28], cout28); csa_unit a29(a[28], b[28], c[28], cout28, s_back_30, s_back_29, sum[29], cout29); csa_unit a30(a[29], b[29], c[29], cout29, s_back_31, s_back_30, sum[30], cout30); csa_unit a31(a[30], b[30], c[30], cout30, s_back_32, s_back_31, sum[31], cout31); csa_unit a32(.an(a[31]), .bn(b[31]), .cn(c[31]), .cin(cout31), .s_n_1(1'b0), .s_n_1(s_back_32)/*, s_x*/, .cout(cout)); //csa_unit a32(.an(a[31]), .bn(b[31]), .cn(c[31]), .cin(cout31), .s_n_1(s_back_32), .cout(cout)); endmodule