一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于使用坐标旋转数字计算机(CORDIC)对浮点三角函数进行硬件高效自适应计算的装置和方法与流程

2021-11-29 11:47:00 来源:中国专利 TAG:

用于使用坐标旋转数字计算机(cordic)对浮点三角函数进行硬件高效自适应计算的装置和方法
1.相关申请的交叉引用
2.本技术要求于2019年2月20日提交的美国临时申请62/807,852的优先权,其内容通过引用整体并入。
技术领域
3.本公开涉及用于实现三角函数的电路和方法,尤其涉及用于使用坐标旋转数字计算机(cordic)对浮点三角函数进行硬件高效自适应计算的电路和方法。


背景技术:

4.诸如图形处理单元(gpu)的加速器电路可以包括被配置为执行数值函数的计算的电路。数值函数可以根据由数值函数定义的某些数学关系将一个或多个输入值转换为一个或多个输出值。数值函数的示例可以包括广泛用于诸如图像处理和机器学习的实际应用中的三角函数。
5.用于执行数值函数的计算的运算符的类型确定了实现这些数值函数的电路的复杂性以及执行这些计算所需的时间。众所周知,与移位运算符或加法运算符的电路实现相比,乘法运算符的电路实现要复杂得多。因此,具有小尺寸集成电路(例如,小尺寸现场可编程门阵列(fpga)电路)的电路通常不支持乘法运算符的直接计算。对于此类应用,采用坐标旋转数字计算机(cordic)算法来执行各种数值函数的计算。cordic算法使用旋转而不是乘法来执行计算,从而显著降低了实现这些数值函数的硬件电路的复杂性。
附图说明
6.从下面给出的详细描述以及从本公开的各种实施方式的附图,将更全面地理解本公开。然而,不应认为附图将本公开内容限制于具体实施方式,而是仅用于解释和理解。
7.图1示出了根据本公开的实施方式的用于自适应地计算三角函数的方法的流程图。
8.图2示出了根据本公开的实施方式的用于执行三角函数的自适应计算的系统。
9.图3示出了根据本公开的实施方式的cordic的内部级,其包括用于将被组合成单个块的每个操作的循环。
具体实施方式
10.本公开中描述的cordic算法被开发来计算定点输入值的三角函数。cordic算法采用一系列迭代的旋转步骤来近似关于一个或多个输入值的三角函数。三角函数可能包括sin x、cos x、sin
‑1x(或arcsin(x))、cos
‑1x(或arccos(x))、tan
‑1x(或arctan(x))等。因为cordic算法的每个迭代步骤都涉及旋转计算而不调用乘法计算,所以支持cordic算法的实现的电路可以简单得多,并且可以在fpga电路板上实现的小电路占用空间(即小电路面积)
中实现。
11.在计算三角函数时,输入值(例如实数)可以表示为定点数或浮点数。cordic算法的当前实施方式主要用于定点输入值。在计算中,实数的定点数表示包括用于表示实数的整数部分的第一固定位数和用于表示实数的小数部分的第二固定位数。n位(二进制)点数可以被认为是n位整数除以比例因子2m。这相当于将数字视为在位m和m

1之间有一个小数点。
12.下图假设比例因子为25的8位数字,因此小数点位于第5位和第4位之间。
13.765
·
43210
14.在这种情况下,位模式0101_1001被解释为实数定点数通常以与整数处理有符号数相同的方式来表示负数,使用2的补码表示,而不是显式的符号位。
15.实数的浮点数表示包括符号位、表示有效数字(或有效数)的固定位数以及用于缩放有效数的指数。例如,在ieee浮点数表示中,实数表示为
±
1.m*2
exp
,其中尾数1.m是范围(1.0

2.0]中的一个数,小数m为固定位数,其中位数取决于实现。指数exp是一个范围内的整数,该范围也取决于实现。符号位用于指示符号( 或

)。在ieee单精度浮点的情况下,23位用于小数部分m。指数exp的范围是127到

126。ieee浮点数表示还包括特殊情况的表示,例如非规格化数和无穷大。
16.cordic算法在计算三角函数时使用旋转而不是乘法,允许三角函数计算的高效硬件实现。以计算正弦(即sin())和余弦(即cos())函数为例,cordic算法是通过重复应用以下恒等式来计算三角函数sin x和cos x
17.sin(x y)=sin(x)cos(y) cos(x)sin(y)
18.cos(x y)=cos(x)cos(y)

