将各种数据用各种特定规则表示后,接下来我们使用算术逻辑部件(ALU)来完成基本的逻辑运算和定点数加减运算。
各类定点乘除运算和浮点数运算可利用加法器、ALU或移位器来实现。
它们是基本的运算部件,而ALU的核心是加法器。
今天我们来学习加法器的实现。
串行进位加法器
即全加器。
1.全加器的基本组成
全加器有三个输入和两个输出,其中输入:X、Y是两个数二进制相同位上的两个数字,Ci-1是上一位的进位;输出:Si是本位的结果,Ci是向高位的进位。
2.全加器的输出表达式
对于Si和Ci的逻辑表达式如下:
表示异或。
表示或,乘法表示并。
3.全加器的延迟时间判断
全加器的异或、或、并操作都是通过电路门来实现的。
其中或、与门较简单,异或门较复杂,或、并操作只有一级门延迟,异或操作有三级门延迟。
对于和
的表达式来说,在一个全加器单位上,生成一个
需要6级门延迟,生成一个
需要2级门延迟。
串行进位加法器缺点在于速度慢,想要计算出每一位的S需要等待进位Ci一位位传递,高位计算下会造成非常大的延迟。
对于n个基本单位组成的加法器,假设第一个单位输入进位为(为0,在之后减法或者加负数时,会通过设置其为1来与数的取反相加得到其补码负数),则生成
和
的门延迟公式为:
我们需要注意,所有位的都是第一时间输入并进行同时进行或、并或者异或操作的,所以除了第一二位生成进位C的速度稍快,其余位都是在等待
的就绪。
对于是容易理解的,进位需要加法器一位位传递,输入上一位的进位,照公式进行逻辑运算,每生成一个进位就有两级门延迟。
对于,第一位时,
都是同时输入,6级门延迟生成
;第二位时,2级门延迟时就已经得到了
,而
在三个门延迟时才异或完成,依然是6级门延迟时生成
;到第三位时,
进位传进来时已经经过了4级门延迟,之后所有的
已经异或完毕,所以只需再等待进位输入之后的异或操作,即:
。
要生成所有的进位C与本位数字S,这种串行的加法器太过耗时,于是我们有了并行进位加法器。
并行进位加法器
即全先行进位加法器。
并行进位加法器的原理在于,当相加的两位数字都为1时,可直接得出,必定有进位生成;当只有一个为1时,低位进位必定传递到高位进位;我们相应地设置两个函数:
;
。
前一个被称为,进位生成函数;后一个被称为进位传递函数。
我们依靠这两个函数,替换原本进位计算公式中的,就可以同时计算每一位的进位,不必等待低位的进位输入。如:
我们可以轻易得出,每一位的进位计算都只有与和或操作,那么计算所有的进位就只需要两级门延迟。
所有的可以同时计算,计算出所有的进位函数只需要1级门延迟。
计算所有的进位的同时,经过了级门延迟,这个时间正好可以计算出
的异或。
然后,通过本位的计算公式,我们再将其与计算出来的进位异或,计算出本位,在经过
级门延迟。
那么我们计算出所有的本位数字,理论上只需要级门延迟。
计算更多位数的全先行进位加法器就需要更多的输入端,但是理论上来说,总体时间依然不变。
并行进位加法器计算起来很精妙,但是位数如果多起来,全用并行进位加法器就显得不太现实,输入端会非常多。所以也可采用并行进位和串行进位加法器交叉使用的方法。
如,对于16位的加法器,可将其分为四组,在组内使用并行进位,在组间使用串行进位。为了进一步提高运行速度,也可在组间也使用并行进位的方法。
由于并行进位加法器的性质,其延迟与位数没有关系,所以计算机内部大多采用两级或多级并行进位加法器。