Xilinx Vivado Cordic 核的使用

一:参数配置
1.选择函数的类型。包含了矢量旋转,矢量变换,正弦,余弦,双曲正弦,双曲余弦,反正切,反双曲正切和平方根的计算。
2.选择cordic的结构。可选并行和串行。
3.选择输出流水线类型。提供了三种,无,最优,最大。其中optimal模式实现时使用很多流水线,但是不使用附加的查找表。
4.选择数据格式。有符号小数(默认),无符号小数,无符号整数。
5.选择相位模式。弧度和角度。。radians的取值范围是-3.14~3.14.scaled radians的取值范围是-1~1,那么scaled radians的单位是pi。

二:输入输出选项
1.输入宽度:这个容易懂.
2.输出宽度:这个容易懂。
3.数据的舍位方式:缩短,向正无穷大取整,向负无穷大取整和向最近的偶数取整。

下图为截短的示意图

三:高级参数配置:
1.迭代次数控制:
2.精度控制:
3.可选粗略旋转模块,用于将CORDIC的范围从第一象限扩展到整个圆。

AXI4_Stream接口配置

AXI4_Stream接口配置

1.Cartesian通道选项。 LAST是数据结束标志,TUSER是数据流的开始标志。这俩信号可以不选。
2.相位通道选项。其中FLOW Control 是流控,分为阻塞和非阻塞方式。其中Optimize Goal 为优化目标,默认就是性能。
3.可选引脚。时钟使能和低复位引脚。

仿真测试
先以反正切为例,查看pg105文档中的28页描述反正切的计算,如下图。

可以 看到文档中输入数据宽度为10位,输出数据位宽也是10位,对于输入端的最高位为符号位,次高位为整数位,其余位为小数位。对于输出端最高位为符号位,次高位和次次高位为整数位,其余位为小数位。

根据以上规则,当输入和输出都选择13位时,按如下格式进行仿真。

上仿真图中的s_axis_cartesian_tvalid和s_axis_cartesian_tdata就是输入端口,
其中s_axis_cartesian_tdata的数据格式为

可以发现将正弦放在高位(相对于正弦),将余弦放在低位上,那么根据仿真图中得到的结果为m_axis_dout_tvalid指示的m_axis_dout_tdata信号值为471,当选择输出为13位时,根据输出数据格式其中的3位分别为符号位和整数位,那么小数位为2的10次方,等于1024.那么得到的相位为471/1024=0.4599609375。在matlab中进行计算,

可以看到仿真结果正确。

对于输入值为负数,其实不用过多的考虑。输入选择13位时,最高位就是符号位,次高位为符号位,观看下图X_IN的输出在-1~1之间,那么小数位有11位也就是说数值的表示是-2048~2047之间,就可以为-2048表示-pi/2,而2047表示pi/2,这个数值的数据必须要注意范围,只需要将数据的范围提前调整在这个范围内给到IP核就可以了。

使用CORDIC核可以很高效的替代查表的方式。

---------------------
作者:策马笑东风
来源:CSDN
原文:https://blog.csdn.net/weixin_39573321/article/details/80227753

推荐阅读