sin(x)sin(y)
19.上面的等式可以重写为:
20.sin(x y)=cos(y)[sin(x) tan(y)cos(x)]
[0021]
cos(x y)=cos(y)[cos(x)

tan(y)sin(x)]
[0022]
选择x=θ
i
=tan
‑1(2

i
),上面的等式可以写成:
[0023]
sin(θ
i
y)=cos(θ
i
)[sin(y) tan(θ
i
)cos(y)]
[0024]
cos(θ
i
y)=cos(θ
i
)[cos(y)

tan(θ
i
)sin(y)]
[0025]
其可以展开为:
[0026]
sin(θ
i
y)=cos(θ
i
)[sin(y) cos(y)/2
i
]
[0027]
cos(θ
i
y)=cos(θ
i
)[cos(y)

sin(y)/2
i
]
[0028]
其中(对于定点)除以2
i
可以在硬件中实现为右移i次。
[0029]
给定的输入角α在第一象限中可以近似为其中δ
i

±
1。近似的精度由项数n确定。给定α,三角函数值sinα
n
和cosα
n
可以使用以下步骤来计算:
[0030]
sin(θ0)=cordic算法
[0031][0032]
sin(δ1θ1 θ0)=cos(θ1)[sin(θ0) δ1cos(θ0)/21]
[0033]
cos(δ1θ1 θ0)=cos(θ1)[cos(θ0)

δ1sin(θ0)/21]
[0034]
sin(δ2θ2 δ1θ1 θ0)=cos(θ2)[sin(δ1θ1 θ0) δ2cos(δ1θ1 θ0)/22]
[0035]
cos(δ2θ2 δ1θ1 θ0)=cos(θ2)[cos(δ1θ1 θ0)

δ2sin(δ1θ1 θ0)/22]
[0036]
这些公式可以概括为以下递推:
[0037]
sin(δ
i
θ
i
δ
i
‑1θ
i
‑1

θ0)=cos(θ
i
)[sin(δ
i
‑1θ
i
‑1

θ0) δ
i
cos(δ
i
‑1θ
i
‑1

θ0)/2
i
]
[0038]
cos(δ
i
θ
i
δ
i
‑1θ
i
‑1

θ0)=cos(θ
i
)[cos(δ
i
‑1θ
i
‑1

θ0)

δ
i
sin(δ
i
‑1θ
i
‑1

θ0)/2
i
]
[0039]
请注意,该序列的计算包括在每一步乘以cos(θ
i
)。这可以通过认识到这些乘法可以被因式分解从而有一个乘以的乘法来避免。为了利用这一事实,可以重写递推,以便:
[0040][0041][0042]
x
i
=x
i
‑1 δ
i
y
i
‑1/2
i
[0043]
y
i
=y
i
‑1‑
δ
i
x
i
‑1/2
i
[0044]
sinα
n
和cosα
n
可以通过在末尾乘以k
n
来恢复,从而
[0045]
sin(αi
)
=k
i
x
i
[0046]
cos(α
i
)=k
i
y
i
[0047]
如果可以基于对α的近似的精度预先确定n,则可以通过与k
n
的预乘来避免与k
n
的最终乘法。这相当于用k
n
初始化x0和y0。所以,
[0048][0049][0050]
sin(α
n
)=x
n
[0051]
cos(α
n
)=y
n
[0052]
给定用于计算sin(α)或cos(α)的角度α,cordic算法包括在每个步骤i计算δ
i
,以便最终的α
n
可以最好地近似α。标准方法是基于当前的近似值α
i
是否小于α来选择 或


[0053]
使用cordic计算sin和/或cos的伪代码是:
[0054][0055][0056]
代码包含一个小的变化,即,不是用对应于θ0的值初始化a
i
/y/x,而是在循环外将它们初始化为0/0/k
n
。在第一次迭代结束时,它们对应于θ0的值。如图所示,用于计算sin和/或cos函数的cordic算法涉及移位运算符(>>)和加法/减法运算符( /

),但没有乘法运算符。因此,cordic算法可以在诸如fpga电路之类的小尺寸电路中实现。
[0057]
一些实施方式可以使用双旋转2θ
i
而不是单旋转θ
i
。在双旋转中,每一步增加
±

i
,而不是增加
±
θ
i

[0058]
sin(x δ
i

i
)=sin(x)cos(δ
i

i
) cos(x)sin(δ
i

i
)
[0059]
cos(x 2δ
i
θ
i
)=cos(x)cos(2θ
i
)

sin(x)sin(δ
i

i
)
[0060]
展开后
[0061]
sin(x 2θ
i
)=sin(x)[cos2(θ
i
)

sin2(θ
i
)] cos(x)2δ
i sin(θ
i
)cos(θ
i
)
[0062]
cos(x 2θ
i
)=cos(x)[cos2(θ
i
)

sin2(θ
i
)]

