一种三角函数运算电路的制作方法

文档序号:17621091发布日期:2019-05-07 22:12阅读:1191来源:国知局
一种三角函数运算电路的制作方法

本实用新型涉及集成电路领域,涉及一种三角函数运算电路。



背景技术:

在计算机软件指令中,当涉及到三角函数的计算时,软件往往需要调用专门的三角函数库,然后运行几十上百条指令才能完成一个三角函数的计算,效率极其低下。而且,随着函数精度的增加,计算的复杂度也是呈几何级数上升的。因此,三角函数的指令往往是软件指令中耗时较多的部分。而将三角函数的计算采用硬件电路来完成的方式对于节省软件指令具有很大优势,不需要耗费过多的软件指令。所以,采用硬件电路技术来完成三角函数的计算是大势所趋。

传统的流水线结构的CORDIC算法,处理速度较快,流水线填满之后每一个时钟周期就会计算出一组结果,为数据实现高速实时处理提供了前提。虽然该结构大大提高了系统运算速度,但是电路规模较大,同时运算结果的精度受流水线级数的限制,要提高运算精度必须增加流水级数,进一步增大了硬件开销。



技术实现要素:

为解决上述问题,本实用新型提出了一种基于3类比较普遍使用的三角函数正弦(sin),余弦(cos),反正切(arctan)计算的硬件实现方法,相应地以一种定点数的计算方法对这三类三角函数进行运算处理。

一种三角函数运算电路,包括预处理模块101、迭代计数模块102、DDR模块100和迭代运算模块103;预处理模块101,与DDR模块100相连接,用于在迭代计数模块102的计数拍数的驱动下,根据计算三角函数的类型对应地输入操作数一和操作数二,并结合DDR模块100提供的计算三角函数所需的常数分别对操作数一和操作数二进行修正,使得所述三角函数运算电路的运算结果的符号位得到提前确定;迭代运算模块103,与预处理模块101连接,用于在迭代计数模块102的计数拍数的驱动下,结合预处理模块101输出的操作数二的预处理结果,对操作数一的预处理结果以及输入的操作数零进行扩展符号位的一级CORDIC算法迭代运算,使得本级的当前输出作为本级的下一次输入以形成反馈结构在同一级迭代且本级的当前输出的结果符号位保持不变,最后使用预处理模块101所确定的符号位作为迭代运算模块103并行输出的不同类型三角函数计算结果的符号位;DDR模块100,与迭代运算模块103相连接,用于在迭代计数模块102的计数拍数的驱动下,将存储的i个旋转角度θi和计算三角函数所需的常数送往迭代运算模块103,并通过总线接口与处理器连接,使其在处理器接收迭代运算模块103发出的中断信号后接收迭代运算模块103的输出结果,其中θi=tan-1(2-i),i=0,1,2,3,…n-1;迭代计数模块102,用于通过计数拍数信号与预处理模块101、迭代运算模块103和DDR模块100建立连接关系,使得迭代运算模块103在每一拍计数信号的驱动下根据预处理模块101和DDR模块100输入的信号完成每一级迭代运算;其中,操作数零、操作数一和操作数二都是处理器发出的,操作数零和操作数一都是二进制定点数,操作数二是以弧度形式表示的二进制定点数。

进一步地,操作数零、操作数一和操作数二都采用32位二进制数来表示定点数,且其小数点固定在第21位。

作为本实用新型实施例一,当处理器根据用户指令配置计算三角函数的类型为正弦函数和余弦函数时,预处理模块101为角度预处理模块200,用于通过与DDR模式100提供的计算三角函数所需的常数比较判断输入操作数二所对应的弧度值的正弦函数值的符号位和余弦函数值的符号位,同时根据三角函数变换关系将输入操作数二所对应的弧度范围修正到[0,π/2]范围内;角度预处理模块200包括第二移位器202、第一移位器201、除法器203、乘法器204、符号选择器208、加减运算器205、第一减法器206、第二减法器207和第三减法器209;其中,第一移位器201,用于将DDR模式100提供的计算三角函数所需的常数2π对应的所述定点数往左移21位,并将左移的结果数据输出至除法器203和乘法器204;第二移位器202,与除法器203相连接,用于将输入的操作数二往左移21位,并将左移的结果数据输出至除法器203;除法器203,同时连接第一移位器201和第二移位器202,用于将第一移位器201的输出数据和第二移位器202的输出数据作二进制除法运算,并把相除结果输出至乘法器204;乘法器204,同时连接第一移位器201和除法器203,用于在操作数二的最高位为1或操作数二大于常数2π对应的所述定点数时,将除法器203的输出结果和第一移位器201的输出数据相乘,并将相乘结果输出至加减运算器205;加减运算器205,与乘法器204相连接,用于在操作数二的最高位为1时控制操作数二与乘法器204输出结果进行加法运算,在操作数二的最高位为0且操作数二大于常数2π对应的所述定点数时控制操作数二与乘法器204输出结果进行减法运算,使得操作数二所修正的对应弧度范围为[0,2π];第一减法器206和第三减法器209,用于根据加减运算器205输出的修正结果执行减法运算,当加减运算器205输出的修正结果对应弧度范围为[π,2π]时,加减运算器205的修正结果输出至第一减法器206并与DDR模式100提供的常数π对应的所述定点数作减法操作;当加减运算器205输出的修正结果对应弧度范围为[π/2,π]时,加减运算器205的修正结果输出至第三减法器209并与DDR模式100提供的常数π对应的所述定点数作减法操作;第二减法器207,用于根据第一减法器206输出的修正结果执行减法操作,当第一减法器206输出的修正结果对应弧度范围为[π/2,π]时,第一减法器206输出的修正结果与DDR模式100提供的常数π/2对应的所述定点数作减法操作,使得第二减法器207输出的修正结果对应弧度范围为[0,π/2];符号选择器208,用于接收能够同时确定操作数二的正弦函数符号位和操作数二的余弦函数符号位的对应的弧度范围的信号,并基于三角函数的变换关系选择相应的符号位作为所述三角函数运算电路运算结果的符号位,并输出操作数二对应的弧度值的正弦函数值的符号位信号和余弦函数值的符号位信号,其中所述三角函数运算电路运算结果包括操作数二对应的弧度值的正弦函数值和余弦函数值。

