四位二进制数除法器.docx
- 文档编号:29299597
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:21
- 大小:124.98KB
四位二进制数除法器.docx
《四位二进制数除法器.docx》由会员分享,可在线阅读,更多相关《四位二进制数除法器.docx(21页珍藏版)》请在冰豆网上搜索。
四位二进制数除法器
一、设计目的
;
印刷板图;
3.把握应用EWB对所设计的电路进行仿真,通过仿真结果验证设计的正确性。
二、设计要求
设计一个四位二进制除法器,具体要求如下:
1.用键盘输入两个四位二进制数,并用数码管显示输入数。
2.按除法键即显示相除结果。
3.除数为零时,数码管黑屏,不显示任何内容。
三、设计内容
1.分析笔算除法
以小数为例,设x=,y=,求x/y
笔算除法时,商的符号心算而得:
负正得负;其数值部份的运算如下面竖式。
因此商x/y=,余数=
其特点可归纳如下:
①每次上商都是由心算来比较余数(被除数)和除数的大小,确信商为1仍是0。
②每做一次减法,总是保持余数不动,低位补0,再减去右移后的除数。
③商符单独处理。
如果将上述规则完全照搬到计算机内,实现起来有一定困难,主要问题是:
a.机器不能“心算”上商,必须通过比较被除数(或余数)和除数绝对值的大小来确定商值,即|x|-|y|,若差为正(够减)上商1,差为负(不够减)上商0。
b.按照每次减法总是保持余数不动低位补0,再减去右移后的除数这一规则,则要求加法器的位数必须为除数的两倍。
仔细分析发现,右移除数可以用左移余数的办法代替,其运算结果是一样的,但对线路结构更有利。
不过此刻所得到的余数不是真正的余数,只有将它乘上2-n才是真正的余数。
c.笔算求商时是从高位向低位逐位求的,而要求机器把每位商直接写到寄存器的不同位也是不可取的。
计算机可将每一位商直接写到寄存器的最低位,并把原来的部分商左移一位。
综上所述即可得原码除法运算规那么。
2.原码除法:
原码除法和原码乘法一样,符号位是单独处置的。
以小数为例:
设
式中
为x的绝对值,记作x*
为y的绝对值,记作y*
即商符由两数符号位“异或”运算求得,商值由两数绝对值相除(x*/y*)求得。
小数定点除法对被除数和除数有一定的约束,即必须满足下列条件:
0<|被除数|≤|除数|
实现除法运算时,还应幸免去数为0或被除数为0。
前者结果为无穷大,不能用机械的有限位数表示;后者结果老是0,那个除法操作等于白做,浪费了机械时刻。
至于商的位数一样与操作数的位数相同。
原码除法中由于对余数的处理不同,又可分为恢复余数法和不恢复余数法(加减交替法)两种。
(1)恢复余数法。
恢复余数法的特点是:
当余数为负时,需加上除数,将其恢复成原先的余数。
由上所述,商值的确定是通过比较被除数和除数的绝对值大小,即x*-y*实现的,而计算机内只设加法器,故需将x*-y*操作变为[x*]补+[-y*]补的操作。
例:
已知:
x=,y=,求:
[x÷y]原
解:
由x*=,[x]原=
y*=,[-y]补=,[y]原=
商值的求解进程如下:
被除数(余数)
商
说 明
+
+[-y*]补(减去除数)
+
0
余数为负,上商0恢复余数+[y*]补
+
0
被恢复的被除数←1位+[-y*]补(减去除数)
+
01 01
余数为正,上商1←1位+[-y*]补(减去除数)
+
011 011
余数为正,上商1←1位+[-y*]补(减去除数)
+
0110
余数为负,上商0恢复余数+[y*]补
+
0110
被恢复的被除数←1位+[-y*]补(减去除数)
01101
余数为正,上商1
故商值为
商的符号位为
由此可见,共上商5次,第一次上的商在商的整数位上,这对小数除法而言,可用它作溢出判定。
即当该位为“1”时,表示此除法为溢出,不能进行,应由程序进行处置;当该位为“0”时,说明除法合法,能够进行。
在恢复余数法中,每当余数为负时,都需恢复余数,这变延长了机器除法的时间,操作也很不规则,对线路结构不利。
加减交替法可克服这些缺点。
(2)加减交替法。
加减交替法又称不恢复余数法,能够以为它是恢复余数法的一种改良算法。
分析原码恢复余数法得知:
当余数Ri>0时,可上商“1”,再对Ri左移一位后减除数,即2Ri-y*。
当余数Ri>0时,可上商“0”,然后再做Ri+y*,即完成恢复余数的运算,再做2(Ri+y*)-y*,也即2Ri+y*。
可见,原码恢复余数法可归纳为:
当余数Ri>0时,商上“1”,做2Ri-y*的运算; 当余数Ri<0时,商上“0”,做2Ri+y*的运算。
这里已看不出余数的恢复问题了,而只是做加y*或减y*,因此,一般把它叫做加减交替法或不恢复余数法。
例:
已知:
x=,y=,求:
[x÷y]原
解:
[x]原=,x*=
[y]原=,y*=,[-y*]补=
商值的求解进程如下表所示:
被除数(余数)
商
说 明
+
+[-y*]补(减除数)
+
0 0
余数为负,上商0←1位+[y*]补(加除数)
+
0101
余数为正,上商1←1位+[-y*]补(减除数)
+
011011
余数为正,上商1←1位+[-y*]补(减除数)
+
0110 0110
余数为负,上商0←1位+[y*]补(加除数)
01101
余数为正,上商1
商的符号位为
因此
分析此例可见,n位小数的除法共上商n+1次,第一次商用来判定是不是溢出。
倘假设比例因子选择适当,除数结果不溢出,那么第一次商确信是0。
若是省去这位商,只需上商n次即可,现在除法运算一开始应将被除数左移一名减去除数,然后再依照余数上商。
(3)原码加减交替法所需的硬件配置。
以下图是实现原码加减交替除法运算的大体硬件配置框图。
图中A、X、Q均为n+1位寄放器,其中A寄存被除数的原码,X寄存除数的原码。
移位和加操纵逻辑受Q的末位Qn操纵。
(Qn=1作减法,Qn=0作加法),计数器C用于操纵逐位相除的次数n,GD为除法标记,V为溢出标记,S为商符。
(4)原码加减交替除法操纵流程。
以下图为原码加减交替除法操纵流程图。
除法开始前,Q寄放器被清0,预备接收商,被除数的原码放在A中,除数的原码放在X中,计数器C中寄存除数的位数n。
除法开始后,第一通过异或运算求出商符,并存于S。
接着将被除数和除数变成绝对值,然后开始用第一次上商判定是不是溢出。
假设溢出,那么置溢出标记V为1,停止运算,进行中断处置,从头选择比例因子:
假设无溢出,那么先上商,接着A、Q同时左移一名,然后再依照上一次商值的状态,决定是加仍是减除数,如此重复n次后,再上最后一次商(共上商n+1次),即得运算结果。
关于整数除法,要求知足以下条件:
0<|除数|≤|被除数|
因为如此才能取得整数商。
通常在做整数除法前,先要对那个条件进行判定,假设不知足上述条件,机械发出犯错信号,程序要从头设定比例因子。
上述讨论的小数除法完全适用于整数除法,只是整数除法的被除数位数可以是除数的两倍,且要求被除数的高M位要比除数(n位)小,否则即为溢出。
如果被除数和除数的位数都是单字长,则要在被除数前面加上一个字的0,从而扩展成双倍字长再进行运算。
3.补码除法
与补码乘法类似,也能够用补码完成除法操作。
补码除法也分恢复余数法和加减交替法,后者用得较多,在此只讨论加减交替法。
(1)补码加减交替法运算规那么。
补码除法其符号位和数值部份是一路参加运算的,因此在算法上不像原码除法那样直观,要紧需解决三个问题:
第一,如何确信商值;第二,如何形成商符;第三,如何取得新的余数。
①商值的确定。
欲确定商值,必须先比较被除数和除数的大小,然后才能求得商值。
a. 比较被除数(余数)和除数的大小。
补码除法的操作数均为补码,其符号又是任意的,因此要比较被除数[x]补和除数[y]补的大小就不能简单地用[x]补减去[y]补。
实质上比较[x]补和[y]补的大小确实是比较它们所对应的绝对值的大小。
一样在求商的进程中,比较余数[Ri]补与除数[y]补的大小,也是比较它们所对应的绝对值。
这种比较的算法可归纳为以下两点:
第一,当被除数与除数同号时,做减法,若得到的余数与除数同号,表示“够减”,否则表示“不够减”。
第二,当被除数与除数异号时,做加法,若得到的余数与除数异号,表示“够减”,否则表示“不够减”。
此算法如下表所示。
比较[x]补与[y]补的符号
求余数
比较[Ri]补与[y]补的符号
同号
[x]补-[y]补
同号,表示“够减”
异号
[x]补+[y]补
异号,表示“够减”
b.商值的确信。
补码除法的商也是用补码表示的,若是咱们约定商的末位用“恒置1”的舍入规那么,那么除末位商外,其余列位的商值对正商和负商而言,上商规那么是不同的。
因为在负商的情形下,除末位商之外,其余任何一名的商与真值都正好相反。
因此,上商的算法可归纳为以下两点:
第一,如果[x]补与[y]补同号,商为正,那么“够减”时上商“1”。
“不够减”时上商“0”(按原码规那么上商)。
第二,如果[x]补与[y]补异号,商为负,那么“够减”时上商“0”,“不够减”时上商“1”(按反码规那么上商)。
结合比较规则与上商规则,使可得商值的确定办法,如下表所示。
[x]补与[y]补
商
[R]补与[y]补
商值
同号
正
同号,表示“够减”
1
异号,表示“不够减”
0
异号
负
异号,表示“够减”
0
同号,表示“不够减”
1
进一步简化,商值可直接由下表确信。
[x]补与[y]补
商值
同号
1
异号
0
②商符的形成。
在补码除法中,商符是在求商的进程中自动形成的。
在小数定点除法中,被除数的绝对值必须小于除数的绝对值,否则商大于1而溢出。
因此,当[x]补与[y]补同号时,[x]补-[y]补所得的余数[R0]补与[y]补异号,商上“0”,恰好与商的符号(正)一致;当[x]补与[y]补异号时,[x]补+[y]补所得的余数[R0]补与[y]补同号,商上“1”,这也与商的符号(负)一致。
可见,商符是在求商值进程中自动形成的。
此外,商的符号还可用来判断商是否溢出。
例如,当[x]补与[y]补同号时,假设[R0]补与[y]补同号,上商“l”,即溢出。
当[x]补与[y]补异号时,假设[R0]补与[y]补异号,上商“0”,即溢出。
当然,对于小数补码运算,商等于“-1”应该是允许的,但这需要特殊处理,为简化问题,这里不予考虑。
③新余数[Ri+1]补的取得。
新余数[Ri+1]补的取得方式与原码加减交替法极相似,其算法规那么为:
当[R0]补与[y]补同号时,商上“l”,新余数 [Ri+1]补=2[Ri]补-[y]补=2[Ri]补+[-y]补 当[R0]补与[y]补异号时,商上“0”,新余数 [Ri+1]补=2[Ri]补+[y]补
将此法列于下表:
[R]补与[y]补
商
新余数[Ri+1]补
同号
1
[Ri+1]补=2[Ri]补+[-y]补
异号
0
[Ri+1]补=2[Ri]补+[y]补
若是对商的精度没有特殊要求,一样可采纳“末位恒置1”法,这种方式操作简单,易于实现,而且最大误差仅为2-n。
例:
已知:
x=,y=+求:
[x÷y]补
解:
[x]补=,[y]补=,[-y]补=
运算进程如下:
被除数(余数)
商 上商
说 明
+
[x]补与[y]补异号,+[y]补
+
1 1
[R]补与[y]补同号,上商1←1位+[-y]补
+
1010
[R]补与[y]补异号,上商0←1位+[y]补
+
101101
[R]补与[y]补同号,上商1←1位+[-y]补
101010101
[R]补与[y]补异号,上商0←1位,末位商恒置“1”
因此[x÷y]补=
(2)补码加减交替法所需的硬件配置。
补码加减交替法所需的硬件配置大体上与原码加减交替法所需的硬件配置相似。
(3)补码加减交替法的操纵流程。
上图示出了补码加减交替除法的操纵流程。
除法开始前,Q寄放器被清0,预备接收商,被除数的补码在A中,除数的补码在x中,计数器C中寄存除数的位数M。
除法开始后,第一依照两操作数的符号确信是作加法仍是减法,加(或减)操作后,即上第一次商(商符),然后A、Q同时左移一名,再依照商值的状态决定加或减除数,如此重复”次后,再上一次末位商“1”(恒置“1”法),即得运算结果。
补充说明几点:
①图中未画出补码除法溢出判断的内容;②按流程图所示,多作一次加(或减)法,其实末位恒置“1”前,只需移位没必要作加(或减)法;⑨与原码除一样,图中均未指出对0进行检测,事实上在除法运算前,先检测被除数和除数是不是为0,假设被除数为0,结果即为0;假设除数为0,结果为无穷大,这两种情形都无需继续作除法运算;④为了节省时刻,上商和移位操作能够同时进行。
除法开始前,Q寄放器被清0,预备接收商,被除数的原码放在A中,除数的原码放在X中,计数器C中寄存除数的位数n。
除法开始后,第一通过异或运算求出商符,并存于S。
接着将被除数和除数变成绝对值,然后开始用第一次上商判定是不是溢出。
假设溢出,那么置溢出标记V为1,停止运算,进行中断处置,从头选择比例因子:
假设无溢出,那么先上商,接着A、Q同时左移一名,然后再依照上一次商值的状态,决定是加仍是减除数,如此重复n次后,再上最后一次商(共上商n+1次),即得运算结果。
关于整数除法,要求知足以下条件:
0<|除数|≤|被除数|
因为如此才能取得整数商。
通常在做整数除法前,先要对那个条件进行判定,假设不知足上述条件,机械发出犯错信号,程序要从头设定比例因子。
上述讨论的小数除法完全适用于整数除法,只是整数除法的被除数位数可以是除数的两倍,且要求被除数的高M位要比除数(n位)小,否则即为溢出。
如果被除数和除数的位数都是单字长,则要在被除数前面加上一个字的0,从而扩展成双倍字长再进行运算。
3.补码除法
与补码乘法类似,也能够用补码完成除法操作。
补码除法也分恢复余数法和加减交替法,后者用得较多,在此只讨论加减交替法。
(1)补码加减交替法运算规那么。
补码除法其符号位和数值部份是一路参加运算的,因此在算法上不像原码除法那样直观,要紧需解决三个问题:
第一,如何确信商值;第二,如何形成商符;第三,如何取得新的余数。
①商值的确定。
欲确定商值,必须先比较被除数和除数的大小,然后才能求得商值。
a. 比较被除数(余数)和除数的大小。
补码除法的操作数均为补码,其符号又是任意的,因此要比较被除数[x]补和除数[y]补的大小就不能简单地用[x]补减去[y]补。
实质上比较[x]补和[y]补的大小确实是比较它们所对应的绝对值的大小。
一样在求商的进程中,比较余数[Ri]补与除数[y]补的大小,也是比较它们所对应的绝对值。
这种比较的算法可归纳为以下两点:
第一,当被除数与除数同号时,做减法,若得到的余数与除数同号,表示“够减”,否则表示“不够减”。
第二,当被除数与除数异号时,做加法,若得到的余数与除数异号,表示“够减”,否则表示“不够减”。
此算法如下表所示。
比较[x]补与[y]补的符号
求余数
比较[Ri]补与[y]补的符号
同号
[x]补-[y]补
同号,表示“够减”
异号
[x]补+[y]补
异号,表示“够减”
b.商值的确信。
补码除法的商也是用补码表示的,若是咱们约定商的末位用“恒置1”的舍入规那么,那么除末位商外,其余列位的商值对正商和负商而言,上商规那么是不同的。
因为在负商的情形下,除末位商之外,其余任何一名的商与真值都正好相反。
因此,上商的算法可归纳为以下两点:
第一,如果[x]补与[y]补同号,商为正,那么“够减”时上商“1”。
“不够减”时上商“0”(按原码规那么上商)。
第二,如果[x]补与[y]补异号,商为负,那么“够减”时上商“0”,“不够减”时上商“1”(按反码规那么上商)。
结合比较规则与上商规则,使可得商值的确定办法,如下表所示。
[x]补与[y]补
商
[R]补与[y]补
商值
同号
正
同号,表示“够减”
1
异号,表示“不够减”
0
异号
负
异号,表示“够减”
0
同号,表示“不够减”
1
进一步简化,商值可直接由下表确信。
[x]补与[y]补
商值
同号
1
异号
0
②商符的形成。
在补码除法中,商符是在求商的进程中自动形成的。
在小数定点除法中,被除数的绝对值必须小于除数的绝对值,否则商大于1而溢出。
因此,当[x]补与[y]补同号时,[x]补-[y]补所得的余数[R0]补与[y]补异号,商上“0”,恰好与商的符号(正)一致;当[x]补与[y]补异号时,[x]补+[y]补所得的余数[R0]补与[y]补同号,商上“1”,这也与商的符号(负)一致。
可见,商符是在求商值进程中自动形成的。
此外,商的符号还可用来判断商是否溢出。
例如,当[x]补与[y]补同号时,假设[R0]补与[y]补同号,上商“l”,即溢出。
当[x]补与[y]补异号时,假设[R0]补与[y]补异号,上商“0”,即溢出。
当然,对于小数补码运算,商等于“-1”应该是允许的,但这需要特殊处理,为简化问题,这里不予考虑。
③新余数[Ri+1]补的取得。
新余数[Ri+1]补的取得方式与原码加减交替法极相似,其算法规那么为:
当[R0]补与[y]补同号时,商上“l”,新余数 [Ri+1]补=2[Ri]补-[y]补=2[Ri]补+[-y]补 当[R0]补与[y]补异号时,商上“0”,新余数 [Ri+1]补=2[Ri]补+[y]补
将此法列于下表:
[R]补与[y]补
商
新余数[Ri+1]补
同号
1
[Ri+1]补=2[Ri]补+[-y]补
异号
0
[Ri+1]补=2[Ri]补+[y]补
若是对商的精度没有特殊要求,一样可采纳“末位恒置1”法,这种方式操作简单,易于实现,而且最大误差仅为2-n。
例:
已知:
x=,y=+求:
[x÷y]补
解:
[x]补=,[y]补=,[-y]补=
运算进程如下:
被除数(余数)
商 上商
说 明
+
[x]补与[y]补异号,+[y]补
+
1 1
[R]补与[y]补同号,上商1←1位+[-y]补
+
1010
[R]补与[y]补异号,上商0←1位+[y]补
+
101101
[R]补与[y]补同号,上商1←1位+[-y]补
101010101
[R]补与[y]补异号,上商0←1位,末位商恒置“1”
因此[x÷y]补=
(2)补码加减交替法所需的硬件配置。
补码加减交替法所需的硬件配置大体上与原码加减交替法所需的硬件配置相似。
(3)补码加减交替法的操纵流程。
上图示出了补码加减交替除法的操纵流程。
除法开始前,Q寄放器被清0,预备接收商,被除数的补码在A中,除数的补码在x中,计数器C中寄存除数的位数M。
除法开始后,第一依照两操作数的符号确信是作加法仍是减法,加(或减)操作后,即上第一次商(商符),然后A、Q同时左移一名,再依照商值的状态决定加或减除数,如此重复”次后,再上一次末位商“1”(恒置“1”法),即得运算结果。
1.移位的意义
运算机中小数点的位置是事前约定的,因此,二进制表示的机械数在相关于小数点作n位左移或右移时,其实质就便该数乘以或除以2n(n=1,2...n)。
移位运算又叫移位操作,对计算机来说,有很大的实用价值,例如,当计算机没有乘(除)运算线路时,可以采用移位和加法相结合,实现乘(除)运算。
计算机中机器数的字长往往是固定的,当机器数左移n位或右移n位时,必然会使其n位低位或n位高位出现空位。
那么,对空出的空位应该添补0还是1呢?
这与机器数采用有符号数还是无符号数有关,对有符号的移位叫算术移位。
2.算术移位规那么
关于正数,由于[x]原=[x]补=[x]反=真值,故移位后显现的空位均以0添之。
关于负数,由于原码、补码和反码的表示形式不同,故当机械数移位时,对其空位的添补规那么也不同。
下表列出了三种不同码制的机械数(整数或小数都可),别离对应正数或负数,移位后的添补规那么。
必需注意的是:
不论是正数仍是负数,移位后其符号位均不变,这是算术移位的重要特点。
不同码制机械数移位后的空位添补规那么
码 制
添补代码
正数
原码、补码、反码
0
原码
0
负数
补码
左移添0
右移添1
反 码
1
由上表可得出如下结论:
(1)机械数为正时,不论左移或右移,添补代码均为0。
(2)由于负数的原码其数值部份与真值相同,故在移位时只要使符号位不变,其空位均添0。
(3)由于负数的反码其列位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全数添1。
(4)分析任意负数的补码可发觉,当对其由低位向高位找到第一个“1”时,在此“1”左侧的列位均与对应的反码相同,而在此“1”右边的列位(包括此“1”在内)均与对应的原码相同,即添0;右移时困空位出此刻高位,那么添补的代码应与反码相同,即添1。
移位结果表示如下:
移位操作
机 器 数
对应的真值
[A]原=[A]补=[A]反
移位前
0,0011010
+26
左移一位
0,0110100
+52
左移两位
0,1101000
+104
右移一位
0,0001101
+13
右移两位
0,0000110
+6
可见,关于正数,三种机械数移位后符号位不变,左移时最高数位丢1,结果犯错;右移时最低数位丢1,阻碍精度。
(2)A=-26=(-11010)2
三种机械数移位结果示于下表。
移位操作
机 器 数
对应的真值
移位前
原
码
1,0011010
-26
左移一位
1,0110100
-52
左移两位
1,1101000
-104
右移一位
1,0001101
-13
右移两位
1,0000110
-6
移位前
补
码
1,1100110
-26
左移一位
1,1001100
-52
左移两位
1,0011000
-104
右移一位
1,1110011
-13
右移两位
1,1111001
-7
移位前
反
码
1,1100101
-26
左移一位
1,1001011
-52
左移两位
1,0010111
-104
右移一位
1,1110010
-13
右移两位
1,1111001
-6
可见,关于负数,三种机械数移位后符号位均不变。
负数的原码左移时,高位丢1,结果犯错;低位丢1,阻碍精度。
负数的补码左移时,高位丢0,结果犯错;低位丢1,阻碍精度。
负数的反码左移时,高位丢0,结果犯错;低位丢0,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二进制 法器
![提示](https://static.bdocx.com/images/bang_tan.gif)