sin(x)2δ
i sin(θ
i
)cos(θ
i
)
[0063]
重新排列和分解提供
[0064]
sin(x 2θ
i
)=cos2(θ
i
)[sin(x) δ
i 2tan(θ
i
)cos(x)

tan2(θ
i
)sin(x)]
[0065]
cos(x 2θ
i
)=cos2(θ
i
)[cos(x)

δ
i 2tan(θ
i
)sin(x)

tan2(θ
i
)cos(x)]
[0066]
展开tan(θ
i
)提供
[0067]
sin(x 2θ
i
)=cos2(θ
i
)[sin(x) δ
i cos(x)/2
i
‑1‑
sin(x)/2
2i
]
[0068]
cos(x 2θ
i
)=cos2(θ
i
)[cos(x)

δ
i sin(x)/2i
‑1‑
cos(x)/2
2i
]
[0069]
双旋转的递推关系为:
[0070]
x
i
=x
i
‑1 δ
i
y
i
‑1/2
i
‑1‑
x
i
‑1/2
2i
[0071]
y
i
=y
i
‑1‑
δ
i
x
i
‑1/2
i
‑1‑
y
i
‑1/2
2i
[0072]
在这种情况下,并且
[0073]
使用双旋转cordic实现sin/cos的代码是
[0074][0075][0076]
其中,此代码中的k
n
是余弦的平方的乘积。
[0077]
cos(θ
i
)可以计算如下:
[0078][0079]
1/cos2(θ
i
)=1 2

2i
[0080]
对于使用cordic计算sin
‑1(v),算法可以选择一系列的δ
i
来构建α
n
,使得sin(α
n
)接近v。算法是基于sin(α
i
)是否小于v来为δ
i 1
选择 或

。为了计算x
i
和y
i
而不是sinα
i
和cosα
i
,可能需要修改此方法以估算:
[0081]
sin(α
i
)<v≡k
i
x
i
<v≡x
i
<v/k
i
[0082]
现在,使v
i
=v/k
i
。在这种情况下,可以使用用于双旋转cordic)的以下递推
[0083]
v
i
=v/k
i
=v
i
‑1/cos2(θ
i
)=v
i
‑1(1/cos2(θ
i
))
[0084]
请注意,对于单旋转cordic,1/cos2(θ
i
)项将替换为1/cos(θ
i
),这可能需要乘法来实现。在双旋转cordic中,v
i
的递推可以简化为
[0085]
v
i
=v
i
‑1(1 2

2i
)
[0086]
这可以使用移位和加法来实现。
[0087]
arcsin的代码是:
[0088][0089][0090]
相应地,可以使用以下关系从反正弦计算输入的反余弦:
[0091]
cos
‑1x=π/2

sin
‑1x
[0092]
可以使用cordic基础结构来计算tan
‑1(v)。标准方法是将x初始化为v并将y初始化为1,然后强制x为0。这会产生以下代码:
[0093][0094][0095]
虽然初始值被设置为y=1和x=v,但它们不限于这些初始值。在实践中,任何遵循y/x=tan(v)关系的初始值都是可行的。可替代地,可以设置x和y的初始值,使x/y=tan(v),然后返回π/2

ai。
[0096]
以上部分包括对定点cordic的描述。在定点实施方式中,小数点后有固定位数,限制了可用精度的位数。如果小数点后有n位,则可表示的数字的粒度为2

n
。这通常意味着α
n 1
可以是数字的精确表示,从而对上述三角函数进行非常好的数值估算。因此,只需要估算少量(n)的递推步骤,其取决于用于精度的位数。
[0097]
然而,与定点数表示相比,浮点数表示包括可能非常小的一个指数,例如对于非正规ieee单精度浮点数为2

126
或对于双精度浮点数为2

1022
。可以表示的最小粒度如此之小,使得如果使用定点cordic来估算具有浮点输入值的三角函数,则需要估算大量的递推步骤。另一方面,如果只用少量的位来表示小的浮点数,虽然绝对误差可能很小,但相对误差可能很大。例如,如果使用31位(基数为2

31
)来表示2

55
基数级别的浮点数,则相对误差可能高达2
24
,这可能意味着估算的三角函数的尾数中的所有位都是不正确的。因此,当输入值非常小时,将定点cordic算法直接应用于浮点数表示既不是硬件高效的也不是准确的。
[0098]
代替将定点cordic直接应用于浮点数表示,本公开的实施方式首先确定浮点输入值是否小。响应于确定浮点输入值不小,实施方式可以采用cordic算法来计算三角函数。响应于确定浮点输入值小,实施方式可以采用近似方法来计算三角函数。因此,可以以自适应方式来估算三角函数的值。本公开的一个实施方式可以使用泰勒级数展开式的第一项作为
具有小浮点输入的三角函数的近似值。这些基于小输入值α的泰勒级数展开式的第一项的近似值是:
[0099]
sin(α)~α
[0100]
cos(α)~1

