前言
本文主要记录自己使用vivado CORDIC ip 核计算arctan的过程。
一、CORDIC ip核配置
下面是我测试工程的具体配置。
要计算arctan需要在Functional Selection选择为“Arc Tan”,结构默认为并行结构。Pipelining Mode可以设置为最大值(Maximum)、最优值(Optimal)和不设置流水线(No pipelining即纯组合逻辑实现)。增加流水线级数可以提高计算速度。计算arctan时Data Format固定为带符号小数(SignedFraction)。Phase Format可以设置为Radians(范围-pi到pi)或Scaled Radians(范围-1到1),即第二种模式的结果为第一种的1/pi。
Input/Output Options中设置输入数据位宽和输出数据位宽,以及舍位的模式,这里选择为Nearest Even,表示最接近的值(可以理解为四舍五入)。
“Coarse Rotation”,默认为勾选。选中此值时,CORDIC的输出范围是-pi到pi;没有选中时,CORDIC的输出范围是-1/4pi到1/4pi。一般选前者。
这里是一些接口的选取。
在这个界面可以知道Latency为35,输入32位其中1位符号位,一位整数位,30位小数位,输出为1位符号位,2位整数位,29位小数位。
xilinx ip 书册PG105第28页给了一个示例,便于理解输入输出的定点数形式。另外注意输入数据要保证输入数据的范围限定在-1~1之间。如果不能确定要输入数据的范围,可以先仿真,确定数据的最大值和最小值是否超出了该范围。如果超过可以用进行移位,缩小输入数据范围。由于是带符号数二进制补码,移位时注意高位补符号位,如{q[32],q[31:1],i[32],i[31:1]}。
二、CORDIC ip核接口
在建好ip核后找到veo文件,例化模板,下面为我测试工程的接口。
cordic_atan your_instance_name (
.aclk(aclk), // input wire aclk
.aresetn(aresetn), // input wire aresetn
.s_axis_cartesian_tvalid(s_axis_cartesian_tvalid), // input wire s_axis_cartesian_tvalid
.s_axis_cartesian_tdata(s_axis_cartesian_tdata), // input wire [63 : 0] s_axis_cartesian_tdata
.m_axis_dout_tvalid(m_axis_dout_tvalid), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata(m_axis_dout_tdata) // output wire [31 : 0] m_axis_dout_tdata
);
其中s_axis_cartesian_tvalid是两路输入数据的拼接,如arctan(y/x),y为高32位,x为低32位,
三、仿真波形
下面进行对结果的验证,arctan(-1000000/1000000)结果显然为-pi/4,因为我在配置时选用的Scaled Radians模式,所以结果应为(-pi/4)/pi=-0.25.仿真结果的范围必定是在(-1到1)之间,所以结果的整数位完全可以忽略,直接将结果用十进制有符号数显示,为-134217740,因为结果小数位为29位,将-134217740除以2^29,得-0.250000022351741790771484375,可见结果正确。文章来源:https://www.toymoban.com/news/detail-469017.html
四、工程文件
工程文件:vivado2019.2文章来源地址https://www.toymoban.com/news/detail-469017.html
到了这里,关于vivado CORDIC ip核计算arctan记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!