半加器、全加器是组合电路中的基本元器件,也是CPU中处理加法运算的核心,理解、掌握并熟练应用是硬件课程的最基本要求。本文简单介绍半加器、全加器,重点对如何构造高效率的加法器进行分析。
半加器和全加器
所谓半加器,是指对两位二进制数实施加法操作的元器件。其真值表、电路图和逻辑符号分别如下图所示:
根据真值表,其输入输出之间的对应关系为:
S = A!B + !AB (!号表示逻辑非)
C = AB
从半加器的真值表、电路图可以看出,半加器只能对单个二进制数进行加法操作,只有两个输入,无法接受低位的进位,因此称为半加器。
对此,全加器则解决了这个问题,全加器有三个输入(包括来自低位的进位),两个输出,其对应的真值表、电路图和逻辑符号如下所示:
加法器的构造
有了全加器,构造加法器就非常容易了,假设有A3A2A1A0和B3B2B1B0,利用全加器构造A3A2A1A0+B3B2B1B0的串行进位加法器电路图如下图所示:
图中的C-1=0,因为已是最低位,没有进位。这种串联方法只是完成了基本功能,从效率上则完全不可行。
分析:假设全加器中每个元器件的时延为t,则全加器的时延为2t(见全加器电路图),对于4位加法器,按照这种串联方法,加法器构造方法1中图中最右边(最低位)全加器计算完成后,才能计算右二个全加器,以此类推。因此,4位加法器至少需要4*2t=8t的时延;如果是32位,则是64t的时延。显然,这种加法器的效率与参与计算的二进数长度成正比,数越长,时延越长。在现代计算机中,是不可能采用如此低效的加法器的。
那如何做呢?其实方法挺简单的,只需要把Ci和参与运算的两个4位二进制数之间的关系梳理清楚就行了。直接用代入法展开得:
设Gi= AiBi, Pi = !AiBi + Ai!Bi
C0 = Cin
C1=G0 + P0·C0
C2=G1 + P1·C1 = G1 + P1·G0 + P1·P0 ·C0
C3=G2 + P2·C2 = G2 + P2·G1 + P2·P1·G0 + ·P1·P0·C0
C4=G3 + P3·C3 = G3 + P3·G2 + P3·P2·G1 + P3·P2·P1·G0 + P3·P2·P1·P0·C0
Cout=C4
在这个关系式里,直接列出了4位二进制加法的最终进位,不用等待低位计算完了,再计算高位,而是直接进行计算,最终得到的超前进位加法器电路图如下所示:
假设超前进位加法器中的每个门时延是t,对于4位加法,最多经过4t的时延,而且,即使增加更多的位数,其时延也是4t。
对比串行进位加法器和超前进位加法器,前者线路简单,时延与参与计算的二进制串长度成正比,而后者则是线路复杂,时延是固定值。通常,对于32的二进制串,可以对其进行分组,每8位一组,组内加法用超前进位加法器,组间进位则用串行进位。采用这种折中方法,既保证了效率,又降低了内部线路复杂度。