目录

1、xilinx FFT IP介绍

2、FFT IP接口介绍

3、xilinx FFT IP的仿真测试

4、修改

5、参考:


1、xilinx FFT IP介绍

1)正向和反向复数FFT,运行时间可配置。

2)变换大小N = 2m,m = 3 – 16

3)数据采样精度bx = 8 – 34

4)相位系数精度bw = 8 – 34

5)算术类型:

  • 无标度(全精度)定点
  • 定标定点
  • 浮点数

6)定点或浮点接口

7)蝴蝶后舍入或截断

8)Block RAM或分布式RAM,用于数据和相位因子存储

9)可选的运行时可配置转换点大小

10)可扩展的定点核心的运行时可配置扩展时间表

11)位/数字反转或自然输出顺序

12)用于数字通信系统的可选循环前缀插入

13)四种架构在内核大小和转换时间之间进行权衡

14)位精确的C模型和用于系统建模的MEX功能可供下载

15)有四种运算架构可供选择

  • Pipelined Streaming I/O
  • Radix-4 Burst I/O
  • Radix-2 Burst I/O
  • Radix-2 Lite Burst I/O

2、FFT IP接口介绍

1)AXI4-Stream 介绍

AXI4-Stream接口带来了标准化,并增强了Xilinx IP LogiCORE解决方案的互操作性。除了诸如aclk,acclken和aresetn之类的常规控制信号以及事件信号之外,到内核的所有输入和输出都通过AXI4-Stream通道进行传输。通道始终由TVALID和TDATA以及必填字段和可选字段(如TREADY,TUSER和TLAST)组成。TVALID和TREADY一起执行握手以传输消息,其中有效负载为TDATA,TUSER和TLAST。内核对包含在TDATA字段中的操作数进行运算,并将结果输出到输出通道的TDATA字段中。

上图显示了在AXI4-Stream通道中的数据传输。TVALID由通道的源(主)端驱动,而TREADY由接收器(从属)驱动。TVALID指示有效负载字段(TDATA,TUSER和TLAST)中的值有效。TREADY表示从机已准备好接收数据。当一个周期中的TVALID和TREADY均为TRUE时,将发生传输。主机和从机分别为下一次传输分别设置TVALID和TREADY。

2)s_axis_config_tdata接口介绍

s_axis_config_tdata接口携带配置信息CP_LEN,FWD / INV,NFFT和SCALE_SCH。

NFFT(变换的点大小):NFFT可以是最大变换的大小或任何较小的点大小。例如,1024点FFT可以计算点大小1024、512、256等。NFFT的值为log2(点大小)。该字段仅在运行时可配置的转换点大小时出现。

CP_LEN(循环前缀长度):从转换结束起,在输出整个转换之前,最初作为循环前缀输出的样本数。CP_LEN可以是小于点大小的从零到一的任何数字。该字段仅在循环前缀插入时出现。

FWD_INV:指示是执行前向FFT变换还是逆向FFT变换(IFFT)。当FWD_INV = 1时,将计算前向变换。如果FWD_INV = 0,则计算逆变换。

SCALE_SCH伸缩时间表:对于突发I / O架构,伸缩时间表由每个阶段的两位指定,第一阶段的伸缩由两个LSB给出。缩放比例可以指定为3、2、1或0,代表要移位的位数。N = 1024,Radix-4 Burst I / O的示例缩放计划是[1 0 2 3 2](从最后阶段到第一阶段排序)。对于N = 128,Radix-2 Burst I / O或Radix-2 Lite Burst I / O,一个可能的扩展时间表是[1 1 1 1 0 1 2](从最后阶段到第一阶段排序)。对于流水线I / O架构,从两个LSB开始,每两对Radix-2级用两位指定扩展时间表。例如,N = 256的缩放时间表可以是[2 2 2 3]。当N不是4的幂时,最后一级的最大位增长为一位。例如,对于N = 512,[0 2 2 2 2]或[1 2 2 2 2]是有效的缩放时间表,但是[2 2 2 2 2]无效。对于此变换长度,SCALE_SCH的两个MSB只能为00或01。此字段仅可用于缩放算法(非缩放,块浮点或单精度浮点)。

s_axis_config_tdata接口格式:

1.(可选)NFFT加填充

2.(可选)CP_LEN加填充

3.前转/后转

4.(可选)SCALE_SCH

举例:

