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