|||
1.6. 加减法运算器设计
机器能够代替我们进行运算是其最神奇的部分之一,下面我们就来设计加减法运算器。
我们知道用限位数,可以将减法变成加法计算,方法是将减数用它对应的对称码代替,然后与被减数做加法即可。还知道:一个限位数的对称码等于其反码加一。为此,我们可以将全加器改造成既能够做加法,又能够做减法的一位加减运算器件。
1.6.1. 设计加减运算单元
我们先从最简单的一位数加减法考虑,我们称之为加减单元。它的设计如图1-19所示。
图1-19 加减单元电路设计
我们在全加器的B端连接一个异或门,一个输入端仍然用B来记,另一个输入端我们用J来记。在原理图设计中,要对输入输出线加上双箭头表示的引脚。写着input的是输入引脚,写着output的是输出引脚。引脚上标注的名称就是连接导线的名称。
输入端增加的J线是加减法运算控制端。当J=1时,连接B、J端的异或门的输出值就是B的反码。这一点可以从下面异或门的真值表看出。
表 1-9 J、B异或真值表
J | B | J⊙B |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
把J看成控制端,容易看出J=0时,异或门输出B的值,而当J=1时,异或门输出的是B的反码。
1.6.2. 加减单元的解释
从图1-9我们看到:当J=0时,输出端得到的就是A+B+C,若C=0,则输出是A+B的运算结果。但J=1时,原来全加器的B输入端现在变成了B的反码。全加器实际做的是A与B的反码相加,即是A+B'+C。如果此时让C=1,则图1-9的电路就是在做A+B'+1,也就是在做A-B运算。
象J这样的能够控制器件状态变化的导线,我们叫“控制线”。
加减单元内部结构固定之后,可以用图1-20的矩形框图简化表示。图中左面的短线是输入端,右面的短线是输出端。
图1-20 加减单元简图
1.6.3. 加减法运算器设计
将4个加减单元如图1-21那样连接起来,就组成了一个4位二进制数的加减法运算器。
图1-21 4位加减法运算器
今后我们用向量的形式记录多位输入输出。这里向量A[3..0]、B[3..0]、S[3..0]都表示4位二进制数,其余J、C、D都是一位数。
由于电信号传输速度极快,输入端的信号一旦加上,各全加器就会立即得到本位和及向上的进位,故瞬间就会得到运算的结果。至于信号传输过程的延时,我们在此暂不讨论。我们认为,只要在输入端加入A[3..0]、B[3..0]和C的数,马上就会得到S[3..0]和D的值。
总结加减法运算器的工作:
(1)让J=C=0,那么做A+B;
(2)让J=C=1,那么做A-B。
1.6.4. 超长数计算
图1-21的加减法运算器是4位的,因而能够直接计算加减法的范围是[-8,7]。能够用它计算8位数或16位数吗?回答是肯定的。
例如,计算10010101+01011101,我们将数按4位分段,先做低4位0101+1101,将结果0010放在一旁,记住进位C=1;接下来再做1001+0101+C=1001+0101+1=1111,这次进位C=0;那么最终的结果是11110010。这个结果是-14。由于结果的符号与第一个数符号相同,因而不溢出。
通过此例,我们看到机器计算的实际范围并不取决于位数,不是说“位数越多,越精确”。实际上我们可以依据机器运算器的位数进行分段计算,这里设计的加减法运算器,使用时只要将进位考虑到分段计算中,就能够计算任何长度的二进制数加减法。
1.6.5. 溢出判断设计
由于限位数计算总是在一定范围内进行的,当计算发生溢出,结果就是错误的。避免错误,就要知道何时产生溢出。限位数加减法运算,异号两数相加,或者同号两数相减都不会溢出。溢出只发生在同号两数相加和异号两数相减的情况下。根据前面介绍的判断溢出:结果与第一个数符号不同,则溢出。可以设计溢出判断电路(见图1-22)。注意:图中导线标注相同,则表示它们是同一条导线,我们可以将图1-22和图1-21放在一起。
图 1-22 溢出判断电路
只要OUT=1,则四位运算结果溢出。
如果是超长数的多段计算,溢出判断只在最高段有用。为了不出现溢出情况,多段计算时,将原数都扩展一段,就不用再考虑是否溢出了。为什么?
1.6.6. 超长数减法讨论
分段计算超长数减法,要注意低段计算时J=C=1,而其他段要令J=1,Ci=Di-1,也就是要将前次的进位加上。这其中的道理,请读者用10010101-01011101为例分段计算,分析一下吧。
1.6.7. 小结
运算器的设计完全在运用限位数的理论。我们用4位加减法运算器来说明一般加减法运算器的设计,它给出了机器计算的基本原理的最核心部分。象图1-21那样,相信你会设计出8位、16位、32位或64位的加减法运算器。但是,我们已经见到数值计算的精确度不是靠机器的位数决定的,在机器基本条件具备的情况下,通过分段、小数点移位等方法,就是用4位的加减法运算器,也可以完成实数计算。
读者也许会问:“数怎么输入?”“前次运算的进位怎么保持?”这些问题需要用到寄存器的知识,以后再逐渐分解。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-21 22:54
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社