【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的使用

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

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

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

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

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

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

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

    2024年02月03日
    浏览(33)
  • 【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日
    浏览(48)
  • 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日
    浏览(35)
  • xilinx FPGA 除法器ip核(divider)的学习和仿真(Vivado)

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

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

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

    2024年02月12日
    浏览(40)
  • 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日
    浏览(52)
  • 【LabVIEW FPGA入门】模拟输入和模拟输出

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

    2024年01月17日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包