module adder_32bit(
    input [32:1] A,
    input [32:1] B,
    output [32:1] S,
    output C32
);

    wire C16; // Carry out from the lower 16-bit CLA block

    // Instantiate two 16-bit CLA blocks
    cla_16bit cla_lower(
        .A(A[16:1]),
        .B(B[16:1]),
        .cin(1'b0), // no carry-in for the least significant block
        .S(S[16:1]),
        .cout(C16)
    );

    cla_16bit cla_upper(
        .A(A[32:17]),
        .B(B[32:17]),
        .cin(C16), // carry-in is the carry-out from the lower 16-bit block
        .S(S[32:17]),
        .cout(C32)
    );

endmodule