α2[0101]
sin
‑1(a)~α
[0102]
tan
‑1(a)~α
[0103]
其中,输入值α是根据弧度测量的。可以使用cordic算法计算大输入值的三角函数。在一个实施方式中,代替仅泰勒级数的第一项,小输入值α的近似值还可以包括泰勒级数的第二项(或更多项)。由于输入值是一个小浮点数,所以高阶项(二阶或以上)的乘法结果可以用更少的位(例如8位)来表示,而小浮点输入值的乘法电路可以是低位(例如,4或5位)乘法电路,与标准的16位或32位乘法电路相比,该低位乘法电路的实现成本更低。
[0104]
然而,与定点数表示相比,浮点数表示包括可能非常小的一个指数,例如对于非正规ieee单精度浮点数为2

126
或对于双精度浮点数为2

1022
。可以表示的最小粒度非常小,与定点数表示相比,需要估算大量的递推步骤。因此,当输入值非常小时,将定点cordic算法直接应用于浮点数表示是效率不高的。三角函数的自适应计算可以允许三角函数的硬件高效实现。
[0105]
图1示出了根据本公开的实施方式的用于自适应地计算三角函数的方法100的流程图。参考图1,方法100可以在诸如硬件处理器或加速器电路之类的处理装置上实现。在102,方法100可以包括识别对三角函数的浮点输入值。浮点输入值可以是在程序中定义为浮点值的变量。三角函数可以是sin、cos、arcsin、arccos或arctan函数中的任何一种。对于sin/cos函数,可以将输入值进行模运算以得到第一象限中的相应值。arcsin/arccos的输入值定义在[

1,1]的范围内。对于arctan,如果输入值非常大,则可以使用输入值的倒数来计算。如果输入值接近一(1),则近似值是tan
‑1(a)~π/2。
[0106]
在104,该方法可以包括确定输入值是否是小的数。输入值是否较小的确定可以基于一个或多个因素,包括但不限于估计的绝对误差、估计的相对误差、三角函数的类型、浮点数表示的类型或硬件约束。在一个实施方式中,浮点输入值是否小的确定可以基于估计的绝对误差。例如,估计的绝对误差的目标界限可以由位数(n)表示(例如,2

n
)。因此,小于估计的绝对误差的目标界限(例如,2

n
)的浮点输入值被确定为小;在范围内或大于目标边界的浮点输入值被确定为不小。
[0107]
类似地,在另一实施方式中,浮点输入值是否小的确定可以基于估计的相对误差。例如,估计的相对误差的目标界限。cordic的当前实施方式是定点算法。n步cordic算法可以具有k2

n
的残差。然而,对于浮点数表示,残差在一个由指数大小确定的范围内。在单精度数的情况下,指数可以小到2

149
。仅使用cordic方法覆盖此范围将需要大约149个步骤。使用泰勒展开式的第一项作为小输入值的近似值可以降低计算的复杂度。
[0108]
如上所述,代替执行cordic算法,泰勒展开式的第一项可以用作小输入值的三角函数的近似值。使用泰勒展开式的第一项近似三角函数的残差取决于函数本身。例如,对于sin(x)函数,残差由(x3/3!)界定;对于cos(x)函数,残差由(x4/4!)界定。因此,三角函数可以确定不同近似值的残差的界限。这些残差的界限可用于确定绝对误差或相对误差的界限,从而确定输入值是否小。
[0109]
以使用利用单精度浮点输入值的sin为例,只需要24位有效位。如果使用的近似值是sin(θ)~θ,则相对误差是θ2/6。如果θ≤2

11
,则相对误差小于2

24
。因此,近似值将最多相差最低有效位。这减少了cordic对于大于2

11
的输入值的准确性的问题。如果输入是2

10
,那么结果大约是2

10
。如果结果是单精度格式,则最低有效位为2

34
。这意味着大约需要34个cordic步骤才能将误差减少到最低有效位。
[0110]
如果最后2k 1位的误差是可以接受的,那么对于单精度,小值和非小值之间的截止值可以设置为2

11 k
。这将使误差保持在期望范围内。那么,cordic算法只需要34

3k个步骤,所生成的最小结果是2

11 k
,需要精确的最小位位置在24

