赞
踩
慢速算法通过循环等式,对余数R进行迭代:
最终的余数,第一个部分余数
注:运算前,需要把 D 左移,得到结果时把 R 右移。
说明:(纯个人想法,不要看)
继续以124/3为例
1=124-3*0*10^2-3*4*10^1-3*1*10^0
按照这种方法,确定商位的同时,还要不断将Q*D除以基
若按照迭代方法,要获得3位商值,要将除数3乘以1000
第一次迭代:1240-3000*0,部分余数1240
第二次迭代将部分余数乘以基(以10为基)
12400-3000*4,部分余数400
第三次迭代部分余数乘以10
4000-3000*1,部分余数1000
运算完毕后,R3需要除以1000,即得到余数1,商041。
对二进制,商只有0和1两种情况,若部分余数减去D为负数,则说明商为0,需要对部分余数进行恢复,即加D;若部分余数减去D为正数,则商为1。
RISC-V 计算机硬件与接口描述(64位恢复余数除法):
求被除数N=10,除数D=3的商Q和余数R
10的二进制为1010
3的二进制为0011
初始化如下:
n = 4 D = 00110000 A = 00001010 R = 0000 Q = 0000
不恢复余数法商数的选择使用{-1,1}代替{0,1},例如-3=(-1)(1)(1)(-1)
如果R-D<0,q取-1,R=2*R+D;R-D>0,q取1,R=2*R-D。不恢复余数法硬件实现上更有优势,每产生一个商的比特位只需要一次加或减操作,并且在减法操作后不需要进行余数恢复,执行的速度更快。
最后需要通过以下算式校准,将余数R转换为正数:
if R <0 then
Q=Q-1
R=R+DIvidend
end if
求被除数N=10,除数D=3的商Q和余数R
10的二进制为1010 3的二进制为0011 -3的二进制为1101
初始化如下:
n = 4 D = 000110000
-D = 111010000(忽略低4位)
A = 000001010(预留一位进位)
R = 0000 Q = 0000
上述已经在计算过程中得到商值。商值也可通过商位转换获得,例如111(-1)1(-1)1(-1)
正数项:11101010
负数项:00010101
正数项减负数项:11010101
10进制的数字集{0,1,2,3,4,5,6,7,8,9},含有10个非负数,为非冗余数字集。
如果数字集含有多于r个数字(包括0),则称为冗余。
一种特殊的冗余数字集Signed-Digit(SD):
冗余因子
a=ceil(r/2),,为最小冗余度,ceil为取整函数
a=r-1,为最大冗余度
a>r-1,则为过冗余度
数集间的转化:
SRT除法相比与非恢复除法不同点:
On-the-Fly Conversion算法用于将冗余数字表示转换为常规表示的算法。上述将数字集{-1,1}转换至数字集{0,1}曾经介绍过,首先要将正负项分开,然后相减,此操作通过进位传播加法器进行。然而,这会将加法器的延时添加到总的操作时间中。SRT商位以逐位方式获得,On-the-Fly Conversion算法可以通过当前结果的两种条件形式进行即时转换(产生一位商数就即时转换出来),产生的总延时大致相当于一个进位保存加法器。
转换原理及过程:
以基2 SRT除法为例,把冗余数字集p转化为常规表示q,其中:
On-the-Fly Conversion在p产生时便执行:
当p=-1时算法要求传播进位,例如:
pk=-1,需要考虑向高位借位:
通过保留两种条件形式来避免进位的传播:
其中:
初始条件:
对于k>1:
示例:
对
转换结果为q=0.110001111010
再比如,对
结果为q=1.01101111,为负数
基r转换:
转换后的商数:
为保持算法特性,转化的广义表达为:
其中:
初始条件:
k>1:
从基4冗余至二进制补码转换:
对基4冗余,将
对基4最小冗余度,
a1、a0、b1、b0表示为:
转换表:
上述两种除法器部分余数迭代函数为:
恢复余数法商值在{1,0}之间选择
不恢复余数法商值在{1,-1}之间选择
SRT算法对QDS函数选择进行了修改,商值在{1,0,-1}之间选择
示例:计算11/3=(3,2),除数和被除数都是8比特,8'd11=00001011, 8'd3=00000011。
小数点置于最高位和最高位的下一位(即第八位和第七位之间),被除数有4个前导0,除数有六个前导零,将除数归格化至 [1/2,1),即左移五位,变为0.1100000;被除数归格化至(x,1/2),可左移1位或两位,将被除数左移一位,变为0.0010110。迭代次数为除数移位数减去被除数移位数。每次确定商位,根据上述QDS函数需要对部分余数和除数进行比较,若二者位宽很大,硬件电路占用的面积就会很大。
将除数归格化至 [1/2,1),引入新的分界点-1/2和1/2来替代-d和+d:
QDS更新如下:
q的选择有三种情况:
1. 当2s[j-1]>=1/2(即0.1),则q值为1, 即最高两比特为0.1;
2. 当2s[j-1]<-1/2(即1.1),则q值为-1,即最高两比特为1.0;
3. 其他情况,q值为0;
即只要判断部分余数最高两比特就可得到商值,不需要将部分余数与全精度的除数进行比较。
示例:被除数x=69,除数d=10,求商q和余数rem
部分余数迭代式为:
假设rw(j)=x,w(j+1)=y,重写上式:
y = x – d*q
当q=0, y = x
当q=1, y = x – d
当q=2, y = x – 2d
…
根据不同的q值描绘出很多个y和x关系的直线
商q从数字集{-a,-a+1,…,-1,0,1,…,a-1,a}中取值,画出所有曲线,即是Roberson图。
对于QDS函数,其目的在于选择出商值q,而其收敛的条件为:
根据上图:
q取a和-a时,边界为:
得:
故:
对于任意的wj,为保证其至少有一个商值可以选择,则必须满足:
Overlap:即重合的区域
对于q:y = x – d*q
对于q-1:y = x – d*(q-1)
当x在橘色区域时,商的值可选为q-1
当x在绿色区域时,商的值可选为q
当x在交叠区域时,可选商值q-1和q
采用P替换掉rwj:
上文已推导:
将上限Uq和下限Lq分别写成 :
以最小冗余度基4 SRT部分PD图区域为例,其商数集为{-2,-1,0,1,2},最大值a为2,基r=4
当q=0时
当q=1时
当q=2时
基4的SRT算法使用每2比特进行迭代,迭代的次数由移位的比特来确定。使用m表示除数移位的比特,n表示被除数移位的比特,,总的迭代次数是(m-n)/2,并且,m和n必须同样是偶数或者同样是奇数,否则会对迭代过程造成影响。
以23/5为例,23规格化为00.0010111,没有进行移位;5规格化为00.1010000,左移4位,故基4-STR迭代两次。
根据上述PD图,可构建QDS表,可通过检查少数几个比特来确定商值。
例如,D=0.1010,P=00.011,应选择1作为商值,D=0.1010,P=00.010,应选择0。
图中标注了“0 or 1”或者“1 or 2”的意味着该处的商值可以选择0也可以选择1。
基4中的11是基2中的0101,这里没有负数项,无需做减法。
负数情况:23/-5=(-4,3)
-5的补码为11.0000011,左移4位11.0110000,被除数00.0010111
商值选择时,需要把D转换为正数(原码)的形式,0.1010,然后使用负数的QDS表进行查表
与正数的QDS表不同,不再选择左下角的点,而是左上角的点,例如,如果D=0.1010,P=11.101,我们应该选择-1作为商值。
示例:23/-5=(-4,3)
除数是负数,在后处理过程中,q应该加上1,R应该减去D(负数)。
示例: -23/5=(-5,2)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。