计算机算术6-SRT2除法
1. 简介
SRT 算法目的在于加速非恢复二进制除法,在商数选择集中引入了0,且将商选函数(QDS)修改如下:
w[j+1] = 2w[j] -dq[j+1]
将w[j+1]看作纵坐标,2w[j]看作横坐标x;
则y=x-dq[j+1]; 当q[j+1] = -1时, y=x+d; 当q[j+1]=0 时, y=x; 当q[j+1] =1时,y=x-d
2. SRT2 算法
基2 SRT将0引入到商集中,部分迭代则可只需移位操作,减少了除法模块的平均延时。但它与非恢复余数法的问题依旧是2w[j]与-d和+d的比较需要全精度才能得出q值。所以将除数d归一化小数表示至区间[1/2, 1), 引入新的分界点-1/2和1/2来替代-d和+d, 下式可以说明-d和+d的小数取值:
d属于[1/2, 1), 因此与x轴的交点d,在0.5之后的某一点。部分和w[j+1]被限制在[-1/2, 1/2]区间内,2w[j]被归一化且其二进制补码表示如下:
$ 2w_j = u_0.u_{-1}u_{-2} … u_{-(n+1)} $, 其中u_0 为符号位。因此,在{-1, 0, 1} 三个可能的值中选取合适的商值,QDS函数只需要将移位的部分和2w[j]的最高2/3bit与-1/2和1/2比较即可
#2. 基2 SRT除法例子
假设z=69, d=10, 求q和rem
- 将除数归一化[1/2, 1), 将被除数归一化[-1/2, 1/2]
- 将2*w[j]和-1/2, 1/2进行比较,最高2bit是01, 则q=1, 最高2bit是10,则q=-1, 其它(11, 00)则q=0
- 计算w[j+1] = 2w[j] - qd, 然后继续判断2*w[j+1],进行选商。
- 根据最后余数的正负进行纠错,如果是负数, q= q+1; rem = rem +d
- 这里还是有个问题: 每一轮计算w[j+1]时都是完整的计算2w[j]+d 或者计算2w[j]-d, 然后进行和常数进行大小比较, 但我们用carry/sum计算的时候,只用高2/3bit的运算。
- 2*w[j]和-1/2, 1/2进行比较, 也即w[j]和-1/4, 1/4进行比较
其中q=0101=6, 余数rem=1001=9, 与预期一致
3. 小结
SRT2除法主要是一个商选函数,和选完之后,求取下一个余数。一般用CSA来完成,不会做完整的加减法.其中选商主要和1/2进行比较,一般用取余数的2bit或者3bit来选择。有些在具体实现过程中,我们是拿w[j],而不是2*w[j]来进行选商,这样的话它就是和1/4进行比较了,因此就需要3bit进行判断,同时运算的时候,我们是计算(w[j]-d/2)。