1. Hadd(Half adder)
module top_module(
input a, b,
output cout, sum
);
assign sum = a^b;
assign cout = a&b;
endmodule
2. Fadd(Full adder)
module top_module(
input a, b, cin,
output cout, sum
);
assign sum = a^b^cin;
assign cout = a&b | a&cin | b&cin;
endmodule
3. Adder3(3-bit binary adder)
(1)方法1:
module top_module (
input [2:0] a, b,
input cin,
output [2:0] cout,
output [2:0] sum
);
genvar i;
generate
for (i=0; i<3; i++) begin: adder
if (i==0)
assign {cout[0], sum[0]} = a[0]+b[0]+cin;
else
assign {cout[i], sum[i]} = a[i]+b[i]+cout[i-1];
end
endgenerate
endmodule
(2)方法2:
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. Exams/m2014 q4j(Adder)
(1)方法1:
module top_module (
input [3:0] x,
input [3:0] y,
output [4:0] sum
);
wire [2:0] c;
genvar i;
generate
for (i=0; i<4; i++) begin: adder
if (i==0)
assign {c[0], sum[0]} = x[0]+y[0];
else if (i==3)
assign {sum[4], sum[3]} = x[3]+y[3]+c[2];
else
assign {c[i], sum[i]} = x[i]+y[i]+c[i-1];
end
endgenerate
endmodule
(2)方法2:
module top_module (
input [3:0] x,
input [3:0] y,
output [4:0] sum
);
assign sum = x+y;
endmodule
5. Exams/ece241 2014 q1c(Signed addition overflow)
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. Adder100(100-bit binary adder)
module top_module(
input [99:0] a, b,
input cin,
output cout,
output [99:0] sum
);
assign {cout, sum} = a+b+cin;
endmodule
7. Bcdadd4(4-digit BCD adder)
(1)方法1:
module top_module (
input [15:0] a, b,
input cin,
output cout,
output [15:0] sum
);
wire [2:0] c;
genvar i;
generate
for (i=0; i<4; i++) begin: bcd
if (i==0)
bcd_fadd bcd_fadd_inst ( a[3:0], b[3:0], cin, c[0], sum[3:0] );
else if (i==3)
bcd_fadd bcd_fadd_inst ( a[15:12], b[15:12], c[2], cout, sum[15:12] );
else
bcd_fadd bcd_fadd_inst ( a[4*i+3:4*i], b[4*i+3:4*i], c[i-1], c[i], sum[4*i+3:4*i] );
end
endgenerate
endmodule
(2)方法2:
module top_module (
input [15:0] a, b,
input cin,
output cout,
output [15:0] sum
);
wire [2:0] c;
bcd_fadd bcd_fadd_inst1 ( a[3:0], b[3:0], cin, c[0], sum[3:0] );
bcd_fadd bcd_fadd_inst2 ( a[7:4], b[7:4], c[0], c[1], sum[7:4] );
bcd_fadd bcd_fadd_inst3 ( a[11:8], b[11:8], c[1], c[2], sum[11:8] );
bcd_fadd bcd_fadd_inst4 ( a[15:12], b[15:12], c[2], cout, sum[15:12] );
endmodule