在上一篇博文中介绍的【加法器】,是仿照人类计算的步骤来设计的。
如果需要把两个四位二进制数相加起来,其算法以及电路示意图如下:
做加法,大家都会的,就是由低位到高位,逐位的相加。
对于二进制数,就要按照逢二进一的规则,把进位加到高位中。
按照这个做法,就需要把四个全加器级联起来,如上图所示。
所谓的级联,就是:把低位的进位输出端,用导线连接到高位的进位输入端。
上图中的橙色数字,就是每一位相加后,产生出来的进位。
按此思路设计的 N 位加法器,各个进位,就是由低到高,逐位产生出来,再加入到高位中。
由于要一位一位的计算,所以,该加法器的工作速度,是比较慢的了。
而且,加法器的位数越多,它计算的,就越慢。这个事,不需要证明吧?
这种电路形式,称为【常规进位、递进进位】,都是很切题的。
但是,如果称之为 “行波进位”,明显就是有点跑题了。
怎样才能提高加法器的速度呢?
可以从全加器输出与输入的逻辑关系来分析。
右边第一个全加器输出端的逻辑表达式是:
S1 = A1 ⊕ B1 ⊕ C0;
C1 = A1B1 + A1C0 + B1C0 --三人表决中的最简与或式
= A1B1 + (A1 + B1) C0。
右边第二个全加器输出端的逻辑表达式是:
S2 = A2 ⊕ B2 ⊕ C1
= A2 ⊕ B2 ⊕ (A1B1 + (A1 + B1) C0);
C2 = A2B2 + A2C1 + B2C1 --三人表决中的最简与或式
= A2B2 + (A2 + B2) C1。
= A2B2 + (A2 + B2) (A1B1 + (A1 + B1) C0)。
由此可知,S2、C2 都可由输入信号 A2A1、B2B1、C0 直接计算出来!
不用先计算出 C1,再拿 C1 来计算 S2、C2 了。
用这种方法,就可以同时计算 C1S1 和 C2S2,以及其余更高的位。
那么,各个位的运算结果,就可以同步输出,而不是逐位计算逐位输出。
为了简化逻辑表达式,可令:
Gi = Ai Bi、 Pi = Ai + Bi。
因此有:
C1 = G1 + P1 C0。
C2 = G2 + P2 C1
= G2 + P2 ( G1 + P1 C0 )
= G2 + P2 G1 + P2 P1 C0。
C2 的逻辑电路图如下。
C3 = G3 + P3 C2
= G3 + P3 ( G2 + P2 G1 + P2 P1 C0 )
= G3 + P3 G2 + P3 P2 G1 + P3 P2 P1 C0。
C3 的逻辑图如下。
C4 = G4 + P4 C3
= G4 + P4 ( G3 + P3 G2 + P3 P2 G1 + P3 P2 P1 C0 )
= G4 + P4 G3 + P4 P3 P2 G2 + P4 P3 P2 G1 + P4 P3 P2 P1 C0。
C4 的逻辑图如下。
(在上面几个图中,与门、或门所用的逻辑符号,有点与众不同哈)
按照这种思路设计的 N 位加法器,其各个位的运算结果,就是【同步输出】的。
运算所用的时间,都是三级逻辑门的延迟时间,与加法器的位数 N 并无关系。
那么,把这种加法器,命名为【同步加法器】就是很切题的。
计算机专业把这种电路称为 “超前进位”加法器,真是不可理喻!
是超谁的前? 是比 “常规进位” 超前吧?
明明是给本电路命名,为什么要拉扯上以前的电路?
————————————————
另外,在本电路中有:Pi = Ai + Bi。
但是,有些《计算机》教材写的,却是 Pi = Ai ⊕ Bi,这明显是错误的。
在 Ci 的表达式中,它们两者的逻辑功能,可说是相同的。
但是,它们的工作速度,却能相差两到三倍!
在电路中,Pi 和 Gi 是并列在一起的,如果用异或算法产生 Pi,就会比 Gi 晚很多了。
那么,电路中的信号,就会出现明显的 “毛刺”!
这在《数字电路》设计中,是最忌讳的事。
由此可知,计算机专家所说的,只是纸上谈兵而已。
本文所给出的电路,才是可以实用的。
本文完