内核具有可配置的转换大小,最大大小为128点,具有循环前缀插入和3个FFT通道。内核需要配置为执行8点变换,并在通道0和1上执行逆变换,并在通道2上执行前向变换。需要4点循环前缀。这些字段采用表中的值。

这给出了19位的向量长度。由于所有AXI通道必须与字节边界对齐,因此需要5个填充位,从而s_axis_config_tdata的长度为24位。

3)相关标志信号

3、xilinx FFT IP的仿真测试

FFT的长度选择8点,x输入序列为x=[1,2,3,4,5,6,7,8];

Matlab验证:

x = [1,2,3,4,5,6,7,8];y =fft(x,8);realy=real(y);imagy=imag(y);

Y的实部输出为realy=[36,-4,-4,-4,-4,-4,-4,-4];

Y的虚部输出为imagy=[0,9.6569,4,1.6569,0,-1.6569,-4,-9.6569];

FPGA仿真验证:

1)IP的设置

注意:此处应该设置为顺序输出;

注意:IP核配置结束,端口位宽以及具体分配可以在这里看出!

2)仿真顶层

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2020/06/28 21:17:52
// Design Name:
// Module Name: fft_tsb
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module fft_tsb();reg aclk;                        reg [7 : 0] s_axis_config_tdata;reg         s_axis_config_tvalid;        wire        s_axis_config_tready;       wire [31 : 0] s_axis_data_tdata;  reg         s_axis_data_tvalid;          wire        s_axis_data_tready;         reg         s_axis_data_tlast;           wire [31 : 0] m_axis_data_tdata;wire        m_axis_data_tvalid;         reg         m_axis_data_tready;  wire        m_axis_data_tlast;reg [15:0] real_data;reg [15:0] imag_data;wire [15:0] real_dataout;wire [15:0] imag_dataout;reg [9:0]  cnt;assign s_axis_data_tdata={real_data,imag_data};assign real_dataout = m_axis_data_tdata[31:16];assign imag_dataout = m_axis_data_tdata[15:0];initial beginaclk = 0;s_axis_config_tdata=8'b0;s_axis_config_tvalid=1'b0;s_axis_data_tvalid=1'b0;s_axis_data_tlast=1'b0;real_data=16'd0;imag_data=16'd0;cnt = 0;m_axis_data_tready=1'b1;#1000;s_axis_config_tdata=8'b0000_0001;s_axis_config_tvalid=1'b1;#10;s_axis_config_tdata=8'b0000_0000;s_axis_config_tvalid=1'b0;#1000;repeat(8)begins_axis_data_tvalid=1'b1;real_data=real_data+16'd1;cnt=cnt+1;if(cnt==8) s_axis_data_tlast=1'b1;#10;ends_axis_data_tvalid=1'b0;s_axis_data_tlast=1'b0;real_data=16'd0;#1000;$stop;endalways #(5) aclk= ~aclk;
xfft_0 Uxfft(.aclk(aclk),                                                // input wire aclk.s_axis_config_tdata(s_axis_config_tdata),                  // input wire [7 : 0] s_axis_config_tdata.s_axis_config_tvalid(s_axis_config_tvalid),                // input wire s_axis_config_tvalid.s_axis_config_tready(s_axis_config_tready),                // output wire s_axis_config_tready.s_axis_data_tdata(s_axis_data_tdata),                      // input wire [31 : 0] s_axis_data_tdata.s_axis_data_tvalid(s_axis_data_tvalid),                    // input wire s_axis_data_tvalid.s_axis_data_tready(s_axis_data_tready),                    // output wire s_axis_data_tready.s_axis_data_tlast(s_axis_data_tlast),                      // input wire s_axis_data_tlast.m_axis_data_tdata(m_axis_data_tdata),                      // output wire [31 : 0] m_axis_data_tdata.m_axis_data_tvalid(m_axis_data_tvalid),                    // output wire m_axis_data_tvalid.m_axis_data_tready(m_axis_data_tready),                    // input wire m_axis_data_tready.m_axis_data_tlast(m_axis_data_tlast)                      // output wire m_axis_data_tlast       );
endmodules

仿真结果:

4、修改

可以看出,3中调用FFT核计算结果与Matlab计算结果实部相同,虚部出现不一致;出现问题的原因是数据传输的时候(输入和输出),实部虚部的顺序搞反了,修改以后输出与Matlab一致;

这里只附上修改后运行结果:

可以看出,结果正确。

5、参考:

FPGA开源工作室

Vivado中FFT9.1 IP核的使用(1)相关推荐

  1. vivado中复数乘法器IP核使用小结

    vivado中复数乘法器IP核使用小结 添加ip核 进入工程,点击IP Catalog,在弹出的窗口中点击数学功能–math functions,选择multipliers–complex multi ...

  2. Vivado中的FFT IP核使用(含代码)

    本文介绍了Vidado中FFT IP核的使用,具体内容为:调用IP核>>配置界面介绍>>IP核端口介绍>>MATLAB生成测试数据>>测试verilog ...

  3. Vivado中RTL封装IP流程

    Vivado中RTL封装IP流程 前言 本文记录自己将RTL代码封装成IP的流程,以供之后查阅使用.最近一个月在做一个数据仲裁与转发的项目,已经完成功能仿真,准备将其封装成IP在Block Desig ...

  4. 【以前】ModelSim中仿真Xilinx IP核

    先对题目进行说明:ModelSim本身是一个独立的仿真环境,不需要依赖其他的软件.这里所说的" ModelSim仿真XilinxIP核"是指单独运行ModelSim 进行仿真,而不 ...

  5. vivado使用自带IP核和创建自己定义的IP核

    任务:使用vivado自带IP和创建IP 目的:学会使用Vivadao相关的IP组件 步骤: 1.使用自带IP 工程创建好之后,选择IP Catalog.软件就会列出自带的,自带的IP核有很多种,选择 ...

  6. Vivado 自定义VHDL的IP核

    自定义VHDL的IP核 本文介绍基于VHDL语言的IP核的创建. 说明:使用软件版本为Vivado 2019.2 文章目录 自定义VHDL的IP核 一.创建IP核 1.1 创建IP核管理工程 1.2 ...

  7. 基于xilinx vivado的GTX/GTP ip核设置与例程代码使用详解

    本文目录 1 概述 2 参考文档 3 GTX的IP设置 3.1 本例程使用环境 3.2 GTX IP界面的设置情况 3.2.1 GTX IP设置第1页 3.2.2 GTX IP设置第2页 3.2.3 ...

  8. Vivado 实现逆序ip核,AXI4-Lite Interface(vcu118,HLS级开发)

    实验环境 1.软件:Vivado HLS 2017.04,Vivado 2017.04,Vivado SDK2017.04 2.硬件:Xilinx Virtex UltraScale+ FPGA VC ...

  9. 在quartus中使用FFT IP核最全教程(从入门到放弃)

    一.准备工作 首先需要把需要的器材准备好,我使用的是quartus18.0,并且要使用IP核被破解的版本,不然无法使用其中的FFT和NCO,一定要注意,quartus对于版本非常敏感,一定要严格对应好 ...

最新文章

  1. 打造自己的树莓派监控系统2--内存监控-matplotlib显示数据
  2. 【随笔】通用近似定理
  3. 数据仓库—stg层_手把手教你创建BI数据仓库STG层
  4. LDAP-GUI管理工具
  5. c#官方推荐md5通用加密类
  6. 给大家一个网站程序,fastmai网站源码
  7. 配置hosts快速访问GitHub
  8. python 列表去空_在Python中使用filter去除列表中值为假及空字符串的例子
  9. 深耕智慧园区 看龙田科技与华为的“默契”
  10. Word文档文字尾部加下划线(基于Office 2016)
  11. 2017-2018-2 1723《程序设计与数据结构》助教总结
  12. Gym - 100886B 2015-2016 Petrozavodsk Winter Training Camp, Saratov SU Contest B - Game on Bipartite
  13. 前端程序员《HTML》标签学习
  14. 沃尔玛跨境智星的介绍与用法
  15. c++实现STL标准库
  16. 3.OpenCV可视化(Viz)——单目相机标定模拟
  17. ampak正基RF定频安装指导
  18. 总结:Prometheus存储
  19. Fiddler抓包使用教程-安装配置
  20. 俄罗斯方块——制作道具

热门文章

  1. 服务器虚拟主机安装什么软件,虚拟主机软件如何安装
  2. 《Linux内核完全剖析-基于0.12内核》书评之陈莉君
  3. 2d3d卫星地图转换+搜索js+html+css实现
  4. Arduino开发板使用DHT11温湿度传感器的方法
  5. 读《人生的智慧》——叔本华
  6. Cassandra 配置详解
  7. 最最最最基本的服务器网站维护防御攻略
  8. Java Pitfalls读书笔记1(语法)
  9. Unity3D快速实现UI架构设计二
  10. springcloud微服务国际化