2k。因此,5最低有效位(lsb)误差是可以接受的,截止值可以设置为2
‑9,并且cordic算法最多需要25个步骤。
[0111]
响应于确定输入值是小值,在106,该方法可以包括使用三角函数关于小输入值的近似值。在一个实施方式中,具有小的浮点输入值的三角函数的近似值是泰勒展开式的第一项。这些基于小输入值α的泰勒级数展开式的第一项的近似值是:
[0112]
sin(α)~α
[0113]
cos(α)~1

α2[0114]
sin
‑1(a)~α
[0115]
tan
‑1(a)~α
[0116]
其中,输入值α是根据弧度测量的。
[0117]
通常,在处理三角函数时,角度以弧度为单位给出。然而,使用弧度可能需要取相对于2π的模数以消除计算函数(诸如sin/cos)的周期性,然后可能需要进一步除以π/2以识别象限并将输入限制到一个象限。这在计算上可能是昂贵的。另一种方法是用π/2的倍数(或π的一些其他有理倍数,例如π或2π)来表示任何角度。如果角度以π/2的倍数表示,则:
[0118]
·
小数部分是象限内的角度;
[0119]
·
整数部分对四(4)取模确定象限。
[0120]
采用这种方法可以大大简化三角函数的角度处理。泰勒级数近似适用于以弧度表示的小角度。如果角度表示为π/2的倍数,则:
[0121]
sin(α)~απ/2
[0122]
cos(α)~1

α2π4/4
[0123]
sin
‑1(a)~2α/π
[0124]
tan
‑1a~2α/π
[0125]
响应于确定输入值不是一个小值,在108,该方法可以包括使用cordic算法来计算关于输入值的三角函数,其中cordic算法可能已经被实现为包括移位运算符电路和/或加法运算符电路的电路逻辑块(例如,在fpga电路板上)。因此,本公开的实施方式可以重复使用实施cordic算法并节省电路面积的电路逻辑块。
[0126]
标准ieee浮点表示包括特殊值的表示,例如 /

无穷大、信令和安静nan以及非正规值。此外,ieee浮点表示可以识别某些异常,特别是invalid(无效)、overflow(溢出)、underflow(下溢)、divide

by