进一步地,迭代运算模块103为正余弦迭代运算模块300,正余弦迭代运算模块300包括所述反馈结构,该反馈结构包括X选择器301、Y选择器302、X寄存器303、Y寄存器304、Z选择器316、Z寄存器317、角度符号选择器315、Y右移位器305、X右移位器306、余弦加减运算器307、正弦加减运算器308、反正切加减法器320、X符号位扩展器321和Y符号位扩展器322;X符号位扩展器321,用于将操作数零的符号位及每一次迭代运算中余弦加减运算器307的输出结果的符号位重复复制以创建具有扩展符号位的运算数据,以避免迭代运算过程中数据类型改变;Y符号位扩展器322,用于将操作数一的符号位及每一次迭代运算中正弦加减运算器308的输出结果的符号位重复复制以创建具有扩展符号位的运算数据,以避免迭代运算过程中数据类型改变;角度符号选择器315,用于根据迭代计数模块102提供的第一拍,选择角度预处理模块200输出的修正结果的符号位的信号进入角度符号选择器315的第i级输入端,后续迭代运算中,随着迭代计数模块102提供的拍数递增,选择Z选择器316的第i+1级输入端的数据的符号位信号作为确定余弦加减运算器307和正弦加减运算器308运算类型的判断信号;Z选择器316,用于根据迭代计数模块102提供的第一拍,选择角度预处理模块200输出的修正结果进入Z选择器316的第i级输入端,再将修正结果存入Z寄存器317;反正切加减法器320的两个运算输入端分别与Z寄存器317的输出端、DDR模块100的反正切函数输出端相连接,用于根据迭代计数模块102提供的拍数,DDR模块100提供与所述拍数对应的旋转角度θi,同时根据角度符号选择器315输出的符号位结果确定Z寄存器317当前输出数据与DDR模块100提供的所述旋转角度θi的运算类型,并将运算结果输出至Z选择器316的第i+1级输入端,随着迭代计数模块102提供的拍数递增,Z选择器316将反正切加减法器320在上一拍的输出结果选择进入第i+1级输入端,作为当前拍的输入数据完成与旋转角度θi的加减法运算,其中θi=tan-1(2-i),i=0,1,2,3,…n-1;X选择器301,用于根据迭代计数模块102提供的第一拍,选择操作数零进入X选择器301的第i级输入端,再输出至X符号位扩展器321进行符号位的扩展,将扩展结果存入X寄存器303;Y右移位器305的输入端连接Y寄存器304,余弦加减运算器307的两个运算输入端分别与X寄存器303的输出端和Y右移位器305的输出端相连接,用于根据角度符号选择器315输出的符号位结果的信号,确定X寄存器303当前输出数据和Y右移位器305当前输出的移位结果所执行的运算类型,并将运算结果输出至X选择器301的第i+1级输入端,随着迭代计数模块102提供的拍数递增,X选择器301将余弦加减运算器307在上一拍的输出结果选择进入第i+1级输入端再输出至X符号位扩展器321进行符号位的扩展,作为当前拍的输入数据参与上述符号位扩展后的移位加减运算,其中,Y右移位器305在第i次迭代运算时的移动位数为i,对应于迭代计数模块102提供的第i+1拍计数信号,i=0,1,2,3,…n-1;每一次迭代运算中X符号位扩展器321得到的具有扩展符号位的运算数据位宽相等;Y选择器302,用于根据迭代计数模块102提供的第一拍,选择操作数一进入Y选择器302的第i级输入端,再输出至Y符号位扩展器322进行符号位的扩展,将扩展结果存入Y寄存器304;X右移位器306的输入端连接X寄存器303,正弦加减运算器308的两个运算输入端分别与Y寄存器304的输出端和X右移位器306的输出端相连接,用于根据角度符号选择器315输出的符号位结果的信号,确定Y寄存器304当前输出数据和X右移位器306当前输出的移位结果所执行的运算类型,并将运算结果输出至Y选择器302的第i+1级输入端,随着迭代计数模块102提供的拍数递增,Y选择器302将正弦加减运算器308在上-拍的输出结果选择进入第i+1级输入端再输出至Y符号位扩展器322进行符号位的扩展,作为当前拍的输入数据参与上述符号位扩展后的移位加减运算,其中,X右移位器306在第i次迭代运算时的移动位数为i,对应于迭代计数模块102提供的第i+1拍计数信号,i=0,1,2,3,…n-1;每一次迭代运算中Y符号位扩展器322得到的具有扩展符号位的运算数据位宽相同;其中,操作数零设置为一个常数,操作数一设置为0。

进一步地,正余弦迭代运算模块300还包括X负数处理器309、X结果选择器310、X结果寄存器311、Y负数处理器312、Y结果选择器313、Y结果寄存器314、X输出选择器318和Y输出选择器319;X输出选择器318的一个选择输入端连接余弦加减运算器307的输出端,X输出选择器318的另一个选择输入端悬空,X输出选择器318的选择端连接迭代计数模块102,用于根据迭代计数模块102输出的预置拍数对余弦加减运算器307的输出结果选择输出;X负数处理器309的输入端和X输出选择器318的输出端连接,X结果选择器310的两个选择输入端分别与X负数处理器309的输出端和余弦加减运算器307的输出端连接,用于根据其选择端接收的角度预处理模块200输出的操作数二对应的弧度值的余弦函数值的符号位的信号,选择X输出选择器318的输出结果的补码数据输出至X结果寄存器311;其中X结果寄存器311内存储的数值作为所述三角函数运算电路在预置拍数下的余弦函数值;Y输出选择器319的一个选择输入端连接正弦加减运算器308的输出端,Y输出选择器319的另一个选择输入端悬空,Y输出选择器319的选择端连接迭代计数模块102,用于根据迭代计数模块102输出的预置拍数对正弦加减运算器308的输出结果选择输出;Y负数处理器312的输入端和Y输出选择器319的输出端相连接,Y结果选择器313的两个选择输入端分别与Y负数处理器312的输出端和Y输出选择器319的输出端连接,用于根据其选择端接收的角度预处理模块200输出的操作数二对应的弧度值的正弦函数值的符号位的信号,选择Y输出选择器319的输出结果的补码数据输出至Y结果寄存器314;其中Y结果寄存器314内存储的数值作为所述三角函数运算电路在预置拍数下的正弦函数值。

进一步地,正余弦迭代运算模块300的迭代运算次数设置为16,即i=16;对应的所述预置拍数为16;所述具有扩展符号位的运算数据位宽是48比特位;X寄存器303和Y寄存器304的位宽都设置为48比特位;Z寄存器317的位宽设置为32比特位;迭代计数模块102为一个5位的计数器,作为所述三角函数运算电路的节拍器。

作为本实用新型实施例二,当处理器根据用户指令配置计算三角函数的类型为反正切函数时,预处理模块101为正负预处理模块400,包括Y0负数处理器401和Y0结果选择器402,其中而Y0结果选择器402的一个选择输入端与Y0负数处理器401的输入端相连接,用于接收操作数一;Y0结果选择器402的另一个选择输入端与Y0负数处理器401的输出端相连接,用于根据其选择端接收的操作数一的符号位所确定的数值符号的信号,对操作数一进行补码处理,并将操作数一的符号位所确定的数值符号的信号输出至迭代运算模块103。

