//
进位链加法器
modulecarry_chain_adder(x, y, cin, sum, cout);
parameterN = 16;
//N-bits
input
cin;
input
[N-1:0]
x, y;
output [N-1:0] sum;
output
cout;
reg
cout, q[N:0], p[N-1:0], g[N-1:0];
reg [N-1:0]
sum;
always @(x or y or cin)begin
//:ADDER
integeri;
q[0] = cin;
for(i=0; i<N; i=i+1)begin
p[i] = x[i]^y[i];
g[i] = y[i];
q[i+1] = (p[i])?q[i]:g[i];
sum[i] = p[i]^q[i];
end
cout = q[N];
end
endmodule
//
(并行)二进制行波进位加法器
module ripple_carry_adder(x, y, cin, sum, cout);
parameterN = 16;
input
cin;
input
[N-1:0]
x, y;
output [N-1:0] sum;
output
cout;
reg
cout;
reg [N-1:0]
sum;
reg
q[N:0];
always @(x or y or cin)begin
//:ADDER
integeri;
q[0] = cin;
for(i=0; i<=N-1; i=i+1)begin
q[i+1] = (x[i]&y[i]) | (x[i]&q[i]) | (y[i]&q[i]);
sum[i] = x[i] ^ y[i] ^ q[i];
end
cout = q[N];
end
endmodule
//
二进制跳跃进位加法器(超级进位)
modulecarry_skip_adder(x_in, y_in, c_in, sum, c_out);
parameterN = 16;
parameterS = 4;
input
c_in;
input
[N-1:0]
x_in, y_in;
output [N-1:0] sum;
reg
[N-1:0] sum;
output
c_out;