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

目录

1、Cordic算法介绍

2、Cordic IP核介绍

3、仿真

4、存在的问题

5、参考


1、Cordic算法介绍

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

                                            

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

和差化积公式:

带入P点:

进一步:

伪旋转:

伪旋转不再考虑cos(\theta),导致旋转后模值改变(变大):

旋转分解:

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

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

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

结论:

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

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

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

2、Cordic IP核介绍

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

3、仿真

可以看出:

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

4、存在的问题

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

5、参考

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

Cordic v6.0 IP CORE使用说明

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

  • 12
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值