进一步地,迭代运算模块103为反正切迭代运算模块403,反正切迭代运算模块403包括所述本级的当前输出作为本级的下一次输入的反馈结构,该反馈结构包括X选择器301、Y选择器302、X寄存器303、Y寄存器304、Z选择器316、Z寄存器317、X符号位扩展器321、Y符号位扩展器322、Y符号选择器408、Y右移位器305、X右移位器306、余弦加减运算器307、正弦加减运算器308和反正切加减法器320;X符号位扩展器321,用于将操作数零的符号位及每一次迭代运算中余弦加减运算器307的输出结果的符号位重复复制以创建具有扩展符号位的运算数据,避免迭代运算过程中数据类型改变;Y符号位扩展器322,用于将正负预处理模块400输出的预处理结果的符号位及每一次迭代运算中正弦加减运算器308的输出结果的符号位重复复制以创建具有扩展符号位的运算数据,避免迭代运算过程中数据类型改变;Z选择器316,用于根据迭代计数模块102提供的第一拍,选择操作数二进入Z选择器316的第i级输入端,再存入Z寄存器317;反正切加减法器320的两个运算输入端分别与Z寄存器317的输出端、DDR模块的反正切函数输出端相连接,用于根据迭代计数模块102的拍数,DDR模块100提供与所述拍数对应的旋转角度θi,同时根据Y符号选择器408输出的符号位结果确定Z寄存器317当前输出数据与所述旋转角度θi的运算类型,并将运算结果输出至Z选择器316的第i+1级输入端,随着迭代计数模块102提供的拍数递增,Z选择器316将反正切加减法器320在上一拍的输出结果选择进入第i+1级输入端,作为当前拍的输入数据完成与旋转角度θi的运算,其中θi=tan-1(2-i),i=0,1,2,3,…n-1;X选择器301,用于根据迭代计数模块102提供的第一拍,选择操作数零进入X选择器301的第i级输入端,再输出至X符号位扩展器321进行符号位的扩展,将扩展结果存入X寄存器303;Y右移位器305的输入端连接Y寄存器304,余弦加减运算器307的两个运算输入端分别与X寄存器303的输出端和Y右移位器305的输出端相连接,用于根据Y符号选择器408输出的符号位结果的信号,确定X寄存器303当前输出数据和Y右移位器305当前输出的移位结果所执行的运算类型,并将运算结果输出至X选择器301的第i+1级输入端,随着迭代计数模块102提供的拍数递增,X选择器301将余弦加减运算器307在上一拍的输出结果选择进入第i+1级输入端再输出至X符号位扩展器321进行符号位的扩展,作为当前拍的输入数据参与上述符号位扩展后的移位加减运算,其中,Y右移位器305在第i次迭代运算时的移动位数为i,对应于迭代计数模块102提供的第i+1拍计数信号,i=0,1,2,3,…n-1;每一次迭代运算中X符号位扩展器321得到的具有扩展符号位的运算数据位宽相等;Y选择器302,用于根据迭代计数模块102提供的第一拍,选择正负预处理模块400输出的预处理结果进入Y选择器302的第i级输入端,再输出至Y符号位扩展器322进行符号位的扩展,将扩展结果存入Y寄存器304;X右移位器306的输入端连接X寄存器303,正弦加减运算器308的两个运算输入端分别与Y寄存器304的输出端和X右移位器306的输出端相连接,用于根据Y符号选择器408输出的符号位结果的信号,确定Y寄存器304当前输出数据和X右移位器306当前输出的移位结果所执行的运算类型,并将运算结果输出至Y选择器302的第i+1级输入端,随着迭代计数模块102提供的拍数递增,Y选择器302将正弦加减运算器308在上一拍的输出结果选择进入第i+1级输入端,再输出至Y符号位扩展器322进行符号位的扩展,作为当前拍的输入数据参与上述符号位扩展后的移位加减运算,其中,X右移位器306在第i次迭代运算时的移动位数为i,对应于迭代计数模块102提供的第i+1拍计数信号,i=0,1,2,3,…n-1;每一次迭代运算中Y符号位扩展器322得到的具有扩展符号位的运算数据位宽相同;Y符号选择器408,用于根据迭代计数模块102提供的第一拍,选择正负预处理模块400输出的预处理结果的符号位的信号进入Y符号选择器408的第i级输入端,后续迭代运算中,随着迭代计数模块102提供的拍数递增,相应的选择Y选择器302的第i+1级输入端的数据的符号位的信号作为确定余弦加减运算器307、正弦加减运算器308和反正切加减法器320运算类型的判断信号;其中,操作数零设置为一个常数,操作数二设置为0。

进一步地,反正切迭代运算模块403还包括Z负数处理器404、Z结果选择器405、Z结果寄存器406和Z输出选择器407;Z输出选择器407的一个选择输入端连接反正切加减法器320的输出端,Z输出选择器407的另一个选择输入端悬空,Z输出选择器407的选择端连接迭代计数模块102,用于根据迭代计数模块102输出的预置拍数对反正切加减法器320的输出结果选择输出;Z负数处理器404的输入端和Z输出选择器407的输出端连接,Z结果选择器405的两个选择输入端分别与Z负数处理器320的输出端和Z输出选择器407的输出端连接,用于根据其选择端接收的正负预处理模块400输出基于操作数一所确定的数值符号的信号,选择Z输出选择器407的输出结果的相应处理数据输出至Z结果寄存器406;其中Z结果寄存器406内存储的数值作为所述三角函数运算电路在预置拍数下的反正切函数值。

进一步地,反正切迭代运算模块403的迭代运算次数设置为16,即i=16;对应的所述预置拍数为16;所述具有扩展符号位的运算数据位宽是48比特位;X寄存器303和Y寄存器304的位宽都设置为48比特位;迭代计数模块102为一个5位的计数器,作为所述三角函数运算电路的节拍器。

与现有技术相比,三类三角函数的计算由硬件电路完成,处理器只需要填写计算对象和取出计算结果,且设置预处理模块提前确定三角函数的结果符号位,节省CPU的软件资源消耗,可大大节省CPU带宽,减小耗时;本实用新型实施例一和实施例二所提供的所述三角函数运算电路采用对每一次迭代运算的定点数进行符号位扩展,使得每一次移位计算时数据的符号位不变,防止运算精度的损失,节省硬件开销。

附图说明

图1为本实用新型实施例(根据计算的三角函数类型分为实施例一和实施例二)提供的一种三角函数运算电路的框架示意图;

图2为本实用新型实施例一提供的角度预处理模块内部结构示意图;

图3为本实用新型实施例一提供的正余弦迭代运算模块内部电路结构示意图;

图4为本实用新型实施例二提供的反正切迭代运算模块内部电路示意图。

具体实施方式

下面结合附图对本实用新型的具体实施方式作进一步说明:

本实用新型实施例的电路设计主要基于CORDIC算法的硬件实现。CORDIC算法是一种线性收敛和顺序执行的迭代算法,即对N位精度至少需要N次迭代,第i+1次迭代只有在第i次迭代完成后才能执行。CORDIC算法可以将多种难以用硬件实现的复杂运算分解为统一的简单移位、加法运算,然后逐次逼近结果。CORDIC算法可以应用在圆周系统、线性系统和双曲系统,每一系统又有旋转模式和向量模式之分。由于三角函数属于圆周系统,因此下面主要针对圆周系统下CORDIC的应用进行说明。

一种三角函数运算电路的模块框架如图1所示,该三角函数运算电路包括预处理模块101、迭代计数模块102、DDR模块100和迭代运算模块103。

预处理模块101,与DDR模块100相连接,用于在迭代计数模块102的计数拍数的驱动下,根据处理器配置的计算三角函数的类型对应地输入操作数一Y00和操作数二Z00,并结合DDR模块100提供的计算三角函数所需的常数π/2、π或2π分别对操作数一Y00和操作数二Z00进行修正,包括对应的弧度范围限定和符号位修正,使得所述三角函数运算电路的运算结果的符号位得到提前确定,并满足运算结果的精度;

迭代运算模块103,与预处理模块101连接,用于在迭代计数模块102的计数拍数的驱动下,结合预处理模块101输出的操作数二Z00的预处理结果,对操作数一Y00的预处理结果以及输入的操作数零X0进行扩展符号位的一级CORDIC算法迭代运算,通过本级的当前输出作为本级的下一次输入的反馈结构实现在同一级迭代,最后使用预处理模块101所确定的正弦函数、余弦函数或反正切函数的符号位作为迭代运算模块103并行输出的不同类型三角函数计算结果的符号位;因为所述三角函数运算电路基于CORDIC算法可以同时处理正弦函数和余弦函数的运算。

