Advertisement

预移位与连“符号位”检测

阅读量:

目录

一、预移位

二、连“符号位”检测


本文是介绍基4 SRT算法前的第四篇补充文章《预移位与连符号检测》。

一、预移位

对于基 4 SRT除法,位宽固定的情况下来说,其迭代周期是固定的。但是对于除数和被除数来说,大多数情况下高位只是符号位的扩展,所以为了减少迭代周期,节省功耗,加快计算速度,需要将除数与被除数预移位。SRT除法专用于浮点数计算的除法算法,在很多论文里可以看到除数d将归一化至[1/2, 1),也就是最高位为1。

因为被除数和除数的符号位个数不一致,导致预移位个数不一致,势必导致不同的商和余数,所以需要将被除数的移位值n和除数的移位值m记录并对商和余数做处理。

将被除数x,商q,除数d,余数rem关系表示如下:

x和d分别进行归一化操作,即x左移n位,d左移m位。一般地,当n>m时表示x<d,此时商q为0,余数rem为x;n<=m时,才需要使用算法求解。

将上式分别成2的m次方得

用X和D分别对式(3)中的x和d替换如下

所以经过预移位后,实际的除法相当与X*2^(m-n)/D,得到的商q为m-n+1位,表示如下

将q代入式(4):

对式(6)进行提取公因数2并不断递归可得

将式(7)用中间变量W写成部分和的形式

重新整理得

从上式可以看出,将预移位后的数X和D进行相除,进行m-n次迭代可得商q和余数w0,所以经过只需要将w0右移m位即可得到我们想求的余数rem。

二、连“符号位”检测

对于无符号数进行归一化操作,其符号位都是0,需要通过计算其0的个数,即连零检测;

对于有符号数进行归一化操作,其符号位都是1,需要通过计算其1的个数,即连一检测;

所以对于除法中的预移位,其实是对被除数和除数进行连续的符号位检测并进行移位处理,本处以32比特无符号数归一化为例将输入数据归一化至[1/2, 1):

(1)首先判断是否全0的情况

(2)计算连零的个数

一种比较好的办法为二分法,同时检测32比特数的前16位和后16位是否有1,如果高16位有1,则继续检测高16位中的前8位和后8位,以此类推;如果高16位全为0,则此时连零值为16,继续后16位中寻找连0值,以此类推。

另一种最直接的办法为枚举法,通过casez…endcase语句,把一切交给综合器。

谢谢您的阅读!

原创不易,如果对您有帮助,记得点赞关注哦。欢迎批评指正,谢谢鼓励!

一起“ 纸上谈芯 ”,共同学习:

全部评论 (0)

还没有任何评论哟~