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为正数,则逆时针旋转;输入为负数,则顺时针旋转。
旋转这个功能就说两个问题&#x