计算机组成原理03:定点数加减运算

经过逻辑电路的设计,我们得到了全加器,经过不同全加器的设置我们可以开展定点数的加减运算,然后根据加减运算可以设计乘除运算乃至浮点数运算。因此,定点数加减运算的ALU设计学习非常重要。

目录

定点数加法运算

定点数加法器设计

定点数减法运算

定点数减法器设计

阵列加减法,串行和并行运算

溢出的处理

总结


定点数加法运算

定点数补码加法满足以下公式:

[X]_{c}+[Y]_c = [X+Y]_c

下面展示了一个定点数加法的例子:

设X = +10010, Y=-10101, 求X+Y

解:使用补码运算
    [X] = 010010 ,[Y] = 101011
得到
[X]+[Y] = 111101,求补得到:
X+Y = -00011

定点数加法器设计

根据定点数补码加法可以基于全加器设计加法器:

上面是4位加法器的示意图。可以看到它是由4个全加器串接在一起的。其中Si指示了得数的各位数值,C3则指示是否溢出

定点数减法运算

定点数补码减法满足以下公式:

[X-Y]_c = [X]_c +[-Y]_c

那么,根据这种方法,我们就可以根据和加法器相同的框架计算减法。但是有一个问题:怎么得出[-Y]_c呢?

求解-Y的补码规则如下:

从右向左:遇到第一个1以前直接输出,遇到1以后按位取反输出。注意:第一个1是不取反的。

设Y = -10100,求-Y的补码。

解:[Y] = 101100
[-Y] =    010100 

上述计算表明,-Y = +10100
事实确实如此。

下面是一个定点数减法的例子:

设X=+10101,Y = -00010,求X-Y

解:[X] = 010101,[Y] = 111110
[-Y] = 000010
[X]+[-Y] = 010111

求补得到:
X-Y = +10111

定点数减法器设计

根据定点数补码减法可以基于加法器设计减法器:

其中A的各位输入不变,但是B的输入相比加法器有变化,因为要转化成对应的-Y。注意右下角的原件。当遇见第一个1以前,右下角原件的值为0,即Y各位按原来的值输入;遇见第一个1之后,右下角原件的值为1,即Y的各位取反输入。

阵列加减法,串行和并行运算

根据上面的结构我们知道,一个ALU是由全加器串接组成的。那么我们可以用相同的方法实现阵列加法。

例如,假设我们要计算一个32位的加法,我们就可以使用4个8位加法器串接组成。这种结构叫做串行结构。

但是串行结构有一个缺点:后面的FA的运算必须等待前一个FA运算完才能执行。这个方法在数据量较大的时候效率会显得很低。因此我们可以采用另外一种方法:并行进位。

根据上图可以得到:一个ALU的进位位可以直接由上一个ALU的进位和AB输入决定。也就是:

C_3 = G +PC_{-1}

因此就不需要等待多个FA进行计算产生进位,可以首先直接产生该ALU的进位到下一个ALU,这种直接产生进位的加法器就叫并行加法器。但是,在ALU之间,下一个ALU依然需要等待该ALU计算完才能计算。

我们可以进一步,将一个ALU视为一个单元,用每个ALU的G替代dP替代t,我们就可以在ALU之间也形成并行:

C_{15} = G^* + P^*C_{-1}

溢出的处理

对于溢出的处理,加法和减法的处理方法不同,需要在进位位设置判断。

  • 对于加法来说,有两种情况:负数下溢和正数上溢。根据真值表判断,输入位和输出位异或的结果即为是否溢出。
  • 对于减法来说,可以采用双符号位(正数00,负数11进行判断。若计算结果为01,表示发生了上溢,若计算结果为10,表示发生了下溢。

总结

定点数的加减法是乘除法的基础,而定点数减法又基于定点数加法器。其中,加法器基于一位的全加器组成。这种串接的结构在计算中有两种的计算方式:串行计算和并行计算。其中,并行计算效率更高,但是电路相对复杂。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值