zero(除以零)和inexact(不精确)。下表总结了针对操作推荐的动作。
[0127]
表1
[0128][0129]
图2示出了根据本公开的实施方式的用于执行三角函数的自适应计算的系统200。如图2所示,系统200可以包括硬件处理器202和可选的协处理器204。处理器202可以是中央处理单元(cpu)、图形处理单元(gpu)或任何合适类型的处理装置。处理器202可以包括指令执行流水线(未示出)、寄存器文件(未示出)和实现根据指令集架构(isa)206指定的指令的电路。指令可以包括用于自适应地计算浮点三角函数的指令。在一个实施方式中,处理器202可以使用执行流水线来执行应用208。该应用可以包括被设计为解决诸如医学成像问题或机器学习问题之类的实际问题的程序的可执行代码。应用208在执行时可以包括对三角函数210的调用。
[0130]
在一个实施方式中,系统200可以提供具有指定电路的协处理器(或加速器电路)204以支持浮点三角函数210的自适应计算。协处理器204可以是处理器202的一部分或通信地连接到处理器202的单独的逻辑电路。例如,协处理器204可以是在fpga板上实现的加速器电路,以加速三角函数的计算。协处理器204可以包括寄存器文件218、确定电路212、近似电路214和cordic递推电路216。
[0131]
寄存器文件218可以包括指令寄存器220和数据寄存器222。指令寄存器220可以从执行浮点三角函数210的处理器202的执行流水线接收指令并将指令存储在其中。在一个实施方式中,指令可以包括用于估算关于输入值的三角函数的三角计算指令。数据寄存器222可以存储与相应的三角计算函数指令相关联的输入值和输出值。在一个实施方式中,数据寄存器222可以包括可以存储浮点输入值和浮点输出值的浮点数据寄存器。处理器202的执行流水线可以将与三角计算函数相关联的输入值存储在数据寄存器222中并且从数据寄存器222中检索执行三角计算函数的结果。
[0132]
确定电路212可以识别来自指令寄存器220的用于计算三角函数的指令以及与来自数据寄存器222的指令相关联的相应输入值。响应于识别包括输入值的指令,确定电路212可以解析该指令以及输入值,并且还确定输入值是否为小值。如上所述,确定电路212可以基于一个或多个因素来确定输入值是否为小值,这些因素包括但不限于估计的绝对误差、估计的相对误差、三角函数的类型、浮点数表示的类型和硬件约束。确定电路212可以包括开关电路(例如,多路复用器),该开关电路可基于输入值是否为小值的确定来路由输入值。
[0133]
响应于确定输入值是小值,确定电路212可以将输入值路由到近似电路214以计算三角函数的近似值。近似电路支持的三角函数可以包括sin、cos、sin
‑1、tan
‑1。例如,近似电路214可以包括分别实现三角函数sin、cos、sin
‑1、tan
‑1的第一项泰勒近似的逻辑电路。上面描述了三角函数的第一项泰勒近似。近似电路214的输出可以是三角函数的估算并且可以传输到处理器202。
[0134]
响应于确定输入值不是小值,确定电路212可以将输入值路由到cordic递推电路
216以基于输入值估算三角函数。cordic递推电路216可以包括分别为包括sin、cos、sin
‑1、tan
‑1的三角函数实现cordic递推的逻辑电路。特别地,cordic递推电路216可以包括移位电路和加法电路,它们可以被组合以针对三角函数执行不同的cordic算法。cordic递推电路216的输出可以是三角函数的估算并且可以被传输到处理器202。因此,协处理器204可以在硬件电路中以硬件高效的方式实现三角函数的自适应计算。
[0135]
考虑到如表1所示的特殊输入值,当计算三角函数之一时,该方法和系统可以包括:
[0136]
·
确定输入值是表1中指定的特殊情况,并应用相应的规则来计算结果,包括可能生成异常;
[0137]
·
确定输入落入使用近似算法的范围内,使用近似来计算结果;
[0138]
·
否则使用cordic算法。
[0139]
使用cordic算法计算三角函数包括以下步骤:
[0140]
·
标准化输入以提取用作cordic的输入的数字,特别地,对于sin/cos函数,提取输入数字的整数和小数部分;
[0141]
·
执行cordic算法的n个阶段以获得近似值,其中n是基于表示小数部分的位数确定的;
[0142]
·
生成结果,包括对于sin/cos,使用象限信息来校正符号并可能交换sin/cos结果。
[0143]
当输入数字落在适合使用cordic的范围内时,可以将数字以及中间结果限制在范围[0..4)内。这意味着只需要高于小数点的2位。
[0144]
图3示出了根据本公开的实施方式的cordic的内部级300,其包括用于要组合成单个块的每个操作的循环。可以取决于正在计算的三角函数来激活块的不同部分。另一个实施方式可以包括用于n个cordic级中的每一个的不同硬件块。在又一个实施方式中,cordic可以通过使用一个块n次来实现。在这种情况下,必须为每次迭代选择不同的移位值和2θ值。可以使用复杂的移位器,例如桶形移位器,因为~n个移位值是可能的。
[0145]
如图3所示,内部级300可以包括多路复用器302a、302b、双右移位器304a

304c、单右移位器306a

306c、比较器308、减法/加法电路310a

310c和加法/减法电路312a

312d的逻辑电路。内部级300可以为步骤i执行一次cordic递推。到内部级300的输入可以包括a
i
、v、y(或p)、x(或q)和q,其中y或p、x或q的选择取决于要估算的函数。第一级还可以包括常数值a(基数)和0。在每次递推交互之后,内部级300可以生成包括a
i
、v、y(或p)、x(或q)和q的输出,这些输出可以用作下一级i 1的输入。
[0146]
内部级300的某些组件可以被重新配置以实现不同的初等函数和/或三角函数。特别地,除了用于arctan函数之外,比较器308被配置为大于比较器(“>”)。在arctan函数的情况下,比较器308被配置为小于或等于比较器(“≤”)。加法/减法电路312b被配置为估算三角函数,但被配置为用于估算初等函数的减法/加法电路。减法/加法电路310a、310b被配置为估算三角函数,但被配置为用于估算初等函数的加法/减法电路。多路复用器302a、302b可以为三角函数选择a
i
/a,为初等函数选择y/v。用于移位器304a、304c、306a的索引值i对于三角函数是连续的,但包括如上文针对初等函数所述的重复项。
[0147]
在本公开的一个实施方式中,三角函数的输入值可以是ieee单精度、双精度、四倍
精度或八倍精度浮点数。对于单精度实施方式,定点数用61位数字来表示,在(隐式)小数点后有α 59位。
[0148]
对于该实施方式,sin/cos函数的计算可以包括以下:
[0149]
·
±
无穷大输入值导致nan;
[0150]
·
假设输入是π/2的倍数以简化计算;
[0151]
·
输入值v被分成整数部分w和小数部分f;
[0152]
·
对4取模的整数(w%4)确定输入值所在的象限;
[0153]
·
如果小数部分f小于2
‑9,则使用小值近似值
[0154]
οf*π/2用于sin
[0155]
ο当f>2

