前言
虽然很多FPGA工程师都知道Xilinx FPGA种的vivado cordic IP可以计算三角函数,但在实际使用时会遇到各种各样的问题,比如:
- 输入参数代表什么意思?
- 输出参数怎么分类?
- 哪些数据是sin值,哪些是cos值?
本文以cordic ip求解sin与cos值为例,破解这些疑问,讲解cordic IP的使用。
IP设置
cordic IP有哪些求解内容
求解sin_cos时IP 设置
- 选择功能:sin and cos;
- 输入与输出位宽:16;
点击详情页可以看到输入与输出的数据分段,比如上图:
PHASE(15:0) fix16_13 表示:输入相位位宽16bit,即PHASE-TDATA(15:0),fix(定点数)16位_13位小数
IMAG (31:16) fix16_14表示:输出的虚数有16bit,即DOUT-TDATA(31:16),fix(定点数)16位_14位小数
REAL (15:0) fix16_14表示:输出的实数有16bit,即DOUT-TDATA(15:0),fix(定点数)16位_14位小数
输入输出数据讲解
以cordic IP的端口为依据举例说明(注意:下面例子是10bit参数,本IP是16bit,但其中整数部分的位数和换算规则一样):
上图的意思是值都是采用定点数二进制补码表示的,其中:
-
相位的值,有3位整数(其中最高位为符号位),其余为小数;
-
Cos/sin值,有2位整数(其中最高位为符号位),其余为小数;
举例的说明为:
相位幅度:000.1100100,换算成十进制表示为0.781
相位幅度换算成cos值X_OUT为:00.10110110,换算成十进制表示为0.711
相位幅度换算成sin值Y_OUT为:00.10110100,换算成十进制表示为0.703
参数验证
输入输出参值验证(进制转换)
可以通过网上的计算器或者手算进行验证,本人这边先通过进制转换器 - Codeeeee 在线小工具进行的验证,如下所示:
相位换算验证(三角函数转换)
可通过三角函数计算器 |Sin, Cos, Tan,Cot在线计算验算三角函数的计算值是否正确:
Cos(0.781)=0.711
Sin(0.781)= 0.703
由上面计算可知计算可能有一点点的精度误差,但整体无误。
上板验证
设置仿真条件
设置代码输入与输出分段
备注:通常在XIlinx的FPGA中的real值对应的是cos值
仿真结果
转成实数观看结果
从仿真结果看,输入输出值与预期一样,说明输入与输出的理解无误。
若需要获取cordic仿真例程,关注微信公众号后,回复"cordic"即可获取
如果本文对你有所帮助,欢迎点赞、转发、收藏、评论让更多人看到,赞赏支持就更好了。
如果对文章内容有疑问,请务必清楚描述问题,留言评论或私信告知我,我看到会回复。
欢迎FPGA同行者关注微信公众号FPGA加速者,获取更多精彩