DDR模块100,与迭代运算模块103相连接,用于在迭代计数模块102的计数拍数的驱动下,将存储的i个旋转角度θi和计算三角函数所需的常数π/2、π或2π送往迭代运算模块103,并通过总线接口与处理器连接,使其在处理器接收迭代运算模块103发出的中断信号后接收迭代运算模块103的输出结果,其中θi=tan-1(2-i),i=0,1,2,3,…n-1,即迭代运算过程中,下一次送往迭代运算模块103的旋转角度θi+1是当前送往迭代运算模块103的旋转角度θi的一半,每进行一个计数拍下旋转角度必须使得正切值近似等于1/(2^i),当前拍数为i+1。其目的是让圆周系统下的Y轴趋近与0。然后把每次旋转的角度累加,即得到旋转的角度和即求出对应的反正切值。本实用新型实施例中,所述旋转角度θi采用32位二进制定点数,其对应的反正切值的最大值ATAN_MAX=32’h4DBA7073,其反正切的最小值ATAN_MIN=32’hB2458F8D。其中n取15,则所述旋转角度θi对应着15个反正切常数值;θ0选择25度,其对应的32位定点数为32’h001921FB,然后根据所述旋转角度θi=tan-1(2-i)(i=0,1,2,3,…15)的变化规律可推出15个反正切常数值对应的32位定点数。

迭代计数模块102,用于通过计数拍数信号与预处理模块101、迭代运算模块103和DDR模块100建立连接关系,使得迭代运算模块103在每一拍计数信号的驱动下根据预处理模块101和DDR模块100输入的信号完成每一级迭代运算。所述三角函数运算电路内部逻辑通过迭代的方法旋转16次特定的角度,使得累计旋转的角度和无限接近预置角度,且计算结果满足精度达到设定的定点精度。因此,为了满足迭代计算16次。在开始计算三角函数的时候,定义一个5位的计数器,作为三角函数计算的节拍器。迭代计数模块102为一个5位的计数器,作为所述三角函数运算电路的节拍器。

具体地,操作数零X0、操作数一Y00和操作数二Z00都是处理器发出的,操作数零X0和操作数一Y00都是二进制定点数,操作数二Z00是以弧度形式表示的二进制定点数。定点数实际上就是用整数来进行小数运算。操作数零X0、操作数一Y00和操作数二Z00都采用32位二进制数来表示定点数,且其小数点固定在第21位。在所述三角函数运算电路进行工作时候是以补码的形式在运算,正数的补码是本身,负数的补码要取反加1,有符号数的定点运算也需要进行补码处理。同时模是指一个计量系统的计数范围,表示n位的计算机计量范围是0~2^(n)-1,模=2^(n),而由于本实用新型实施例的输入操作数定点配置在21位,故对于电路中的计算的定点数是用户实际配置数据的2^21倍。需要说明的是,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想精度提高,则数的表示范围就相应地减小。为了达到最佳的运算精度,本实用新型实施例输入操作数定点配置在21位,进一步限定输入操作数所表示的数值范围。

具体的,圆周系统下CORDIC迭代方程表示如下:

xi+1=xi-Siyi·2-i

yi+1=yi+Sixi·2-i,i=0,1,2,…N-1,

zi+1=zi-Si·tan-1(2-i),

其中,xi、yi为平面圆周系统下向量的x,y坐标,zi+1表示第i次旋转之后剩余未旋转的角度,tan-1(2-i)可以预先求出。通过上述迭代公式,CORDIC算法将一次大的预设角度θ细化为n次小旋转角度θi(i=0,1,2,3,…n-1)之和,其中θi=tan-1(2-i)。如果一直朝着一个方向旋转,则根据旋转角之和一定会超过预设角度θ。因此需要对小旋转角度θi设定一个方向值Si。当旋转角之和已经大于预设角度θ,则方向值Si为-1,表示下次旋转为顺时针,即向预设角度θ靠近;当旋转角之和已经小于预设角度θ,则方向值Si为+1,然后可以得到每次旋转的角度值θiSi,则第i次旋转之后剩余未旋转的角度zi+1=zi-θiSi。根据上式中方向值Si的判读方式,CORDIC算法分为旋转模式和向量模式,旋转模式用来求解正余弦函数值,向量模式用来求解反正切函数值,相应的本实用新型实施例根据求解三角函数的类型分为实施例一和实施例二,旋转模式对应本实用新型实施例一,向量模式对应本实用新型实施例二。

在旋转模式下,初始旋转角度z0为预设角度θ,经过n次迭代,次数i不断地增大,第n-1次旋转之后剩余未旋转的角度zi+1将会趋近于0,此时,

且由CORDIC算法的推导过程有:

xn=P[x0·cos z0-y0·sin z0],

yn=P[y0·cos z0+x0·sin z0],

zn→0,

如果取x0=1/P,y0=0,则有

xn=P[x0·cos z0-y0·sin z0]=cosθ,

yn=P[y0·cos z0+x0·sin z0]=sinθ,

由此可见,CORDIC算法的旋转模式可以计算出一个输入角的正弦和余弦。其中趋近于常数,P称为校正因子,xn、yn为旋转后的向量坐标,x0、y0为旋转前的初始向量坐标。由此可见,CORDIC算法的旋转模式可以计算出一个输入角的正弦和余弦。

相应的,在本实用新型实施例一中,处理器根据用户指令配置计算三角函数的类型为正弦函数和余弦函数,所述三角函数运算电路的操作数零X0对应旋转前的初始向量的横坐标x0,操作数一Y00对应旋转前的初始向量的纵坐标y0,操作数二Z00对应初始旋转角度z0。所述三角函数运算电路内部逻辑通过迭代的方法旋转16次特定的角度,使得累计旋转的角度和无限接近预置角度,且计算结果满足精度达到设定的定点精度,其中每次旋转的角度为θi=tan-1(2-i),i=0,1,2,3…,15。本实用新型实施例一采用32位二进制数来表示定点数,小数点位置定在第21位。因此,输入弧度数值也必须采用这个定点数来表示。其中,有一些常参数也用这个格式的定点数来表示。比如π用32位定数表示为32’h006487ED,2π用32位定点数表示为32’h00C90FDB,π/2用32位定点数表示为32’h003243F6;操作数二Z00以弧度表示32位二进制定点数,其对应的十进制输入数据范围为[-1023.9999,+1023.9999],输出的相应的十进制的计算结果范围为[-1,1];正弦和余弦的输入数据最值为32’h80000000(对应±1024)。相应的,本实用新型实施例一中所述三角函数运算电路的输出计算结果的精度分别为正弦函数的精度为±0.000037,余弦函数的精度为±0.000036。

本实用新型实施例一中,如图2所示,预处理模块101为角度预处理模块200,用于通过与DDR模式100提供的计算三角函数所需的常数π/2、π或2π进行比较,从而判断输入操作数二Z00所对应的弧度值的正弦函数值的符号位和余弦函数值的符号位,同时根据三角函数变换关系将输入操作数二Z00所对应的弧度范围修正到[0,π/2]范围内;角度预处理模块200包括第二移位器202、第一移位器201、除法器203、乘法器204、符号选择器208、加减运算器205、第一减法器206、第二减法器207和第三减法器209;其中,第一移位器201,用于将DDR模式100提供的计算三角函数所需的常数2π对应的所述定点数往左移21位,并将左移的结果数据输出至除法器203和乘法器204;第二移位器202,与除法器203相连接,用于将输入的操作数二Z00往左移21位,并将左移的结果数据输出至除法器203;在计算正弦和余弦时,由于输入的操作数二Z00定点在21位,而硬件电路只支持整数运算。所以,首先需要将小数变成整数,即将操作数二Z00左移21位,将小数点移位到最后一位后面。同理,2π这个常数也需要左移21位,其小数位也丢掉,从而变成整数。由于操作数二Z00是32位,经过第二移位器202左移后变成一个53位的二进制数。

