module adder_32bit(
    input [32:1] A,   // 32-bit input operand A
    input [32:1] B,   // 32-bit input operand B
    output [32:1] S,  // 32-bit output sum
    output C32        // Carry-out output
);

    wire C16; // Intermediate carry between lower and upper CLA blocks

    // Instantiate the lower 16-bit CLA block
    cla_16bit cla_lower(
        .A(A[16:1]),
        .B(B[16:1]),
        .Cin(1'b0), // Assuming there is no initial carry-in
        .S(S[16:1]),
        .Cout(C16)
    );

    // Instantiate the upper 16-bit CLA block
    cla_16bit cla_upper(
        .A(A[32:17]),
        .B(B[32:17]),
        .Cin(C16),
        .S(S[32:17]),
        .Cout(C32)
    );

endmodule