定点数的运算——串行进位加法器和并行进位加法器

将各种数据用各种特定规则表示后,接下来我们使用算术逻辑部件(ALU)来完成基本的逻辑运算定点数加减运算

各类定点乘除运算和浮点数运算可利用加法器、ALU或移位器来实现。

它们是基本的运算部件,而ALU的核心是加法器

今天我们来学习加法器的实现。

串行进位加法器

全加器。


1.全加器的基本组成


全加器的基本结构

全加器有三个输入和两个输出,其中输入:X、Y是两个数二进制相同位上的两个数字,Ci-1是上一位的进位;输出:Si是本位的结果,Ci是向高位的进位。

2.全加器的输出表达式

对于Si和Ci的逻辑表达式如下:

S_{i} = X_{i}\oplus Y_{i}\oplus C_{i-1}

C_{i} = X_{i}C_{i-1}+Y_{i}C_{i-1}+X_{i}Y_{i}

\oplus 表示异或。+表示或,乘法表示并。

3.全加器的延迟时间判断

全加器的异或、或、并操作都是通过电路门来实现的。

其中或、与门较简单,异或门较复杂,或、并操作只有一级门延迟,异或操作有三级门延迟

对于S_{i}C_{i}的表达式来说,在一个全加器单位上,生成一个S需要6级门延迟,生成一个C需要2级门延迟。


生成Si需要6级门延迟



生成Ci需要2级门延迟

串行进位加法器缺点在于速度慢,想要计算出每一位的S需要等待进位Ci一位位传递,高位计算下会造成非常大的延迟。

对于n个基本单位组成的加法器,假设第一个单位输入进位为C_{0}(为0,在之后减法或者加负数时,会通过设置其为1来与数的取反相加得到其补码负数),则生成S_{i}C_{i}的门延迟公式为:

S_{i}=2i+1(i>2)

C_{i}=2i

我们需要注意,所有位的X_{i}和Y{i}都是第一时间输入并进行同时进行或、并或者异或操作的,所以除了第一二位生成进位C的速度稍快,其余位都是在等待C_{i-1}的就绪。

对于C_{i}是容易理解的,进位需要加法器一位位传递,输入上一位的进位,照公式进行逻辑运算,每生成一个进位就有两级门延迟。

对于S_{i},第一位时,X_{i}、Y_{i}、C_{0}都是同时输入,6级门延迟生成S_{1};第二位时,2级门延迟时就已经得到了C_{1},而X_{1}和Y_{1}在三个门延迟时才异或完成,依然是6级门延迟时生成S_{2};到第三位时,C_{2}进位传进来时已经经过了4级门延迟,之后所有的X、Y已经异或完毕,所以只需再等待进位输入之后的异或操作,即:S_{i}=2(i-1)+3=2i+1

要生成所有的进位C与本位数字S,这种串行的加法器太过耗时,于是我们有了并行进位加法器。

并行进位加法器

全先行进位加法器

并行进位加法器的原理在于,当相加的两位数字X、Y都为1时,可直接得出,必定有进位生成;当只有一个为1时,低位进位必定传递到高位进位;我们相应地设置两个函数:

G_{i}=X_{i}Y_{i};

P_{i}=X_{i}+Y_{i}

前一个被称为,进位生成函数;后一个被称为进位传递函数。

我们依靠这两个函数,替换原本进位计算公式中的X_i和Y_i,就可以同时计算每一位的进位,不必等待低位的进位输入。如:

C_{1}=G_{1}+P_{1}C_0

C_2=G_2+P_2 G_1+P_2 P_1 C_0

……

我们可以轻易得出,每一位的进位计算都只有与和或操作,那么计算所有的进位就只需要两级门延迟。

所有的P_i和G_i可以同时计算,计算出所有的进位函数只需要1级门延迟。

计算所有的进位的同时,经过了1+2=3级门延迟,这个时间正好可以计算出X_i和Y_i的异或。



然后,通过本位S_i的计算公式,我们再将其与计算出来的进位异或,计算出本位,在经过3级门延迟。

那么我们计算出所有的本位数字,理论上只需要1+2+3=6级门延迟。

计算更多位数的全先行进位加法器就需要更多的输入端,但是理论上来说,总体时间依然不变。




        并行进位加法器计算起来很精妙,但是位数如果多起来,全用并行进位加法器就显得不太现实,输入端会非常多。所以也可采用并行进位和串行进位加法器交叉使用的方法。

        如,对于16位的加法器,可将其分为四组,在组内使用并行进位,在组间使用串行进位。为了进一步提高运行速度,也可在组间也使用并行进位的方法。


        由于并行进位加法器的性质,其延迟与位数没有关系,所以计算机内部大多采用两级或多级并行进位加法器。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容