公开/公告号CN112783471A
专利类型发明专利
公开/公告日2021-05-11
原文格式PDF
申请/专利权人 深圳信息职业技术学院;
申请/专利号CN202011589525.5
申请日2020-12-29
分类号G06F7/498(20060101);G06F7/499(20060101);G06F17/11(20060101);
代理机构44451 深圳市添源知识产权代理事务所(普通合伙);
代理人黎健任
地址 518000 广东省深圳市龙岗区龙翔大道2188号
入库时间 2023-06-19 10:57:17
技术领域
本发明涉及正余弦、反正切函数运算的技术领域,具体涉及一种基于CORDIC算法的正余弦、反正切函数运算装置及方法。
背景技术
正余弦和反正切函数计算是科学计算中相当常见的几种超越函数计算,目前主要的硬件设计方案主要包括查表法、多项式逼近方法和CORDIC(COordinate RotationDIgital Computer,坐标旋转数字计算机)方法;随着精度要求的提高,查表法和多项式逼近法硬件资源消耗成指数增加;传统CORDIC算法可以通过移位和相加计算三角函数,但是在高精度要求下需会产生极大的计算延迟。目前正余弦和反正切函数计算精度主要包括定点、单精度浮点和双精度浮点,针对128位浮点的计算硬件实现研究还较少。
发明内容
本发明旨在提供了一种基于并行CORDIC算法的正余弦、反正切函数运算装置及方法,利用四步并行分支CORDIC算法,将四次单步迭代合并为一次四步迭代,每次迭代进行四位有效精度的逼近,降低了CORDIC算法由逐位迭代所带来的巨大延时代价。
本发明技术方案的第一方面,提供一种基于CORDIC算法的正余弦、反正切函数运算的装置,所述装置包括:
异常处理模块:检测输入弧度值是否存在异常,如果输入弧度值合法,输出到预处理模块;
预处理模块:将异常处理模块输入的弧度值转换到CORDIC算法可计算的范围,并输入到四步并行迭代模块;
四步并行迭代模块:基于CORDIC算法实现四步并行迭代运算,具体为:对预处理模块得到的数据进行X通道、Y通道和Z通道迭代运算,以及对符号因子预测;
标准化浮点归一化模块:对四步并行迭代模块得到的数据进行前导零检测,然后归一化组合成标准的浮点形式输出。
进一步的,所述四步并行迭代模块中的四步并行迭代运算是将CORDIC算法中的四次单步迭代合并为一次四步并行迭代,在每一次的四步并行迭代中,同时预测4个符号因子δ
其中,i表示四步并行迭代次数,δ
进一步的,当所述装置在进行正余弦函数运算时,所述符号因子δ
进一步的,当所述装置在进行反正切函数运算时,所述符号因子δ
进一步的,当所述装置在进行正余弦函数运算时,所述基于CORDIC算法实现四步并行迭代运算具体为:X通道、Y通道和Z通道以迭代方式分别进行16组迭代计算,然后从Z通道中选出16组结果z值中最接近于0的两个作为分支,经过二选一比较器,选出z值最接近于0的一个分支以及该分支对应的符号因子S
进一步的,当所述装置在进行反正切函数运算时,所述基于CORDIC算法实现四步并行迭代运算具体为:X通道、Y通道和Z通道以迭代方式分别进行16组迭代计算,然后从Y通道选出16组结果y值中最接近于0且不越过坐标系X轴的那条分支,以及该分支对应的符号因子S
进一步的,当所述装置在进行正余弦函数运算时,所述四步并行迭代模块中还包括利用常数乘法器对相同乘法项进行一次计算,所述常数乘法器采用CSD重编码方式。
本发明技术方案的第二方面,提供一种基于CORDIC算法的正余弦、反正切函数运算方法,步骤为:
S1、检测输入弧度值是否存在异常,如果输入弧度值合法,输出到S2;
S2、将S1输入的弧度值转换到CORDIC算法可计算的范围,并输入到S3;
S3、接收S2输入的数据,然后基于CORDIC算法实现四步并行迭代运算,具体为:对S2输入的数据进行X通道、Y通道和Z通道迭代运算,以及对符号因子预测;
S4、对S3得到的数据进行前导零检测,然后归一化组合成标准的浮点形式输出。
进一步的,所述四步并行迭代运算是将CORDIC算法中的四次单步迭代合并为一次四步并行迭代,在每一次的四步并行迭代中,同时预测4个符号因子δ
其中,i表示四步并行迭代次数,δ
本发明提供的一种基于CORDIC算法的正余弦、反正切函数运算装置及方法,其有益效果是:
1、基于128位标准浮点,提高了正余弦和反正切函数计算结果的可表示精度,在合适的输入范围内,最高精度可达113bit。扩大了正余弦函数的可计算范围,由[-π/2,π/2]扩大至[-2
2、采用改进的四步并行分支CORDIC算法,极大的减少了计算所需的迭代次数,完成一次对数函数运算只需要37个时钟周期。
附图说明
图1是本发明实施例中正余弦函数运算的judge示意图;
图2是本发明实施例中反正切函数运算judge示意图;
图3是本发明实施例中正余弦函数运算整体结构示意图;
图4是本发明实施例中正余弦函数运算异常处理模块的流程示意图;
图5是本发明实施例中正余弦函数运算预处理模块结构示意图;
图6是本发明实施例中正余弦函数四步并行迭代模块结构示意图;
图7是本发明实施例中X通道四步并行迭代模块结构图;
图8是本发明实施例中正余弦函数标准浮点归一化模块的结构示意图;
图9是本发明实施例中反正切函数运算整体结构示意图;
图10是本发明实施例中反正切函数四步并行迭代模块结构示意图。
具体实施方式
为进一步对本发明的技术方案作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的步骤。
本发明针对正余弦和反正切函数提出了新型四步并行分支迭代CORDIC算法,解决了传统CORDIC算法计算延迟的问题,四步并行分支迭代CORDIC算法的基本思想是将四次单步迭代合并为一次四步迭代,在每一次的四步迭代中,同时预测4个符号因子。
以X通道为例,根据CORDIC算法可得:
对(1)、(2)推导可得第i次四步迭代公式公式:
其中,i表示四步并行迭代次数,δ
对于旋转模式,δ
表1 x
从表1可知,x
在符号因子δ
反正切函数计算使用CORDIC算法圆周模型的向量模式,δ
表2 y
y
在符号因子预测方面,δ取{0,-1}使得预测更加快速简单。和前面所述一样,每一次迭代后都可以预测下一步迭代的δ
本发明基于IEEE-754128位浮点标准,根据四步并行分支迭代CORDIC算法,对浮点正余弦函数运算部件进行了整体框架设计。
浮点正余弦函数运算装置主要包括三个部分:异常处理模块、预处理模块、四步并行迭代模块以及标准化浮点归一化模块,所述标准化浮点归一化模块还包括象限映射单元和MUX选择器,浮点正余弦函数运算装置整体结构示意图如图3所示。
异常处理模块和和预处理模块中,算法的输入收敛范围是(-99.8°,99.8°),对于一个任意的输入数据,预处理模块先检测输入弧度值是否存在异常,如果输入弧度值合法,那么接下来将该输入弧度值转换到CORDIC算法可计算的范围。
异常处理模块的流程如图4所示,其中input为128位的浮点输入弧度值,Ep_sin和Ep_cos为对浮点输入异常的处理结果。
异常处理模块首先将浮点输入值拆分为符号位S、指数部分E和尾数部分M,然后对浮点输入进行异常检测,若存在异常,则输出异常标志位E
预处理模块主要负责将输入浮点数弧度转换为CORDIC可计算的弧度范围,此模块将输入弧度制都映射到第一象限。输出值为S和Q,S仍为输入浮点数的符号,而Q值将决定输入弧度映射到哪个象限。point为转换后的CORDIC算法可计算的弧度。
预处理模块结构如图5所示,input_m是113位的尾数部分,在input_m后扩展16位用作移位,扩展后为129位。偏差计算逻辑用于处理输入的指数部分,将输入拆分,传递给后续逻辑进行计算。input_m与input_e和选择信号sel的对应关系如表3所示,根据输入值可分为三种情况。当input_e小于15’h3fff时,将input_m右移n位,即(16383-input_e)位,得到M1;当input_e等于15’h3fff,且input_m小于或等于π/2时,得到的M3即为input_m的值。
当input_e大于15’h3fff,或者input_e等于15’3fff且input_m大于π/2时,此时已超出CORDIC角度旋转覆盖范围,将输入值按式(4)的方式进行变换。
其中Q为
表3 input_m,input_e和sel的对应关系
为得到Q和R,首先将input_m乘以1/π,这两个数相乘后结果一定为小数,在电路存储中,input_m为129位,后128位是小数部分,所以在二进制存储中,实际上是扩大了2
四步并行迭代模块是本次设计的核心模块,主要负责X通道、Y通道和Z通道的迭代过程,以及符号因子的预测。其中E
正余弦函数的计算中,δ的取值为{-1,1},X通道、Y通道和Z通道以迭代方式分别进行16组迭代计算,然后从Z通道中选出16组结果z值中最接近于0的两个作为分支,经过二选一比较器,选出z值最接近于0的一个分支以及该分支对应的符号因子S
根据加4计数器,Z通道每次从查找表中取得4个弧度值,这里查找表位数为129位,其中最θ
其中ite_z
经过Z通道四步迭代模块,将会得到两个最接近于0的z
四步并行迭代模块的瓶颈在于X通道和Y通道中的大量计算,其中存在大量相同常数系数的乘法项,利用常数乘法器模块,对相同乘法项进行一次计算,可以减少乘法带来的计算负担。常数乘法器模块采用CSD重编码方式,相比于基本二进制分解,该编码方式节约了近三分之一的代价。
x
首先x
乘法器最大的常数系数为35,应在x
浮点归一化模块还包括象限映射单元,浮点归一化模块负责将定点形式的X
象限映射单元根据符号位S’,象限标识Q’,将x
表4 S’=0对应的输出关系表
根据表4和5的对应关系得到输出X
表5 S’=1对应的输出关系表
CORDIC算法中反正切函数的计算不需要考虑伸缩比例因子,因此可进一步对四步并行分支迭代CORDIC算法进行改进。两个函数的硬件设计可用同一个查找表,其他模块都独立于正余弦函数。
和浮点正余弦函数运算部件的模块结构相同,浮点反正切函数运算主要分为四个部分:异常处理模块、预处理模块、四步并行迭代模块和标准化浮点归一化模块,浮点反正切函数运算整体结构示意图如图9所示。
预处理模块中首先将输入数据拆分,对其进行异常检测,如果存在异常,异常标志信号Ep置1,以及给出异常处理结果Ep_arc;如果输入数据合法,输入预处理模块对数据的指数部分和尾数部分进一步处理,保证
异常处理模块和预处理模块首先对异常输入和特殊输入进行检测和处理,如果输入合法,接着对两个输入值进行预处理,使其落入CORDIC算法可计算区域。
异常处理模块负责对异常输入和特殊输入进行处理。首先将输入的浮点数input_x拆分成符号位x_S,指数部分x_E和添加了隐藏位1的尾数部分x_M,将input_y拆分成y_S,y_E和y_M。然后对输入数据进行异常检测,当出现异常输入和特殊输入时,Ep置1,异常输入主要包括以下几种:
(1)当input_x或input_y为NaN,Ep_arc设置为NaN。
(2)当input_x和input_y都为无穷大或者都为无穷小时,Ep_arc设置为NaN。
特殊输入指的是该浮点反正切函数运算部件无法计算的输入域,主要包括以下几种:
(1)当input_y为0时,Ep_arc设置为0。
(2)当input_x为0时,Ep_arc设置为π/2。
(3)当x_E-y_E>128,在下一个模块对其进一步处理时,对y_M移位将超出128位,移位后的y_M为0,该运算部件的迭代过程将不会进行,Ep_arc设置为0。
(4)当y_E-x_E>128时,由于位宽限制,对x_M移位将超出最高可移位数128位,此时arctan(input_y/input_x)的数值将接近于π/2,Ep_arc设置为π/2。
异常检测完成后,如果输入合法,则进入输入预处理模块。将x_M和y_M后都扩展15位,提高小数值计算精度。对于反正切函数的计算,实施例将输入向量都转换到第一象限,将x_S和y_S作为象限标识符。根据y_E和x_E大小进行以下处理:
(1)当y_E>x_E时,将x_M右移(y_E-x_E)位得到x_M1,y_M赋值给y_M1。
(2)当y_E 这样处理的原因在于,首先保证输入向量的模大于1,如果 四步并行迭代模块结构示意图如图10所示,采用单级循环结构,用的是向量模式,将δ取值改为{0,-1},使得向量保持在第一象限旋转。 Y通道将会选出最接近于0且不越过X轴的那条分支,以及该分支对应的符号因子S 将S 表6 judge与S
该四步并行迭代模块的x 标准化浮点归一化模块首先根据x_S和y_S对z_out做以下处理: (1)当x_S=0时,z_out1仍为z_out。 (2)当x_S=1时,z_out1为π减去z_out。 其中π,z_out1设置为130位。同样采用树形编码的前导零检测,z_out1为无符号的130位,直接对z_out1进行前导零检测,然后进行归一化,得到E和M,S与y_S相同。将S、E和M组合成标准的浮点形式。最后根据异常使能信号Ep_lock选择最终输出得到arctan。 在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的步骤、方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种步骤、方法所固有的要素。 以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
机译: 余弦变换量化装置,图像压缩装置的倍增运算保存方法,逆量化和逆余弦变换装置,图像降压装置的倍增运算保存方法
机译: 离散余弦变换和离散余弦逆变换的运算装置和运算方法
机译: 余弦变换和量化装置,减少视频压缩装置中的乘法运算的方法