如图2所示,除法器203同时连接第一移位器201和第二移位器202,用于将第一移位器201的输出数据和第二移位器202的输出数据左移相减实现二进制除法运算,得到53位的整数相除结果M,并把相除结果输出至乘法器204;乘法器204,同时连接第一移位器201和除法器203,用于在操作数二Z00的最高位为1或操作数二Z00大于常数2π对应的所述定点数时,将除法器203的输出结果和第一移位器201的输出数据的每一位按位与产生相应的乘积位,然后左移相加得到相乘结果,并将相乘结果2πM输出至加减运算器205。

如图2所示,加减运算器205,与乘法器204相连接,用于在操作数二Z00的最高位bit[31]为1时,即Z00<0时,控制操作数二Z00与乘法器204输出结果2πM进行加法运算,得到修正结果Z01=Z00+2πM,从而变成正数,且其对应的修正弧度范围在[0,2π]之间。在操作数二Z00的最高位bit[31]为0且操作数二Z00大于常数2π对应的所述定点数时,即Z00>2π时,控制操作数二Z00与乘法器204输出结果进行减法运算,得到修正结果Z01=Z00-2πM,使得操作数二Z00所修正的对应弧度范围为[0,2π];这个处理过程花费迭代计数模块102的一个节拍。经过这个节拍处理后,数据都处于[0,2π]之间了。但是正弦和余弦的计算值在这个输入值范围内还不一致,还需要确定计算结果的符号位。

如图2所示,第一减法器206和第三减法器209,用于根据加减运算器205输出的修正结果Z01执行减法运算,当加减运算器205输出的修正结果Z01对应弧度范围为[π,2π]时,则将所述三角函数运算电路的正弦和余弦的计算结果都定为负值,符号位为1;同时加减运算器205的修正结果Z01输出至第一减法器206,与DDR模式100提供的常数π对应的所述定点数作减法操作,得到修正结果Z02=Z01-π,从而使得修正结果Z02对应弧度范围缩小为[0,π],正弦的符号位已经确定,但是余弦的符号位还需要再确认一次。然后第二减法器207,用于根据第一减法器206输出的修正结果Z02执行减法操作,当第一减法器206输出的修正结果对应弧度范围为[π/2,π]时,第一减法器206输出的修正结果Z02与DDR模式100提供的常数π/2对应的所述定点数作减法操作,得到修正结果Z03对应弧度范围缩小为[0,π/2],使得第二减法器207输出的修正结果对应弧度范围为[0,π/2];上述过程又花费迭代计数模块102的两个节拍。

如图2所示,当加减运算器205输出的修正结果Z01对应弧度范围为[π/2,π]时,则所述三角函数运算电路的正弦计算结果为正,符号位为0,余弦计算结果为负,符号位为1。此时余弦计算值应该修正为正值,将符号位置为0,则加减运算器205的修正结果Z01输出至第三减法器209,与DDR模式100提供的常数π对应的所述定点数作减法操作,得到修正结果Z03=π-Z01,从而使得修正结果Z03对应弧度范围缩小为[0,π/2],余弦计算值被修正为正值,符号位被置为0,从而完成修正过程。上述过程又花费迭代计数模块102的一个节拍。

如图2所示,符号选择器208,用于接收能够同时确定操作数二Z00的正弦函数符号位和操作数二的余弦函数符号位的对应的弧度范围的信号,所述弧度范围分别对应于确定正余弦函数符号位为1的[π,2π]、确定正弦函数符号位为0而余弦函数符号位为1的[π/2,π]和确定正余弦函数符号位为0的[0,π/2]。然后基于三角函数的变换关系选择相应的符号位作为所述三角函数运算电路运算结果的符号位,并输出操作数二对应的弧度值的正弦函数值的符号位信号sign(Y)和余弦函数值的符号位信号sign(X),其中所述三角函数运算电路运算结果包括操作数二Z00对应的弧度值的正弦函数值和余弦函数值。

作为本实用新型实施例一的一种方式,处理器根据用户指令配置计算三角函数的类型为正弦函数和余弦函数,如图3所示,角度预处理模块200将输入操作数预处理完成后,开始进入计算阶段了。在下一个节拍里,操作数零X0通过X符号位扩展器321将原32位的操作数零X0的最高位连续复制16次,来创建具有扩展符号位的48位定点数。当输入的操作数零X0为常数K时,可通过X符号位扩展器321进行符号位扩展,作为余弦计算的初始结果;相应地引入48比特位的X寄存器303进行存储以避免出现精度丢失,其中常数K扩展前的数值为32’h00136E9D;将0赋给操作数一Y00预处理的修正结果Y0,作为正弦计算初值,同时操作数一Y00通过Y符号位扩展器322将原32位的操作数零X0的最高位连续复制16位,来创建具有扩展符号位的48位定点数。相应的引入48比特位的Y寄存器304,暂存正弦在迭代过程中的计算结果。本实用新型实施例还提供32比特位的Z寄存器317,暂存反正切函数在迭代过程中的计算结果。

如图3所示,迭代运算模块103为正余弦迭代运算模块300,正余弦迭代运算模块300包括所述本级的当前输出作为本级的下一次输入的反馈结构,该反馈结构包括X选择器301、Y选择器302、X寄存器303、Y寄存器304、Z选择器316、Z寄存器317、角度符号选择器315、Y右移位器305、X右移位器306、余弦加减运算器307、正弦加减运算器308和反正切加减法器320。

X符号位扩展器321,用于将操作数零X0的符号位及每一次迭代运算中余弦加减运算器307的输出结果的符号位重复复制以创建具有扩展符号位的运算数据,其重复复制的次数与迭代运算的次数相等以避免迭代运算过程中数据类型改变;Y符号位扩展器322,用于将操作数一Y00的符号位及每一次迭代运算中正弦加减运算器308的输出结果的符号位重复复制以创建具有扩展符号位的运算数据,其重复复制的次数与迭代运算的次数相等以避免迭代运算过程中数据类型改变。

如图3所示,角度符号选择器315,用于根据迭代计数模块102提供的第一拍,选择角度预处理模块200输出的修正结果的符号位的信号sign(Z0)进入角度符号选择器315的第i级输入端sign(Zi),后续迭代运算中,随着迭代计数模块102提供的拍数递增,相应的选择Z选择器316的第i+1级输入端sign(Zi+1)的数据的符号位的信号进入角度符号选择器315,使得Z选择器316的第i+1级输入端sign(Zi+1)的信号作为确定余弦加减运算器307和正弦加减运算器308运算类型的判断信号。

Z选择器316,用于根据迭代计数模块102提供的第一拍,选择角度预处理模块200输出的修正结果进入Z选择器316的第i级输入端Zi,再存入Z寄存器317;反正切加减法器320的两个运算输入端分别与Z寄存器317的输出端、DDR模块100的反正切函数输出端相连接,用于根据迭代计数模块102提供的拍数,DDR模块100提供与所述拍数对应的旋转角度θi;在进入计算阶段后,迭代计数模块102提供的第i个节拍下,如果角度符号选择器315输出的符号位结果所对应的Z寄存器317的最高位为0,Z寄存器317当前输出数据减去DDR模块100提供的旋转角度θi,并将运算结果输出至Z选择器316的第i+1级输入端Zi+1;如果角度符号选择器315输出的符号位结果所对应的Z寄存器317的最高位为1,Z寄存器317当前输出数据加上DDR模块100提供的旋转角度θi,并将运算结果输出至Z选择器316的第i+1级输入端Zi+1;随着迭代计数模块102提供的拍数递增,Z选择器316将反正切加减法器320在上一拍的输出结果选择进入第i+1级输入端,作为当前拍的输入数据完成与旋转角度θi的加减运算,其中θi=tan-1(2-i),i=0,1,2,3,…15,即根据角度符号选择器315输出的符号位结果,Z寄存器317存储数据在每一节拍中依次加上或减去DDR模块100提供的16个反正切值,从而得到新的值,作为下一节拍时计算值存放在Z寄存器317中。

