📄 carry_skip_adder.v
字号:
// 二进制跳跃进位加法器
module carry_skip_adder(x_in, y_in, c_in, sum, c_out);
parameter DSIZE = 12;
parameter S = 4;
input c_in;
input [DSIZE-1:0] x_in, y_in;
output [DSIZE-1:0] sum;
reg [DSIZE-1:0] sum;
output c_out;
reg c_out;
integer i, j;
reg [DSIZE:0] q;
always @(x_in or y_in or c_in)begin
q[0] = c_in;
begin
carry_skip_add_cell(x_in[S-1:0], y_in[S-1:0],
q[0], q[S:1]);
for(j=0; j<=S-1; j=j+1)
sum[j] = x_in[j] ^ y_in[j] ^ q[j];
carry_skip_add_cell(x_in[2*S-1:S], y_in[2*S-1:S],
q[S], q[2*S:S+1]);
for(j=0; j<=S-1; j=j+1)
sum[S+j] = x_in[S+j] ^ y_in[S+j] ^ q[S+j];
carry_skip_add_cell(x_in[3*S-1:2*S], y_in[3*S-1:2*S],
q[2*S], q[3*S:2*S+1]);
for(j=0; j<=S-1; j=j+1)
sum[2*S+j] = x_in[2*S+j] ^ y_in[2*S+j] ^ q[2*S+j];
end
c_out = q[DSIZE];
end
// S比特分组进位链
task carry_skip_add_cell;
input [S-1:0] x, y;
input cin;
output [S:1] cout;
reg q[S:0], p[S-1:0], g[S-1:0], accumulator, generalized_p;
integer i;
begin
q[0] = cin;
for(i=0; i<=S-1; i=i+1)begin
p[i] = x[i]^y[i];
g[i] = y[i];
q[i+1] = (p[i])?q[i]:g[i];
end
accumulator = p[0];
for(i=1; i<=S-1; i=i+1)
accumulator = accumulator & p[i];
generalized_p = accumulator;
cout[S] = (generalized_p) ? c_in : q[S];
for(i=1; i<=S-1; i=i+1)
cout[i] = q[i];
end
endtask
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -