公开/公告号CN112346706A
专利类型发明专利
公开/公告日2021-02-09
原文格式PDF
申请/专利权人 深圳市航顺芯片技术研发有限公司;
申请/专利号CN201910724753.X
申请日2019-08-07
分类号G06F7/552(20060101);
代理机构
代理人
地址 518000 广东省深圳市龙华区民治街道布龙路1010号智慧谷创新园大楼5楼
入库时间 2023-06-19 09:51:02
技术领域
本发明涉及计算机领域,尤其是一种芯片内部高速高精度定点数开方方法。
背景技术
开方运算是一种会经常使用到的基本数学运算,有定点开方运算和浮点开方运算。在很多应用场景中都会用到开方运算,因此为了提高系统的效率,在许多芯片内部由硬件电路实现的开方运算。
开方运算的实现方法有很多种,采用循环迭代的方法实现开方运算需要的硬件资源最小,因此被广泛采用来作为硬件实现的方法。
开方运算得到结果的速度和开方运算结果的精度是开方运算电路的两个重要指标。
目前已有的电路中,很多电路每次迭代只完成2位数据运算,并且开方运算的结果位数固定为被开方数的位数的一半。在芯片中,被开方数的位数一般和CPU的位数相同。比如在32位CPU的系统中,被开方数一般为32位长度,则开方结果为16位,在64位CPU系统中,被开方数一般为64位长度,则开方结果为32位。这种情况下得到的开方结果精度比较低,只有被开方数精度的一半,比被开方数为abcd.efgh的开方结果为xx.xx。
发明内容
发明目的:为提高开方运算的效率,本发明提出一种芯片内部高速高精度开方方法。
技术方案:本发明提出的技术方案如下:
一种芯片内部高速高精度定点数开方方法,包括步骤:
(1)获取定点被开方数,设置迭代轮数和余数舍入方式;设置每轮迭代完成被开方数最高4位的计算;
(2)设置r表示本轮迭代的输入数据,y表示上轮迭代后的临时开方结果;r'表示本轮迭代后的余数,y'表示本轮迭代后的临时开方结果;
(3)初始化r'=0,y'=0;将参与本轮迭代的输入数据赋值给r,初始化y=0;
(4)将r左移4位后和被开方数的最高4位拼接成一个新的数据,把这个新的数据记为m,使用这个数据进行轮运算;把y左移3位,并和2进制数据001拼接为一个新的数据,记为n;计算test_result_1=m-n;
(5)判断test_result_1是否为正数,若不为正数,则更新y'和r':使y'等于y左移两位的结果,r'等于m;将被开方数左移4位后,计算r= r',y= y',返回步骤(4);若为正数,则执行步骤(6);
(6)把y左移3位并和2进制数据011拼接为1个新数,把这个数记为p;计算test_result_2= test_result_1-p;
(7)判断test_result_2是否为正数,若不为正数,则更新y'和r':使y'等于y左移2位并拼接2进制数据01的结果,r'= test_result_1;并将被开方数左移4位后,计算r= r',y=y',返回步骤(4);若为正数,则执行步骤(8);
(8)把y左移3位并和2进制数据101拼接为1个新数,把这个数记为q;计算test_result_3= test_result_2-q;
(9)判断test_result_3是否为正数,若不为正数,则更新y'等于y左移2位并拼接2进制数据01的结果,r'= test_result_2;并将被开方数左移4位后,计算r= r',y= y',返回步骤(4);若为正数,则更新y'等于y左移2位并拼接2进制数据11的结果,r'= test_result_3,返回步骤(4);
(10)重复执行步骤(4)至(9),直至满足预设的迭代轮数;满足迭代轮数后,根据余数r'和预先设置的舍入方式对最终的开方结果y'进行舍入处理。
进一步的,所述设置迭代轮数的方法为:
若不需要高精度开方运算结果,则设置迭代次数为:被开方数的有效位除以4;
若需要高精度开方运算结果,则设置迭代次数为:被开方数的有效位除以4的结果+系统数据位宽除以4。
有益效果:与现有技术相比,本发明具有以下优势:
1、每轮完成4位被开方数运算,提高运算速度。
2、运算迭代次数由被开方数的最高非0位决定,能快速返回运算结果。
3、可以通过控制迭代次数来提高运算结果的精度。具体为:如果设置为高精度开方运算,则产生的循环迭代次数为“被开方数的有效位除以4的结果+系统数据位宽除以4的结果”。然后在进行“被开方数的有效位除以4的结果”次迭代后,令被开方数的最高4位有效数据为0,再进行“系统数据位宽除以4的结果”次迭代运算。这样运算得到的结果小数位固定在“系统数据位宽除以2的结果”的位置。
附图说明
图1为本发明的征整体流程图;
图2为迭代开方计算流程图。
具体实施方式
下面结合附图和具体实施方式对本发明作更进一步的说明。
图1为本发明的流程图,本发明包括以下步骤:
步骤1:输入定点被开方数;
步骤2:根据被开方数的位数和开方结果的精度要求设置迭代次数;具体为:
如果不需要高精度开方运算结果,则迭代次数为:被开方数的有效位除以4;如果需要高精度开方运算结果,则迭代次数为:被开方数的有效位除以4的结果+系统数据位宽除以4。比如系统数据位宽为32位并且被开方数的有效位为22时,若需要高精度开方运算结果,则迭代次数为“22/4 + 32/4”=14。如果被开方数为0,则立即退出运算,直接返回开方结果0。
步骤3:迭代循环开方算数轮运算,直至满足设置的迭代次数;
步骤4:将迭代运算的最终结果根据预设的舍入方式进行舍入处理;
步骤5:输出最终的开方结果。
上述方案中,迭代循环开方算数轮运算的具体流程如图2所示,包括步骤:
(1)设置每轮迭代完成被开方数最高4位的计算,
(2)设置r表示本轮迭代的输入数据,y表示上轮迭代后的临时开方结果;r'表示本轮迭代后的余数,y'表示本轮迭代后的临时开方结果;
(3)初始化r'=0,y'=0;将参与本轮迭代的输入数据赋值给r,初始化y=0;
(4)将r左移4位后和被开方数的最高4位拼接成一个新的数据,把这个新的数据记为m,使用这个数据进行轮运算;把y左移3位,并和2进制数据001拼接为一个新的数据,记为n;计算test_result_1=m-n;
(5)判断test_result_1是否为正数,若不为正数,则更新y'和r':使y'等于y左移两位的结果,r'等于m;将被开方数左移4位后,计算r= r',y= y',返回步骤(4);若为正数,则执行步骤(6);
(6)把y左移3位并和2进制数据011拼接为1个新数,把这个数记为p;计算test_result_2= test_result_1-p;
(7)判断test_result_2是否为正数,若不为正数,则更新y'和r':使y'等于y左移2位并拼接2进制数据01的结果,r'= test_result_1;并将被开方数左移4位后,计算r= r',y=y',返回步骤(4);若为正数,则执行步骤(8);
(8)把y左移3位并和2进制数据101拼接为1个新数,把这个数记为q;计算test_result_3= test_result_2-q;
(9)判断test_result_3是否为正数,若不为正数,则更新y'等于y左移2位并拼接2进制数据01的结果,r'= test_result_2;并将被开方数左移4位后,计算r= r',y= y',返回步骤(4);若为正数,则更新y'等于y左移2位并拼接2进制数据11的结果,r'= test_result_3,返回步骤(4);
(10)重复执行步骤(4)至(9),直至满足预设的迭代轮数。
上述方案中的被开方数的最高4位有效数据是被开方数的按4位对齐的最高4位非0数据。
最后一轮迭代输出的y'为开方迭代运算结果,r'为开方迭代运算的余数;记被开方数为a,最后一轮迭代输出的y'结果为b,最后一轮迭代输出的r'结果为c,则c=a-b
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
机译: 用生物材料填充含有生物材料的外壳的内部容积部分的方法氙气在医疗领域涉及通过出口将一部分排气排出,在此气体被另一种气体沿打开方向推回
机译: 一种在内部引线端具有芯片键合台阶部分的引线叠芯片式引线框架和一种半导体芯片封装
机译: 具有内部天线的无线通信芯片,用于无线通信芯片的内部天线,以及制造具有内部天线的无线通信芯片的方法