一、背景知识
一般在做较多数字的加减法操作的时候我们会选择将这些操作数进行 压缩,即找到2个数使它们的和等效成原先的那组数。一般多组数据要通过华莱士树进行压缩,而华莱士树是由一系列的压缩器构成的。
二、压缩器
正如上文所述,压缩器构成了华莱士树。而目前比较流行的压缩器有4-2压缩器和3-2压缩器,4-2压缩器的功能就是将4个操作数输入进元件而变成和等效的2个数字。3-2压缩器同理,不过其输入只有三个操作数。我们可以知道4-2压缩器的效率是优于3-2压缩器的,但是4-2压缩器的内部的逻辑结构就会更加的复杂繁琐,这也是用面积换取性能的一种方式。
(1) 3-2压缩器
我们先由浅入深的了解下3-2压缩器。学过数字电路的同学肯定了解过全加器,其实3-2压缩器就是一个全加器,或者说是一个保存进位加法器(csa)。
1) 3-2压缩器的结构图如下:
2)3-2压缩器的逻辑表达式如下所示:
C
1
=
a
0
a
1
+
a
2
(
a
0
+
a
1
)
C_1 = a_0 a_1 + a_2(a_0 + a_1)
C1=a0a1+a2(a0+a1)
S
0
=
a
0
⊕
a
1
⊕
a
2
S_0 = a_0 \oplus a_1 \oplus a_2
S0=a0⊕a1⊕a2
我想认真看表达式的话就会发现这就是全加器的逻辑表达式。因此我们知道
C
1
C_1
C1是进位,而
S
0
S_0
S0则是两数之和,因此就会有如下的等式成立:
2
C
1
+
S
0
=
a
0
+
a
1
+
a
2
2C_1 + S_0 = a_0 + a_1 + a_2
2C1+S0=a0+a1+a2
所以我们经过3-2压缩器之后就实现了把三个操作数压缩成两个操作数的功能。
(2)4-2压缩器
给定四个输入,经过4-2压缩器之后就可以得到和等效的2个输出。这就是4-2压缩器所实现的功能。
1)结构图
2)两种实现
第一种实现方式是利用全加器FA来实现的,其结构图如下:
这里是用两个FA串联构成的,这种4-2压缩器有一个缺点就是它的进位信号产生要经过4个异或门的延迟(参看全加器的结构),当我们部署4-2压缩器的时候就会使电路的时序延长,造成不必要的性能损失,因此不推荐使用。
第二种实现方式的结构图如下:
改进型的4-2压缩器产生进位信号只需要3个异或门的时延,这缩短了结果产生的时间,我认为是一种好的设计。
(3)举例
这里为了防止读者听不懂,我举一个2bit的例子帮助大家理解。
a
1
=
01
a
2
=
00
a
3
=
10
a
4
=
01
E
0
=
0
a_1 = 01 \\ a_2 = 00 \\ a_3 =10 \\ a_4 = 01\\E_0 = 0
a1=01a2=00a3=10a4=01E0=0
首先我们需要2个4-2压缩器来处理这个数据,令低位进入第一个4-2压缩器,通过改进的4-2压缩器(如上图)求结果:
s
u
m
0
=
0
c
a
r
r
y
0
=
1
E
1
=
0
sum_0 = 0 \\ carry_0 = 1 \\ E_1 = 0
sum0=0carry0=1E1=0
s
u
m
1
=
1
c
a
r
r
y
1
=
1
E
2
=
0
sum_1 = 1 \\ carry_1 = 1 \\ E_2 = 0
sum1=1carry1=1E2=0
现在对这些输出进行组合,就得到了最终的结果即:
a
0
+
a
1
+
a
2
+
a
3
+
E
0
=
10
B
+
10
B
a_0 + a_1 + a_2 + a_3 + E_0 = 10B + 10B
a0+a1+a2+a3+E0=10B+10B
三、华莱士树(Wallace Tree)
结构如下
这里实现的是上一节中的例子。