Adder subtractor

module top_module(
    input [31:0] a,
    input [31:0] b,
    input sub,
    output [31:0] sum
);
    wire [31:0] sub_1;
    wire cout_1;
    wire [15:0]sum_1;
    wire [15:0]sum_2;

    assign sub_1 = b^{32{sub}};
    add16 add16_inst1(
        .a(a[15:0]),
        .b(sub_1[15:0]),
        .cin(sub),
        .cout(cout_1),
        .sum(sum_1)
    );
    add16 add16_inst2(
        .a(a[31:16]),
        .b(sub_1[31:16]),
        .cin(cout_1),
        .cout(),
        .sum(sum_2)
    );
    assign sum = {sum_2,sum_1};
endmodule