如图3所示,X选择器301,用于根据迭代计数模块102提供的第一拍,选择操作数零X0进入X选择器301的第i级输入端Xi,再输出至X符号位扩展器321进行符号位的扩展,将扩展结果存入X寄存器303;Y右移位器305的输入端连接Y寄存器304,余弦加减运算器307的两个运算输入端分别与X寄存器303的输出端和Y右移位器305的输出端相连接。当角度符号选择器315输出的符号位结果为0,即当前节拍下Z寄存器317内存储数据最高位的值为0时,将X寄存器303当前输出数据减去Y右移位器305当前输出的移位结果,即对应余弦计算时将当前正弦值右移,再用当前的余弦值减去右移之后的正弦值,然后将运算结果输出至X选择器301的第i+1级输入端Xi+1,再输出至X符号位扩展器321,在X符号位扩展器321中将运算结果的符号位连续复制到扩展位,然后将扩展结果存储回X寄存器303,更新余弦函数值。当角度符号选择器315输出的符号位结果为1,即当前节拍下Z寄存器317内存储数据最高位的值为1时,将X寄存器303当前输出数据加上Y右移位器305当前输出的移位结果,即对应余弦计算时将当前正弦值右移,再用当前的余弦值加上右移之后的正弦值,然后将运算结果输出至X选择器301的第i+1级输入端Xi+1,再输出至X符号位扩展器321,在X符号位扩展器321中将运算结果的符号位连续复制到扩展位,然后将扩展结果存储回X寄存器303,更新余弦函数值,其中运算结果在X符号位扩展器321中扩展得到的数据位宽与X寄存器303的位宽相匹配。随着迭代计数模块102提供的拍数递增,X选择器301将余弦加减运算器307在上一拍的输出结果选择进入第i+1级输入端Xi+1,再输出至X符号位扩展器321进行符号位的扩展,作为当前拍的输入数据参与上述符号位扩展后的移位加减运算,其中,Y右移位器305在第i次迭代运算时的移动位数为i,对应于迭代计数模块102提供的第i+1拍计数信号,i=0,1,2,3,…15;即第一个节拍右移0位,第二个节拍,将上一次的正弦值右移1位,如此类推。但每一次迭代运算中X符号位扩展器321得到的具有扩展符号位的运算数据位宽相等。

如图3所示,Y选择器302,用于根据迭代计数模块102提供的第一拍,选择操作数一Y00进入Y选择器302的第i级输入端Yi,再输出至Y符号位扩展器322进行符号位的扩展,将扩展结果存入Y寄存器304;X右移位器306的输入端连接X寄存器303,正弦加减运算器308的两个运算输入端分别与Y寄存器304的输出端和X右移位器306的输出端相连接。当角度符号选择器315输出的符号位结果为0,即当前节拍下Z寄存器317内存储数据最高位的值为0时,对Y寄存器304当前输出数据加上X右移位器306当前输出的移位结果,即对应正弦计算时将当前余弦值右移,再与当前的正弦值相加,然后将运算结果输出至Y选择器302的第i+1级输入端Yi+1,再输出至Y符号位扩展器322,在Y符号位扩展器322中将运算结果的符号位连续复制到扩展位,然后将扩展结果存储回Y寄存器304,更新正弦函数值。当角度符号选择器315输出的符号位结果为1,即当前节拍下Z寄存器317内存储数据最高位的值为1时,对Y寄存器304当前输出数据减去X右移位器306当前输出的移位结果,即对应正弦计算时将当前余弦值右移,再与当前的正弦值相减,然后将运算结果输出至Y选择器302的第i+1级输入端Yi+1,再输出至Y符号位扩展器322,在Y符号位扩展器322中将运算结果的符号位连续复制到扩展位,然后将扩展结果存储回Y寄存器304,更新正弦函数值。其中,运算结果在Y符号位扩展器322中扩展得到的数据位宽与Y寄存器304的位宽相匹配。随着迭代计数模块102提供的拍数递增,Y选择器302将正弦加减运算器308在上一拍的输出结果选择进入第i+1级输入端Yi+1,再输出至Y符号位扩展器322进行符号位的扩展,作为当前拍的输入数据参与上述符号位扩展后的移位加减运算,其中,X右移位器306在第i次迭代运算时的移动位数为i,对应于迭代计数模块102提供的第i+1拍计数信号,i=0,1,2,3,…15;即第一个节拍右移0位,第二个节拍将上一次的余弦值右移1位,如此类推。但每一次迭代运算中X符号位扩展器321得到的具有扩展符号位的运算数据位宽相等。

特别的,X寄存器303、Y寄存器304和Z寄存器317都是可复用的寄存器,且X寄存器303和Y寄存器304实现同步存储,使得所述三角函数运算电路并行输出正弦函数结果和余弦函数结果。

作为本实用新型实施例一的一种方式,如图3所示,正余弦迭代运算模块300还包括X负数处理器309、X结果选择器310、X结果寄存器311、Y负数处理器312、Y结果选择器313、Y结果寄存器314、X输出选择器318和Y输出选择器319。

X输出选择器318的一个选择输入端连接余弦加减运算器307的输出端,X输出选择器318的另一个选择输入端悬空,X输出选择器318的选择端连接迭代计数模块102,用于根据迭代计数模块102输出的预置拍数对余弦加减运算器307的输出结果选择输出进行补码处理;本实用新型实施例一中预置拍数为第16拍。当16个节拍的计算完成后,不再进行符号位的扩展;在第17个节拍,根据正弦符号位信号sign(Y)和余弦的符号位信号sign(X)对16拍的计算结果进行处理。其中所述正弦和余弦的符号位在对输入操作数进行处理时就已经确定。

X负数处理器309的输入端和X输出选择器318的输出端连接,X结果选择器310的两个选择输入端分别与X负数处理器309的输出端和余弦加减运算器307的输出端连接,用于根据其选择端接收的角度预处理模块200输出的操作数二Z00对应的弧度值的余弦函数值的符号位的信号sign(X),选择X输出选择器318的输出结果的补码数据输出至X结果寄存器311,当操作数二Z00对应的弧度值的余弦函数值的符号位为1,在其信号sign(X)的选择控制下,X输出选择器318的输出数据经过X负数处理器309进行取反加一操作,再将被选择输出至X结果寄存器311,当操作数二Z00对应的弧度值的余弦函数值的符号位为0,在其信号sign(X)的选择控制下,X输出选择器318的输出数据被选择直接输出至X结果寄存器311;其中X结果寄存器311内存储的数值作为所述三角函数运算电路的正余弦迭代运算模块300经过16个计数拍后的余弦函数值。

Y输出选择器319的一个选择输入端连接正弦加减运算器308的输出端,Y输出选择器319的另一个选择输入端悬空,Y输出选择器319的选择端连接迭代计数模块102,用于根据迭代计数模块102输出的预置拍数对正弦加减运算器308的输出结果选择输出进行补码处理;本实用新型实施例一中预置拍数为第17拍,即当16个节拍的计算完成后,在第17个节拍,根据正弦和余弦的符号位对计算结果进行处理。正弦和余弦的符号位在对输入操作数进行处理时就已经确定。

