Adder

module top_module (
    input [3:0] x,
    input [3:0] y, 
    output [4:0] sum);
    wire c1;
    wire c2;
    wire c3;
    wire c4;
    // 第一个全加器
    full_adder fa0 (
        .a(x[0]),
        .b(y[0]),
        .cin(),
        .sum(sum[0]),
        .cout(c1)
    );
    // 第2个全加器
    full_adder fa1 (
        .a(x[1]),
        .b(y[1]),
        .cin(c1),
        .sum(sum[1]),
        .cout(c2)
    );
    // 第3个全加器
    full_adder fa2 (
        .a(x[2]),
        .b(y[2]),
        .cin(c2),
        .sum(sum[2]),
        .cout(c3)
    );
    // 第4个全加器
    full_adder fa3 (
        .a(x[3]),
        .b(y[3]),
        .cin(c3),
        .sum(sum[3]),
        .cout(c4)
    );
    assign sum[4] = c4;
endmodule
module full_adder (
    input a,       // 输入A
    input b,       // 输入B
    input cin,     // 进位输入Cin
    output sum,    // 和数输出
    output cout   // 进位输出
);

    // 和数 = A XOR B XOR Cin
    assign sum = a ^ b ^ cin;

    // 进位 = (A AND B) OR (A AND Cin) OR (B AND Cin)
    assign cout = (a & b) | (a & cin) | (b & cin);

endmodule