vivado CORDIC ip核计算arctan记录


前言

本文主要记录自己使用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,可见结果正确。

四、工程文件

工程文件:vivado2019.2

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值