行波进位加法器和超前进位加法器

介绍

在运算中,加法的效率和占用的资源一直是比较重要的因素,所有这篇博文将重点介绍RCA(行波进位加法器)和CLA(超前进位加法器)各自的优缺点。

RCA介绍

RCA作为一个比较直接得出的加法器,效率相比CLA稍低,但是占用的资源要少很多。

上图是RCA的组成图。
每一位的计算都需要上一个全加器的Cout信号,所有信号的最长延长为2个门延迟4+1为9的延迟。如果计算的位数上升的话,需要2n+1的延迟。

但是每个全加器只需要5个门的资源。

CLA介绍

CLA作为一个速度优化的加法器,对于多位加法计算效率有显著提高,但是排线和资源占用的比较多。

上图是CLA的组成图。
这里的Cin计算取决于前面全加器就算得到的P和G的值,可以通过并行计算,最后通过OR门进行汇总。除了第一位的Cin延迟为2,其他的Cin延迟为3.那最长的延迟为Cin3 + 1 = 4。因为S = A[3] ^ B[3] ^ Cin[3]。

如果CLA的输入信号数量有限制的话,延迟和复杂度都会提升。

如上图所示,如果输入限制四个的话,一个16进制的加法器就需要两层的P/G综合才能实现CLA的加法,这样以来加法器的延迟与电路复杂度也会变糟。

代码

以下是本人写的CLA的加法器。

CLA模块代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
module FA_Seq(
input logic unsigned [5:0] A,
input logic unsigned [5:0] B,
output logic [6:0] Sum,
output logic Cout
);

reg [5:0] P;
reg [5:0] G;
reg [5:0] C;
integer i;
always_comb begin
P = A ^ B; //p flag XOR门
G = A & B; //g flag
end

always_comb begin
C[0] = G[0] | (P[0] & 1'b0);
for (i = 0;i < 5;i = i + 1) begin
C[i+1] = G[i+1] | (C[i] & P[i+1]);
end
Sum = (A ^ B) ^ {C[4:0],1'b0};
Sum[6] = C[5];
end
assign Cout = C[5];
endmodule

因为RCA加法器较为简单所以就不写了。

CLA测试代码

然后用不规范的例子简单的做了测试,应该没有问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
module tb_FA_Seq;
`timescale 1 ns / 1 ns

parameter PERIOD = 10;
int testcase = 0;
logic [3:0] array1 ;
logic a,b,c;
logic CLK = 0;
reg [7:0] aa;
reg [6:0] bb;
reg [5:0] cc;
reg [5:0] A,B;
reg [6:0] Sum;
reg Cout;
FA_Seq PROG (A, B, Sum, Cout);
always #(PERIOD /2) CLK ++;
initial
begin
//initalidalization
A = '0;
B = '0;
//Cin = '0;
Sum = '0;
Cout = '0;

//case 1
@(posedge CLK)
testcase ++;
A = '1;
B = '0;
//Cin = 0;

//case 2
@(posedge CLK)
testcase ++;
A = '0;
B = '1;
//Cin = 0;

//case 3
@(posedge CLK)
testcase ++;
A = '1;
B = '1;
//case 4;
@(posedge CLK)
A = 6'd12;
B = 6'd23;
//case 5;
@(posedge CLK)
A = 6'd3;
B = 6'd8;
//case 6;
@(posedge CLK)
A = 6'd4;
B = 6'd6;
@(posedge CLK)
$stop;
end

endmodule

Waveform

waveform如下图所示

以上是CLA和RCA加法器的介绍