12
时,1

f2*π2/4用于cos
[0156]
ο当f≤2

12
时,1用于cos
[0157]
·
否则将小数部分转换为定点数并运行cordic的适当变体以获得sin和cos;
[0158]
·
将由cordic生成的定点结果转换回浮点表示;
[0159]
·
基于输入值所在的象限选择符号和sin/cos。
[0160]
对于sin
‑1函数:
[0161]
·
超出范围的输入值导致nan;
[0162]
·
输入值为1.0和0.0的特殊情况可能分别导致1.0和0.0(结果是π/2的倍数);
[0163]
·
如果输入的绝对值|v|小于2
‑9,使用小值近似,生成结果|v|*2/π;
[0164]
·
否则,将|v|转换为定点数并使用cordic计算sin

1(v);
[0165]
·
将定点结果转换回浮点;
[0166]
·
基于输入的符号设置符号。
[0167]
对于tan

1函数:
[0168]
·
±
无穷大输入值导致
±
1.0(结果为π/2的倍数);
[0169]
·
如果输入的绝对值|v|小于2
‑9,则使用小值近似,生成结果|v|*2/π
[0170]
·
如果|v|大于或等于2
19
,结果设置为1.0;
[0171]
·
否则,将输入值转换为定点数表示,并执行tan
‑1cordic计算:
[0172]
ο如果|v|小于20,初始y设置为1.0,x设置为|v|;
[0173]
ο否则初始y设置为2

exp
‑1,x设置为|v|*2

