//1.半加器
module top_module(
input a, b,
output cout, sum );
assign {cout,sum} = a + b;
endmodule
//2.全加器
module top_module(
input a, b, cin,
output cout, sum );
assign {cout,sum} = a + b + cin;
endmodule
//3.3bit的全加器
module top_module(
input [2:0] a, b,
input cin,
output [2:0] cout,
output [2:0] sum );
assign {cout[0],sum[0]} = a[0] + b[0] + cin;
assign {cout[1],sum[1]} = a[1] + b[1] + cout[0];
assign {cout[2],sum[2]} = a[2] + b[2] + cout[1];
endmodule
//4.加法器
module top_module (
input [3:0] x,
input [3:0] y,
output [4:0] sum);
assign sum = x + y;
endmodule
//5.原理是如果两个数都为负数,那个相加一定为负数,但是最终s的最高位不是1,那就证明溢出了,两个数都是正数同理。
module top_module (
input [7:0] a,
input [7:0] b,
output [7:0] s,
output overflow
); //
assign s = a + b;
assign overflow = a[7] & b[7] & ~s[7] | ~a[7] & ~b[7] & s[7];
endmodule
//6.
module top_module(
input [99:0] a, b,
input cin,
output cout,
output [99:0] sum );
assign {cout,sum} = a + b + cin;
endmodule
//7.
module top_module(
input [15:0] a, b,
input cin,
output cout,
output [15:0] sum );
wire[2:0] cout_1;
bcd_fadd u1_bcd_fadd(
.a (a[3:0] ),
.b (b[3:0] ),
.cin (cin ),
.cout (cout_1[0] ),
.sum (sum[3:0] )
);
bcd_fadd u2_bcd_fadd(
.a (a[7:4] ),
.b (b[7:4] ),
.cin (cout_1[0] ),
.cout (cout_1[1] ),
.sum (sum[7:4] )
);
bcd_fadd u3_bcd_fadd(
.a (a[11:8] ),
.b (b[11:8] ),
.cin (cout_1[1] ),
.cout (cout_1[2] ),
.sum (sum[11:8] )
);
bcd_fadd u4_bcd_fadd(
.a (a[15:12] ),
.b (b[15:12] ),
.cin (cout_1[2] ),
.cout (cout ),
.sum (sum[15:12] )
);
endmodule