Y负数处理器312的输入端和Y输出选择器319的输出端相连接,Y结果选择器313的两个选择输入端分别与Y负数处理器312的输出端和Y输出选择器319的输出端连接,用于根据其选择端接收的角度预处理模块200输出的操作数二Z00对应的弧度值的正弦函数值的符号位的信号sign(Y),选择Y输出选择器319的输出结果的补码数据输出至Y结果寄存器314,当操作数二Z00对应的弧度值的正弦函数值的符号位是1,在其对应信号sign(Y)的控制下,Y输出选择器319的输出数据经过Y负数处理器312进行取反加一操作,再将被选择输出至Y结果寄存器314,当操作数二Z00对应的弧度值的正弦函数值的符号位是0,在其对应信号sign(Y)的控制下,Y输出选择器319的输出数据被选择直接输出至Y结果寄存器314;其中Y结果寄存器314内存储的数值作为所述三角函数运算电路的正余弦迭代运算模块300经过16个计数拍后获得正弦函数值。本实用新型实施例一中所述三角函数运算电路的数值一律用补码来表示和存储。原因是使用补码,可以将符号位和数值域统一处理;同时加法和减法也可以统一处理。此外,补码和原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

在向量模式下,设初始旋转角度z0=0,经过n次旋转后,使得旋转后的向量坐标yn=0,由CORDIC算法的推导过程有:

yn=0,

zn=z0+tan-1(y0/x0),

当x0=1时,zn=tan-1(y0)。由此可见,CORDIC算法的旋转模式可以计算出一个输入角度的反正切函数值。其中趋近于常数,P称为校正因子,xn、yn为旋转后的向量坐标,x0、y0为旋转前的初始向量坐标。

相应的,本实用新型实施例二处理器根据用户指令配置计算三角函数的类型为反正切函数函数,所述三角函数运算电路的操作数零X0对应旋转前的初始向量的横坐标x0,操作数一Y00对应旋转前的初始向量的纵坐标y0,操作数二Z00对应初始旋转角度z0。同时DDR模块在处理器的控制指令作用下将π弧度均分16等分后计算所得的16个反正切值输入所述三角函数运算电路,其中16个反正切值分别为θi=tan-1(2-i),i=0,1,2,3…,15。本实用新型实施例二采用32位二进制数来表示定点数,小数点位置定在第21位。因此,输入弧度数值也必须采用这个定点数来表示。其中,有一些常参数也用这个格式的定点数来表示。比如π用32位定数表示为32’h006487ED,2π用32位定点数表示为32’h00C90FDB,π/2用32位定点数表示为32’h003243F6;操作数一Y00为32位二进制定点数,其输入定点数的最大值为32’h4DBA7073(对应+621.823853),最小值为32’hB2458F8D(对应-621.823853),即对应的十进制输入数据范围为[-621.823853,+621.823853],输出的相应的十进制的计算结果弧度范围为本实用新型实施例二将实际待运算的十进制数据的小数点位置定在32位输入信号的第21位,故所述三角函数运算电路的输入信号基于实际待运算的十进制数据都放大2^21倍,本实用新型实施例二中所述三角函数运算电路输出计算结果的精度为±0.000034,从而避免浮点运算且维持运算结果的精度不变。

本实用新型实施例二中,处理器根据用户指令配置计算三角函数的类型为反正切函数时,如图4所示,预处理模块101为正负预处理模块400,包括Y0负数处理器401和Y0结果选择器402,其中Y0结果选择器402的一个选择输入端与Y0负数处理器401的输入端相连接,用于接收操作数一Y00以通过其符号位进行选择预处理;Y0结果选择器402的另一个选择输入端与Y0负数处理器401的输出端相连接,用于根据其选择端接收的操作数一Y00最高位bit[31]所确定的数值符号的信号sign(Y00),确定操作数一Y00的预处理方式,当操作数一Y00最高位bit[31]为1,操作数一Y00表示负数,则根据信号sign(Y00)的指示,操作数一Y00在Y0负数处理器401中进行取反加一操作,再将Y0负数处理器401的预处理结果选择输出,当操作数一Y00最高位bit[31]为0,操作数一Y00表示正数,则操作数一Y00被选择直接输出。正负预处理模块400通过上述方法完成操作数一Y00的补码处理。

作为本实用新型实施例二的一种方式,当处理器根据用户指令配置计算三角函数的类型为反正切函数时,将输入操作数一Y00处理完成后,进入计算阶段。此处同样引入一个5位的计数器,即迭代计数模块102,作为三角函数计算的节拍器。同时,还引入2个48位的X寄存器303和Y寄存器304。数据处理完成后,在开始函数计算前,将操作数零X0的最高位通过X符号位扩展器321重复复制16次,即操作数零X0扩展符号位至48位,使得输入值被组合成一个48位的二进制数值;当输入的操作数零X0为修正参数FIX时,可通过X符号位扩展器321进行符号位扩展,其中扩展前的修正参数FIX为32’h00200000的32位定点数。同时将正负预处理模块400处理的修正结果通过Y符号位扩展器322创建具有扩展符号位的48位定点数。同时,操作数二Z00被赋给一个初值0。然后进入16个节拍的计算过程。

如图4所示,迭代运算模块103为反正切迭代运算模块403,反正切迭代运算模块403包括所述本级的当前输出作为本级的下一次输入的反馈结构,该反馈结构包括X选择器301、Y选择器302、X寄存器303、Y寄存器304、Z选择器316、Z寄存器317、Y符号选择器408、Y右移位器305、X右移位器306、余弦加减运算器307、正弦加减运算器308和反正切加减法器320;X符号位扩展器321,用于将操作数零X0的符号位及每一次迭代运算中余弦加减运算器307的输出结果的符号位重复复制以创建具有扩展符号位的运算数据,其重复复制的次数与迭代运算的次数相等以避免迭代运算过程中数据类型改变;Y符号位扩展器322,用于将正负预处理模块400的修正结果的符号位及每一次迭代运算中正弦加减运算器308的输出结果的符号位重复复制以创建具有扩展符号位的运算数据,其重复复制的次数与迭代运算的次数相等以避免迭代运算过程中数据类型改变。

