【FPGA】:ip核----cordic

 2023-09-05 阅读 142 评论 0

摘要:文章目录一、概述二、端口说明三、ip核的生成四、示例五、参考资料 一、概述 cordic核主要用来求三角方程, 主要功能为:  rotate 旋转 ——复数旋转  translate 变换 ——复数转极坐标  sin/cos  arctan  sinh/cosh  arc tanh  square root 平方

文章目录

  • 一、概述
  • 二、端口说明
  • 三、ip核的生成
  • 四、示例
  • 五、参考资料

一、概述

cordic核主要用来求三角方程, 主要功能为:
 rotate 旋转 ——复数旋转
 translate 变换 ——复数转极坐标
 sin/cos
 arctan
 sinh/cosh
 arc tanh
 square root 平方根

二、端口说明

备注:s_axis_代表核作为丛机,m_axis代表核作为主机,数据宽度一般为8的整数倍
在这里插入图片描述
在这里插入图片描述

三、ip核的生成

(1)在ip catalog里面选择cordic
在这里插入图片描述
(2)配置configuration
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
compensation Scaling:补偿因子,当选择不补偿时他的输出是乘了倍数Z的,如下所示:在这里插入图片描述
因此,为了让结果为z,则需要选择补偿项
(3)配置Axis Stream Option

在这里插入图片描述
与核相关的具体细节如下所示:
在这里插入图片描述

四、示例

以arctan函数为例进行仿真说明:

在这里插入图片描述

输入: 复数据实部虚部,输入格式:IMAG(31:16),REAL(15:0);范围:− 1 ≤ x o r y ≤ 1
输出: 相位,输出格式:PHASE(15:0);范围:− π ≤ x ≤ π 在这里插入图片描述

tb文件:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/06/04 10:14:40
// Design Name: 
// Module Name: cordic_tb
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module cordic_tb();reg aclk;
reg aresetn;
reg s_axis_cartesian_tvalid;
reg [31:0] s_axis_cartesian_tdata;
wire m_axis_dout_tvalid;
wire [15:0] m_axis_dout_tdata;wire [15:0]X_in;//real
wire [15:0]Y_in;//imagassign Y_in = s_axis_cartesian_tdata[31:16];
assign X_in = s_axis_cartesian_tdata[15: 0];cordic_0 cordic_0_inst0(.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 [31 : 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 [15 : 0] m_axis_dout_tdata
);/*********************************时钟信号*********************************/initial aclk = 0;always #5 aclk = ~aclk;initial beginaresetn =0;s_axis_cartesian_tvalid=0;s_axis_cartesian_tdata=32'd0;#20;aresetn =1;s_axis_cartesian_tvalid=1;// 前两位为整数部分【第1位符号位,第2位为数字】,后两位为小数部分,,输入必须归一化到-1到1// s_axis_cartesian_tdata=32'b0010000000000000_0010100000000000;       //高位为虚部,低位为实部s_axis_cartesian_tdata=32'b0010000000_000000_0010100000_000000;
endendmodule

仿真结果;
在这里插入图片描述
其中modelsim显示小数的方法如下:
在这里插入图片描述
在这里插入图片描述
对于本例而言,输入数据的整数为2bit,输出数据的整数为3bit,均为有符号数。
总结: cordic ip核使用 时候通常情况下输入为【-1,1】,超过此范围会出错,因此,常用办法为,对原来数据的最高位进行扩一位符号位,再送入cordic ip核,或者代码中必定能要保证输入数据的范围限定在-1~1之间。若是不能肯定上级模块向CORDIC中输入数据的范围,能够先仿真,肯定数据的最大值和最小值是否超出了该范围。若是超过能够用相似“{q[15],q[15:1],i[15],i[15:1]}”这样的移位除法,缩小输入数据范围。因为是带符号数二进制补码,移位时注意高位补符号位。

五、参考资料

  1. VIVADO cordic IP核
  2. XILINX CORDIC IP核使用记录
  3. CORDIC(6.0) IP核 与 DDS Compiler(6.0) IP核 使用示例
  4. FPGA----IP核cordic使用
  5. VIVADO cordic IP核
  6. Cordic v6.0 IP CORE使用说明
  7. modelsim调试把信号显示为小数格式
  8. VIVADO cordic IP核(遇到的一些问题)
  9. FPGA数字信号处理(十四)Vivado Cordic IP核计算arctan(使用技巧)

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/524.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息