打印
[ISE]

VIVADO CORDIC IP核

[复制链接]
3049|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaochy1126|  楼主 | 2022-1-30 16:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

VIVADO中,cordic是一个实现通用坐标旋转计算的IP核,在进行数字信号处理时常常会用到,算法主要是通过迭代来解三角方程,不过这些原理的东西我们做FPGA实现的不需要掌握它的历史,重点是怎么用,正好最近刚刚做完一个bp神经网络的实现,很多地方都用到了cordic核,网上的讲解很散乱,所以决定自己写一个。

cordic核主要功能包括:

  • rotate 旋转 ——复数旋转
  • translate 变换 ——复数转极坐标
  • sin/cos
  • arctan
  • sinh/cosh
  • arc tanh
  • square root 平方根
    我这里就介绍一部分功能:rotate、 translate、 arctan、 square root
1. 旋转

cordic算法最初是为了实现矢量旋转设计的,对于(X,Y),旋转角度θ后为(X’,Y’),则有如下式子

在复平面上,旋转完成的功能如下所示:

如果我没记错的话,输入phase为正数,则逆时针旋转;输入为负数,则顺时针旋转。
旋转这个功能就说两个问题:phase输入问题、cordic输出模值不正确的问题。

PHASE输入

cordic对phase输入有两种格式,一种是radians,另一种是scale radians。
radians格式下就是输入正常的弧度制,输入范围是(-π,π)
scale radians则是输入归一化的弧度值,输入范围是(-1,1)
说明白点,radians格式下,你的输入就相当于在scale radians下输入再乘π。

另外是cordic的输入与MATLAB中操作对应的问题,举个例子就明白了:



  • matlab代码如下:



  • xu2 = exp(-1i*pi*phase) .* (data);


则cordic核在scale radians格式下的phase应当输入-1i*phase,没错,记得输入负数,这里好坑,我试了好久才发现这个问题,之前写MATLAB的时候总是觉得选好phase就可以了,结果到了cordic竟然要我自己加个负号,

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:这个社会混好的两种人:一是有权有势,二是没脸没皮的。

1051

主题

11300

帖子

26

粉丝