vivado中Cordic IP核使用——计算正余弦(sin/cos)

时间:2024-05-31 07:02:36

目录

1、Cordic算法介绍

2、Cordic IP核介绍

3、仿真

4、存在的问题

5、参考


1、Cordic算法介绍

cordic算法将正余弦计算转换为简单的迭代过程(一系列的加减和移位操作), 非常适合硬件实现,是对正余弦等数学计算的逼近。

                                             vivado中Cordic IP核使用——计算正余弦(sin/cos)

以旋转过程为例,简述cordic算法思想(计算正余弦可以认为起始点P在x轴上,旋转结果的xy坐标即为旋转角度的cos、sin):

vivado中Cordic IP核使用——计算正余弦(sin/cos)

和差化积公式:

vivado中Cordic IP核使用——计算正余弦(sin/cos)

带入P点:

vivado中Cordic IP核使用——计算正余弦(sin/cos)

进一步:

vivado中Cordic IP核使用——计算正余弦(sin/cos)

伪旋转:

伪旋转不再考虑vivado中Cordic IP核使用——计算正余弦(sin/cos),导致旋转后模值改变(变大):

vivado中Cordic IP核使用——计算正余弦(sin/cos)

vivado中Cordic IP核使用——计算正余弦(sin/cos)旋转分解:

将旋转分解成为一系列的微旋转(直接旋转难以计算,将其分解为一系列易于计算的微旋转),实现了一系列加减和移位来逼近正切值计算。

第i+1 次旋转后的结果为:

vivado中Cordic IP核使用——计算正余弦(sin/cos)

微旋转角度选择, 正是它使得该算法非常易于硬件实现, 即令:
vivado中Cordic IP核使用——计算正余弦(sin/cos)
这里di∈{-1,1}, 结合式( 3.99), 式 (3.98) 可重新改写为:
vivado中Cordic IP核使用——计算正余弦(sin/cos)
不难看出, 每次微旋转在xy坐标上带来的影响是1/(2^i),因此只需要加法 、 减法和移位操作即可完成。 

结论:

  • 这一系列微旋转角已知,Cordic计算的过程就是通过一系列微旋转角度的旋转(根据理想角度与当前角度大小关系选择顺时针还是逆时针旋转),逼近计算角度的过程。

vivado中Cordic IP核使用——计算正余弦(sin/cos)

  • 微旋转角度和存在极值,因此理想角度存在输入范围。超出范围的需要预处理。

vivado中Cordic IP核使用——计算正余弦(sin/cos)

  • 伪旋转对模值的影响,近似为放大了1/K倍。K=0.607252935

vivado中Cordic IP核使用——计算正余弦(sin/cos)

vivado中Cordic IP核使用——计算正余弦(sin/cos)

2、Cordic IP核介绍

vivado中Cordic IP核使用——计算正余弦(sin/cos)

  • 1、功能设置,包括旋转、正余弦计算、开方运算等,此处设置为正余弦计算
  • 2、配置设置,选择为并行
  • 3、数据形式设置,选择为有符号小数
  • 4、相位格式设置,包括弧度(-3.14-3.14)和缩放(-1-1)
  • 5、数据位宽设置(精度)
  • 6、配置结束,可以看出输出延迟为20个clk
  • 7、配置结束,对应的数据位宽和分配

3、仿真

vivado中Cordic IP核使用——计算正余弦(sin/cos)

可以看出:

  • 1、正余弦计算正确
  • 2、输出延迟确实为20clk

4、存在的问题

vivado中Cordic IP核使用——计算正余弦(sin/cos)

经过105ns以后的输入才有对应输出,这105ns如何确定?实际中如何处理这一段时间?

5、参考

CORDIC算法详解(一)-CORDIC 算法之圆周系统之旋转模式

Cordic v6.0 IP CORE使用说明

vivado中cordic IP 6.0 关于sin/cos输入输出位数问题