使用xilinx vivado cordic IP的问题
在优数科技的ud PCIe-402板卡上调试arctan功能,发现存在的问题:
问题1:符号问题
若输入IMAG为正,REAL的符号为负,则理论输出的符号为负。而实际ip-core输出的符号为正。原因是IP core输出只控制到±pai之间,固可自行进行符号调整。
问题2:精度问题
输出的arctan精度和用matlab计算的精度有偏差(可能几度~几十度),精度较差。
解决思路:
首先怀疑输入数据溢出,故输入的数据位宽加1,更改为[16:0]:
代码接口如下:
仿真情况如下:
输入Y=-23170, X=23169
输出的理论值为:-6433
而实际输出的值为:-5021,误差为:1412/8192*180=31度
把精度调整为32bit,IP core设置如下:
仿真现象一样。
修改迭代次数:
仿真输出的结果也是-5021,没有变化。
把输出的数据位宽更改为18bit,IP core设置参数如下:
仿真结果如下:
输出值变为-20084,等效于-5021乘以4,即输出还是没有变化的。
当输入小信号时,精度正确:
把输入的输入Y=-23170, X=23169同步减少到:Y=-352, X=352
理论值:-6433
实际值:-6433,误差为0度
把输出的数据格式更改为:scaled radians,小信号(IMAG=-352, REAL=352)输入时:
大信号(IMAG=-23170, REAL=23169)输入时:
复位cordic IP的输出,重新生成IP,修改参数为:
迭代次数32,精度32:
大信号:
小信号:
再次修改参数为:
迭代次数18,精度32:
大信号:
小信号:
再次修改参数为:
迭代次数0,精度32:
大信号:
小信号:
从以上的测试来看,与迭代次数没有关系,主要是受精度影响。
最终参数设置如下: