【FPGA】Xilinx Cordic IP 内核使用记录(输入输出数据格式介绍)及实验仿真

这篇具有很好参考价值的文章主要介绍了【FPGA】Xilinx Cordic IP 内核使用记录(输入输出数据格式介绍)及实验仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

功能描述

1、Rotate

Rotate 实现的功能是坐标的旋转。
输入 X, Y, Phase
输出X’, Y’
具体实现的功能对应的数学表达形式如下:
cordic xilinx,FPGA,fpga开发
在做FFT 复乘旋转因子时也可以用这个IP核的Rotate功能来实现。旋转因子-旋转!

2、Translation

Translation 实现的功能是求模,以及向量的夹角
输入 X, Y
输出X’ and Phase
具体实现的功能对应的数学表达形式如下:
cordic xilinx,FPGA,fpga开发
cordic xilinx,FPGA,fpga开发

3、Sin and Cos

功能:求取θ角对应的Sin 和Cos 函数值
输入:Phase
输出:X_OUT = Cos(PHASE_IN), Y_OUT = Sin(PHASE_IN)).

注:角度\相位Phase的数据格式是 2QN format,The output vector, (X_OUT, Y_OUT), is expressed as a pair of fixed-point twos complement numbers with an integer width of 2 bits (1QN format).
下面有关于数据格式的简略解释。

在数据输出时X,Y在同一个接口输出 sin的值在高位,cos的值在低位

cordic xilinx,FPGA,fpga开发

4、Sinh and Cosh

功能:求解sinh 和cosh 在phase下的值
输入:Phase 角度
输出:坐标,注意高低位对应!
cordic xilinx,FPGA,fpga开发

5、ArcTan

功能:求反正切函数值
输入:(X,Y) 坐标值
输出:Phase 角度
cordic xilinx,FPGA,fpga开发

6 ArcTanh

功能:求Arctanh 函数值
输入:(Xin, Yin)
输出:Phase and (Xout,0)
cordic xilinx,FPGA,fpga开发

数据格式

在这个IP内核里面
角度Phase的数据一般都是 1位符号位_2位整数位_N位小数位(2QN格式),
X, Y的输入是1位符号位_1位整数位_N位小数位(1QN格式)
输入,输出的数据都是二进制补码的形式(二补码),并且其他IP运算出来的数据可以直接输入到这个内核进行运算,大概可能都是补码的原因。

但是!!!在IP核运算中需要注意小数点对齐,数据截位的问题。
比如使用Xilinx 的 复数乘法器 CMPY IP 内核时,一个通道输入的仅仅存在符号位而不存在小数位,另外一个通道输入的却是1QN格式的数据,那么输出的结果也会存在着N位小数位。那么需要进行数据截位之后才会得到想要的结果。

详细可参考以下的一篇博文:
Xilinx Vivado复数乘法器Complex Multiplier IP核调用及其仿真

简单来说,就是如果输出选择最大位宽(无截位时),从非小数点的位置开始取,到输入数据位宽一致的位置即可。

例如,Cmpy 输入的一个复数是1位符号位+15位整数位无小数位;另一个输入的数据格式是1符号位+1整数位+14位小数位
那么在无截位输出的数据里[13:0]依旧是小数位,[14+:16](这种表述格式相当于[29:14], 14是开始截取的位置,16是截取的总位宽)位是我们想查看的。

使用教程

使用教程以Rotate 为例。
在 IP Catalog 搜索到我们的Cordic IP内核,点开后按下图所示经行内核设置。

cordic xilinx,FPGA,fpga开发
第二页好像不用怎么配置(以后需要深入了解)
cordic xilinx,FPGA,fpga开发

注意!!!每次数据输入需要延迟一段时间 ,这个延时具体在IP核配置的界面,那个Latency:22就是。

仿真激励文件代码:

`timescale 1ns / 1ps

 
module cordic_rotate_tb();
 
// cordic_rotate_test Inputs
reg   clk                                  = 0 ;
reg   start                                = 0 ;
reg   [15:0]  x_in                         = 0 ;
reg   [15:0]  y_in                         = 0 ;
reg   [15:0]  pha_in                       = 0 ;
// reg [15:0] X_in [7:0];
// cordic_rotate_test Outputs
wire  over                                 ;
wire  [15:0]  x_out                        ;
wire  [15:0]  y_out                        ;
 
 
initial
begin
    forever #5  clk=~clk;
end
 
cordic_rotate  u_cordic_rotate (
    .clk                     ( clk            ),
    .start                   ( start          ),
    .x_in                    ( x_in    [15:0] ),
    .y_in                    ( y_in    [15:0] ),
    .pha_in                  ( pha_in  [15:0] ),
                                        
    .over                    ( over           ),
    .x_out                   ( x_out   [15:0] ),
    .y_out                   ( y_out   [15:0] )
);
 
 
initial
begin
    #5  
    start<=1;
    pha_in<=16'b0000000000000000;//0
    x_in<=16'b0100000000000000;
    y_in<=16'b0000000000000000;
    
    #22 //第二次输入要在第一次输出之后,需要延时 
    pha_in<=16'b0011001000111101; //pi/2
    x_in<=16'b0100000000000000;
    y_in<=16'b0000000000000000;
end
 always @(posedge clk)begin
     #300
     $stop;
 end
 
endmodule

rotate代码:

`timescale 1ns / 1ps
//
// Company: SZU
// Engineer: LiangWF22
// 
// Create Date: 2023/03/19 09:42:43
// Design Name: 
// Module Name: cordic_rotate
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module cordic_rotate(
input clk,                    //输入时钟信号
input start,                  //输入开始计算信号
input [15:0] x_in,            //输入坐标x
input [15:0] y_in,            //输入坐标y
input [15:0] pha_in,          //输入相角
output wire over,             //输出计算完成标志
output wire [15:0] x_out,     //输出坐标x
output wire [15:0] y_out      //输出坐标y
    );

cordic_0 cordic_rotate0 (
  .aclk(clk),                                        // input wire aclk
  .s_axis_phase_tvalid(start),          // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(pha_in),            // input wire [15 : 0] s_axis_phase_tdata
  .s_axis_cartesian_tvalid(start),  // input wire s_axis_cartesian_tvalid
  .s_axis_cartesian_tdata({y_in,x_in}),    // input wire [31 : 0] s_axis_cartesian_tdata
  .m_axis_dout_tvalid(over),            // output wire m_axis_dout_tvalid
  .m_axis_dout_tdata({y_out,x_out})              // output wire [31 : 0] m_axis_dout_tdata
);

endmodule


工程链接

CSDN:https://download.csdn.net/download/LiangWF22/87591037
其他:https://leoeinstein.lanzoum.com/ixdrk0qiefnc

Forever young,always tearful.文章来源地址https://www.toymoban.com/news/detail-727001.html

到了这里,关于【FPGA】Xilinx Cordic IP 内核使用记录(输入输出数据格式介绍)及实验仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • FPGA(基于xilinx)中PCIe介绍以及IP核XDMA的使用

    FPGA(基于xilinx)中PCIe介绍以及IP核XDMA的使用

    例如:第一章 PCIe简介以及IP核的使用 PCIe 总线架构与以太网的 OSI 模型类似,是一种分层协议架构, 分为事务层(Transaction Layer)、 数据链路层(Data Link Layer) 和物理层(Physical Layer)。 这些层中的每一层都分为两部分:一部分处理出站(要发送的)信息,另一部分处理入站(接收

    2024年02月08日
    浏览(8)
  • xilinx FPGA 乘法器ip核(multipler)的使用(VHDL&Vivado)

    xilinx FPGA 乘法器ip核(multipler)的使用(VHDL&Vivado)

    一、创建除法ip核  可以选择两个变量数相乘,也可以选择一个变量输入数据和一个常数相乘 可以选择mult(dsp资源)或者lut(fpga资源) 可以选择速度优先或者面积优先 可以自己选择输出位宽 还有时钟使能和复位功能  二、编写VHDL程序:声明和例化乘法器ip核 三、编写仿真程

    2024年02月11日
    浏览(14)
  • 具于xilinx FPGA的可动态配置DDS频率控制字的DDS IP核使用例程详解

    具于xilinx FPGA的可动态配置DDS频率控制字的DDS IP核使用例程详解

    本文用于讲解xilinx IP 的dds ip examples(动态配置频率)的功能说明,方便使用者快速上手。 本examples 是月隐编写的针对DDS的使用demo,实现通过vio控制频率控制字来调整DDS的输出频率,为大家演示一个可动态配置DDS频率的例程。 例程的平台: 1) 硬件平台:XC7Z020CLG484-2 2) FP

    2024年02月02日
    浏览(9)
  • 《FPGA调试记录》Xilinx 7series FPGA 万兆网UDP

    《FPGA调试记录》Xilinx 7series FPGA 万兆网UDP

    第一次在Xilinx 7series FPGA上实现万兆网UDP设计。具体的实现思路参考米联客的实现方案,但是由于米联客的udp协议栈只提供了网表文件,所以对于他们的内容没有深究,只是用来作为前期链路通断的验证方案。 建议初次上板实现时最好先想办法验证一下硬件,防止硬件有问题

    2024年02月03日
    浏览(7)
  • 【Xilinx FPGA】DDR3 MIG IP 仿真

    【Xilinx FPGA】DDR3 MIG IP 仿真

    Memory Interface Generator (MIG 7 Series)是 Xilinx 为 7 系列器件提供的 Memory 控制器 IP,使用该 IP 可以很方便地进行 DDR3 的读写操作。本文主要记录 Xilinx DDR3 MIG IP 的仿真过程,包括 IP 配置和 DDR3 读写仿真两部分内容。 目录 1 MIG IP 配置 2 DDR3 读写仿真         在 Vivado 开发平台 IP C

    2024年02月09日
    浏览(9)
  • Vivado cordic IP核rotate和translate使用详解(附有代码)

    Vivado cordic IP核rotate和translate使用详解(附有代码)

    Vivado cordic IP核rotate和translate使用详解(附有代码) 目录 前言 一、cordic简介 二、使用cordic IP核需要知道的预备知识 1.数据端口 2.Q Numbers Format 3.Vector Translation 4.Vector Rotation 三、IP核配置说明 1.translate 2.Rotate 四、Translate仿真 1.顶层代码 2.仿真代码 五、Rotate仿真 1.顶层代码 2.仿真代

    2023年04月27日
    浏览(88)
  • xilinx FPGA 除法器ip核(divider)的学习和仿真(Vivado)

    xilinx FPGA 除法器ip核(divider)的学习和仿真(Vivado)

    在设计中,经常出现除法运算, 实现方法 : 1、移位操作 2、取模取余 3、调用除法器IP核 4、查找表 简单学习除法器IP。 网上很多IP翻译文档,不详细介绍,记录几个重要的点: 1、三种算法模式(不同模式所消耗的资源类型不同) 2、分清除数和被除数;余数模式的选择 3、延

    2024年04月28日
    浏览(172)
  • FPGA 之 xilinx DDS IP相位控制字及频率控制字浅析

    FPGA 之 xilinx DDS IP相位控制字及频率控制字浅析

    本文仅为个人理解之用; 相关仿真结果如下:

    2024年02月12日
    浏览(17)
  • Xilinx FPGA DDR3设计(三)DDR3 IP核详解及读写测试

    Xilinx FPGA DDR3设计(三)DDR3 IP核详解及读写测试

    引言 :本文我们介绍下Xilinx DDR3 IP核的重要架构、IP核信号管脚定义、读写操作时序、IP核详细配置以及简单的读写测试。 7系列FPGA DDR接口解决方案如图1所示。 图1、7系列FPGA DDR3解决方案 1.1 用户FPGA逻辑(User FPGA Logic) 如图1中①所示,用户FPGA逻辑块是任何需要连接到外部

    2024年02月06日
    浏览(13)
  • 【LabVIEW FPGA入门】模拟输入和模拟输出

    【LabVIEW FPGA入门】模拟输入和模拟输出

             1.打开项目,在FPGA终端下面新建一个VI         2.本示例以模拟输入卡和模拟输出卡同时举例。         3.新建一个VI编写程序,同时将卡1的输出连接到卡2的输入使用物理连线。         4.编译并运行程序,观察是否能从通道中采集和输出信号。         5.同时

    2024年01月17日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包