Z选择器316,用于根据迭代计数模块102提供的第一拍,选择操作数二Z00进入Z选择器316的第i级输入端Zi,再存入Z寄存器317;反正切加减法器320的两个运算输入端分别与Z寄存器317的输出端、DDR模块的反正切函数输出端相连接,用于根据迭代计数模块102提供的拍数,DDR模块100提供与所述拍数对应的旋转角度θi,同时根据Y符号选择器408输出的符号位结果将Z寄存器317当前输出数据与所述旋转角度θi作相应的运算类型。进入计算反正切函数的第i个节拍下,Y寄存器304内存储数据大于0时,将Z寄存器317当前输出数据与所述旋转角度θi作加法运算,即用Z寄存器317当前输出的反正切函数计算值按照迭代计数模块102的节拍数依次加上16个反正切常数值,并将运算结果输出至Z选择器316的第i+1级输入端,随着迭代计数模块102提供的拍数递增,Z选择器316将反正切加减法器320在上一拍的输出结果选择进入第i+1级输入端,作为当前拍的输入数据完成与旋转角度θi的运算,其中θi=tan-1(2-i),i=0,1,2,3,…15;即第1个节拍,用当前函数值加上第1个反正切常数值对应的所述旋转角度θ0,第2个节拍,用第1个节拍计算的函数值加上第2个反正切常数值对应的所述旋转角度θ1,依次类推,第16个节拍时,用第15个节拍计算的函数值加上第16个反正切常数值对应的所述旋转角度θ15。进入计算反正切函数的第i个节拍下,Y寄存器304内存储数据小于或等于0时,将Z寄存器317当前输出数据与所述旋转角度θi作减法运算,即用Z寄存器317当前输出的反正切函数计算值按照迭代计数模块102的节拍数依次减去16个反正切常数值,并将运算结果输出至Z选择器316的第i+1级输入端,然后存储回Z寄存器317,更新Z寄存器317内的反正切函数值。随着迭代计数模块102提供的拍数递增,Z选择器316将反正切加减法器320在上一拍的输出结果选择进入第i+1级输入端,作为当前拍的输入数据完成与旋转角度θi的运算,其中θi=tan-1(2-i),i=0,1,2,3,…15;即第1个节拍,用当前函数值减去第1个反正切常数值对应的所述旋转角度θ0,第2个节拍,用第1个节拍计算的函数值减去第2个反正切常数值对应的所述旋转角度θ1,依次类推,第16个节拍时,用第15个节拍计算的函数值减去第16个反正切常数值对应的所述旋转角度θ15。

如图4所示,X选择器301,用于根据迭代计数模块102提供的第一拍,选择操作数零X0进入X选择器301的第i级输入端Xi,再输出至X符号位扩展器321进行符号位的扩展,将扩展结果存入X寄存器303;Y右移位器305的输入端连接Y寄存器304,余弦加减运算器307的两个运算输入端分别与X寄存器303的输出端和Y右移位器305的输出端相连接。当Y符号选择器408输出的符号位结果为0时,将X寄存器303当前输出数据加上Y右移位器305当前输出的移位结果,然后将运算结果输出至X选择器301的第i+1级输入端Xi+1,再输出至X符号位扩展器321进行符号位的扩展,将扩展结果存储回X寄存器303,更新X寄存器303内的数值。当Y符号选择器408输出结果小于或等于0时,将X寄存器303当前输出数据减去Y右移位器305当前输出的移位结果,然后将运算结果输出至X选择器301的第i+1级输入端Xi+1,再输出至X符号位扩展器321进行符号位的扩展,将扩展结果存储回X寄存器303,更新X寄存器303内的数值。随着迭代计数模块102提供的拍数递增,X选择器301将余弦加减运算器307在上一拍的输出结果选择进入第i+1级输入端,作为当前拍的输入数据参与上述符号位扩展后的移位加减运算,其中,Y右移位器305在第i次迭代运算时的移动位数为i,对应于迭代计数模块102提供的第i+1拍计数信号,i=0,1,2,3,…15;即右移位数为节拍器的节拍数减去1,即第一个节拍右移0位,第二个节拍右移1位,第三个节拍右移2位,如此类推,第16个节拍就右移15位。每一次迭代运算中X符号位扩展器321得到的具有扩展符号位的运算数据位宽都等于48比特位;其中X寄存器303、Y寄存器304和Z寄存器317都是可复用的寄存器。

如图4所示,Y选择器302,用于根据迭代计数模块102提供的第一拍,选择正负预处理模块400的输出结果进入Y选择器302的第i级输入端Yi,再输出至Y符号位扩展器322进行符号位的扩展,将扩展结果存入Y寄存器304;X右移位器306的输入端连接X寄存器303,正弦加减运算器308的两个运算输入端分别与Y寄存器304的输出端和X右移位器306的输出端相连接。当Y符号选择器408输出的符号位结果为0,对Y寄存器304当前输出数据减去X右移位器306当前输出的移位结果,然后将运算结果输出至Y选择器302的第i+1级输入端Yi+1,再输出至Y符号位扩展器322进行符号位的扩展,将扩展结果存储回Y寄存器304并更新存储数值。当Y符号选择器408输出结果小于或等于0时,对Y寄存器304当前输出数据加上X右移位器306当前输出的移位结果,然后将运算结果输出至Y选择器302的第i+1级输入端Yi+1,再输出至Y符号位扩展器322进行符号位的扩展,将扩展结果存储回Y寄存器304并更新存储数值。随着迭代计数模块102提供的拍数递增,Y选择器302将正弦加减运算器308在上一拍的输出结果选择进入第i+1级输入端Yi+1,再输出至Y符号位扩展器322进行符号位的扩展,作为当前拍的输入数据参与上述符号位扩展后的移位加减运算,其中,X右移位器306在第i次迭代运算时的移动位数为i,对应于迭代计数模块102提供的第i+1拍计数信号,i=0,1,2,3,…15;即右移位数为节拍器的节拍数减去1,即第一个节拍右移0位,第二个节拍右移1位,第三个节拍右移2位,如此类推,第16个节拍就右移15位。每一次迭代运算中Y符号位扩展器322得到的具有扩展符号位的运算数据位宽都等于48比特位;其中X寄存器303、Y寄存器304和Z寄存器317都是可复用的寄存器。

如图4所示,Y符号选择器408,用于根据迭代计数模块102提供的第一拍,选择正负预处理模块400输出结果的符号位的信号sign(Y0)进入Y符号选择器408的第i级输入端sign(Yi),后续迭代运算中,随着迭代计数模块102提供的拍数递增,相应的选择Y选择器302的第i+1级输入端sign(Yi+1)的数据的符号位的信号进入Y符号选择器408,使得Y选择器302的第i+1级输入端sign(Yi+1)的信号作为确定余弦加减运算器307、正弦加减运算器308和反正切加减法器320运算类型的判断信号。

如图4所示,反正切迭代运算模块403还包括Z负数处理器404、Z结果选择器405、Z结果寄存器406和Z输出选择器407。Z输出选择器407的一个选择输入端连接反正切加减法器320的输出端,Z输出选择器407的另一个选择输入端悬空,Z输出选择器407的选择端连接迭代计数模块102,用于根据迭代计数模块102输出的预置拍数反正切加减法器320的输出结果选择输出进行补码处理;本实用新型实施例一中预置拍数为第16拍。当16个节拍的计算完成后,在第17个节拍,根据信号sign(Y00)对16拍的计算结果进行处理。其中信号sign(Y00)是在对输入操作数进行处理时已经确定的所述三角函数运算电路所求的反正切函数值的符号位信号。

Z负数处理器404的输入端和Z输出选择器407的输出端连接,Z结果选择器405的两个选择输入端分别与Z负数处理器320的输出端和Z输出选择器407的输出端连接,用于根据其选择端接收的正负预处理模块400输出的操作数一Y00所确定的数值符号的信号,选择Z输出选择器407的输出结果的相应处理数据输出至Z结果寄存器406,当操作数一Y00对应的所述符号位为1,则Z输出选择器407的输出数据经过Z负数处理器404进行取反加一操作,再将被选择输出至Z结果寄存器406;当操作数一Y00对应的所述符号位为0,则Z输出选择器407的输出数据被选择直接输出至Z结果寄存器406;其中Z结果寄存器406内存储的数值作为所述三角函数运算电路在反正切迭代运算模块403经过16拍计数所得到的反正切函数值。

本实用新型提供的一种基于定点数的三角函数运算电路使用了硬件编程语言在RTL级进行了描述。基于标准单元工艺库使用Verdi综合工具进行了逻辑综合;采用时序驱动的设计方法,用Cadence布局布线工具进行了布局布线。

以上所描述的装置实施方式仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施方式方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1