exp
‑1,其中exp是浮点格式的v的指数;
[0174]
·
将定点结果转换回浮点数表示;
[0175]
·
基于输入的符号设置符号。
[0176]
本公开的实施方式使用近似函数和cordic算法提供具有浮点输入值的三角函数的自适应计算。实施方式可以利用公共cordic电路块来减少电路面积。对于每种类型的三角函数,cordic对浮点的自适应包括识别可在这些情况中的每一种情况下使用的替代近似技术,以处理如果单独使用cordic算法计算可能代价高昂的输入范围。
[0177]
虽然已经关于有限数量的实施方式描述了本公开,但是本领域技术人员将理解从中的许多修改和变化。所附权利要求旨在涵盖落入本公开的真实精神和范围内的所有此类修改和变化。
[0178]
设计可以经历从创建到模拟再到制造的各个阶段。表示设计的数据可以多种方式表示设计。首先,由于在模拟中很有用,可以使用硬件描述语言或其他功能描述语言来表示
硬件。此外,可以在设计过程的某些阶段产生具有逻辑和/或晶体管门的电路级模型。此外,大多数设计在某个阶段达到了表示硬件模型中各种装置的物理布局的数据级别。在使用传统半导体制造技术的情况下,表示硬件模型的数据可以是指定用于产生集成电路的掩模的不同掩模层上各种特征的存在或不存在的数据。在设计的任何表示中,数据可以存储在任何形式的机器可读介质中。存储器或诸如盘的磁或光存储装置可以是机器可读介质,用于存储经由调制或以其他方式生成以传输此类信息的光或电波传输的信息。当传输指示或承载代码或设计的电载波时,在执行电信号的复制、缓冲或重新传输的范围内,进行新的复制。因此,通信提供商或网络提供商可以在有形的机器可读介质上至少暂时地存储体现本公开的实施方式的技术的物品,例如编码到载波中的信息。
[0179]
如本文所使用的模块是指硬件、软件和/或固件的任何组合。作为示例,模块包括(诸如微控制器的)硬件,其与非暂时性介质相关联,该非暂时性介质存储适于由微控制器执行的代码。因此,在一个实施方式中,对模块的引用是指硬件,其具体配置为识别和/或执行要保存在非暂时性介质上的代码。此外,在另一实施方式中,模块的使用是指包括代码的非暂时性介质,其具体适用于由微控制器执行以执行预定操作。并且可以推断,在又一实施方式中,术语模块(在该示例中)可以指微控制器和非暂时性介质的组合。通常,被示出为单独的模块边界通常变化并且可能重叠。例如,第一和第二模块可以共享硬件、软件、固件或它们的组合,同时可能保留一些独立的硬件、软件或固件。在一个实施方式中,术语逻辑的使用包括硬件(例如晶体管、寄存器)或其他硬件(例如可编程逻辑装置)。
[0180]
在一个实施方式中,短语“配置为”的使用是指布置、组装、制造、提供销售、进口和/或设计一种设备、硬件、逻辑或元件以执行指定或确定的任务。在该示例中,如果未操作的设备或其元件被设计、耦合和/或互连以执行所述指定的任务,则它仍被“配置为”执行指定的任务。作为纯粹的说明性示例,逻辑门可以在操作期间提供0或1。但是“配置为”向时钟提供使能信号的逻辑门不包括可能提供1或0的每个可能的逻辑门。相反,逻辑门是以某种方式耦合的,在操作期间1或0输出用于启用时钟。再次注意,术语“配置为”的使用不需要操作,而是关注设备、硬件和/或元件的潜在状态,其中在潜在状态下,设备、硬件和/或元件被设计为在设备、硬件和/或元件操作时执行特定任务。
[0181]
此外,在一个实施方式中,短语“以”、“能够/以”和/或“可操作为”的使用是指以这样的方式设计的一些设备、逻辑、硬件和/或元件,其以指定方式启用对设备、逻辑、硬件和/或元件的使用。如上所述,在一个实施方式中,以、能够或可操作为的使用是指设备、逻辑、硬件和/或元件的潜在状态,其中设备、逻辑、硬件和/或元件并非正在操作,而是设计成能够以特定方式启用对设备的使用。
[0182]
如本文所使用的,值包括数字、状态、逻辑状态或二进制逻辑状态的任何已知表示。通常,逻辑电平、逻辑值或逻辑值的使用也称为1和0,它们仅表示二进制逻辑状态。例如,1表示高逻辑电平,0表示低逻辑电平。在一个实施方式中,诸如晶体管或闪存单元之类的存储单元可能能够保持单个逻辑值或多个逻辑值。然而,在计算机系统中已经使用了值的其他表示。例如,十进制数字十也可以表示为二进制值910和十六进制字母a。因此,值包括能够保持在计算机系统中的信息的任何表示。
[0183]
此外,状态可以由值或值的部分表示。例如,第一值(例如逻辑一)可以表示默认或初始状态,而第二值(例如逻辑零),可以表示非默认状态。此外,在一个实施方式中,术语重
置和设置分别指默认值和更新值或状态。例如,默认值可能包括高逻辑值(即重置),而更新值可能包括低逻辑值(即设置)。请注意,可以利用值的任何组合来表示任何数量的状态。
[0184]
上述方法、硬件、软件、固件或代码的实施方式可以经由可由处理元件执行的存储在机器可访问、机器可读、计算机可访问或计算机可读介质上的指令或代码来实现。非暂时性机器可访问/可读介质包括以机器(例如计算机或电子系统)可读的形式提供(即,存储和/或传输)信息的任何机制。例如,非暂时性机器可访问介质包括随机存取存储器(ram),例如静态ram(sram)或动态ram(dram);rom;磁或光存储介质;闪存装置;电存储装置;光存储装置;声学存储装置;用于保存从瞬态(传播)信号(例如,载波、红外信号、数字信号)接收的信息的其他形式的存储装置等等,它们将与可以从中接收信息的非暂时性介质区分开来。
[0185]
用于对逻辑进行编程以执行本公开的实施方式的指令可以存储在系统中的存储器内,例如dram、高速缓存、闪存或其他存储装置。此外,指令可以经由网络或通过其他计算机可读介质来分发。因此,机器可读介质可以包括用于以机器(例如计算机)可读的形式存储或传输信息的任何机制,但不限于软盘、光盘、致密光盘、只读存储器(cd

rom)、磁光盘、只读存储器(rom)、随机存取存储器(ram)、可擦可编程只读存储器(eprom)、电可擦可编程只读存储器(eeprom)、磁卡或光卡、闪存或有形的机器可读存储装置,用于经由电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)在互联网上传输信息。因此,计算机可读介质包括适合于以机器(例如,计算机)可读的形式存储或传输电子指令或信息的任何类型的有形机器可读介质。
[0186]
在该说明书中对“一个实施方式”或“一种实施方式”的引用意味着结合该实施方式描述的特定特征、结构或特性被包括在本公开的至少一个实施方式中。因此,在本说明书各处出现的短语“在一个实施方式中”或“在一种实施方式中”不一定都指代相同的实施方式。此外,特定特征、结构或特性可以在一个或多个实施方式中以任何合适的方式组合。
[0187]
在前述说明书中,已经参考具体示例性实施方式给出了详细描述。然而显而易见的是,在不脱离所附权利要求中阐述的本公开的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图被认为是说明性的而不是限制性的。此外,上述实施方式和其他示例性语言的使用不一定指相同的实施方式或相同的示例,而是可以指不同的并且有区别的实施方式,以及可能地相同的实施方式。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献