0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Xilinx FFT IP介绍与仿真测试

FPGA技术江湖 来源:FPGA开源工作室 作者:OpenSLee 2022-03-30 11:01 次阅读

1 Xilinx FFT IP介绍

Xilinx快速傅立叶变换(FFT IP)内核实现了Cooley-Tukey FFT算法,这是一种计算有效的方法,用于计算离散傅立叶变换(DFT)。

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

2)变换大小N = 2mm = 316

3)数据采样精度bx = 834

4)相位系数精度bw = 834

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接口介绍

Xilinx FFT IP介绍与仿真测试

1 xilinx FFT IP

1)AXI4-Stream介绍

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

Xilinx FFT IP介绍与仿真测试

2 AXI4-Stream时序图

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

2s_axis_config_tdata接口介绍

s_axis_config_tdata接口携带配置信息CP_LENFWD / INVNFFTSCALE_SCH

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

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

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

SCALE_SCH伸缩时间表:对于突发I / O架构,伸缩时间表由每个阶段的两位指定,第一阶段的伸缩由两个LSB给出。缩放比例可以指定为3210,代表要移位的位数。N = 1024Radix-4 Burst I / O的示例缩放计划是[1 0 2 3 2](从最后阶段到第一阶段排序)。对于N = 128Radix-2 Burst I / ORadix-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只能为0001。此字段仅可用于缩放算法(非缩放,块浮点或单精度浮点)。

s_axis_config_tdata接口格式:

1.(可选)NFFT加填充

2.(可选)CP_LEN加填充

3.前转/后转

4.(可选)SCALE_SCH

Xilinx FFT IP介绍与仿真测试

举例:

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

Xilinx FFT IP介绍与仿真测试

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

Xilinx FFT IP介绍与仿真测试

3)相关标志信号

Xilinx FFT IP介绍与仿真测试

3 xilinx FFT IP仿真测试

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

Matlab验证:

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

Xilinx FFT IP介绍与仿真测试

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的设置

Xilinx FFT IP介绍与仿真测试

Xilinx FFT IP介绍与仿真测试

Xilinx FFT IP介绍与仿真测试

Xilinx FFT IP介绍与仿真测试

Xilinx FFT IP介绍与仿真测试

Xilinx FFT IP介绍与仿真测试

2)仿真顶层

`timescale 1ns / 1ps
 module tb_fft_top(     );    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 begin      aclk = 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)begin        s_axis_data_tvalid=1'b1;        real_data=real_data+16'd1;        cnt=cnt+1;        if(cnt==8) s_axis_data_tlast=1'b1;        #10;      end      s_axis_data_tvalid=1'b0;      s_axis_data_tlast=1'b0;      real_data=16'd0;      #1000;      $stop;    end    always #(5) aclk= ~aclk;fft_top Ufft_top(      .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                 );endmodule

3)仿真结果

Xilinx FFT IP介绍与仿真测试

Xilinx FFT IP介绍与仿真测试

Vivado最终的仿真结果为

Real=[36,-4,-4,-4,-4,-4,-4,-4];

Imag=[0,-10,-4,-2,0,1,4,9];

matlab的计算结果相比实部一样,除虚部因为数据位的取舍问题以外,正数和负数部分顺序相反。

原文标题:Xilinx FFT IP的介绍与仿真

文章出处:【微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。
审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 测试
    +关注

    关注

    8

    文章

    5295

    浏览量

    126624
  • Xilinx
    +关注

    关注

    71

    文章

    2167

    浏览量

    121367
  • IP
    IP
    +关注

    关注

    5

    文章

    1705

    浏览量

    149531
  • 仿真
    +关注

    关注

    50

    文章

    4080

    浏览量

    133584

原文标题:Xilinx FFT IP的介绍与仿真

文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    xilinx fft ip v7.1 仿真数据于matlab 仿真数据用很大差距,求指教

    xilinx fft ip v7.1 仿真数据于matlab 仿真数据用很大差距,求指教
    发表于 10-14 20:48

    xilinx FPGA的FFT IP核的调用

    有没有大神可以提供xilinx FPGA的FFT IP核的调用的verilog 的参考程序,最近在学习FFTIP核的使用,但是
    发表于 12-25 17:05

    fft ip仿真问题

    仿真fft ip核时 输出信号一直为0,检查了输入波形,应该没有问题,大家帮忙看看吧输入是由rom里面的mif文件产生的信号。
    发表于 11-21 10:44

    xilinx FFT ip仿真的误差太大?

    用的xilinxFFT 9.1版本的ip核 , 仿真出来的结果和我MATLAB算出来的结果差的很多,也没有倍数关系,scaled因数改了好几次,没有溢出,波形大致相同,但是数值上差的
    发表于 07-10 16:16

    基于FPGA的FFT和IFFT IP核应用实例

    FFT IP核进行运算,输出FFT结果的实部和虚部分别存储在fft_result_real.txt和fft_result_image.txt
    发表于 08-10 14:30

    【Mill】Xilinx ip FFT变换,为什么你的matlab数据无法严格比对?——无线通信连载

    的数据是可以完全严格比对,如果设计中存在不能完全比对的情况,要特别注意相关参数是否匹配,尤其是缩放因子。一.Xilinx FFT IP介绍1.总体特性 •
    发表于 02-16 07:36

    利用FFT IP Core实现FFT算法

    利用FFT IP Core实现FFT算法 摘要:结合工程实践,介绍了一种利用FFT IP Co
    发表于 01-16 10:04 6914次阅读
    利用<b class='flag-5'>FFT</b> <b class='flag-5'>IP</b> Core实现<b class='flag-5'>FFT</b>算法

    基于Xilinx_FPGA_IP核的FFT算法的设计与实现

    利用FPGA的IP核设计和实现FFT算法
    发表于 05-24 14:14 37次下载

    FFT变换的IP核的源代码

    Xilinx FPGA工程例子源码:FFT变换的IP核的源代码
    发表于 06-07 11:44 10次下载

    XilinxIP:1024点FFT快速傅立叶变换

    Xilinx FPGA工程例子源码:XilinxIP:1024点FFT快速傅立叶变换
    发表于 06-07 15:07 51次下载

    Modelsim仿真带有Qsys的FFT和NCO的工程的方法

    因为自从13.0开始,就开始有Qsys了,而关于FFT和NCO的仿真特别麻烦,网上有关资料又少之又少,所以特写此教程介绍怎么使用modelsim工具仿真附带有QSYS的
    发表于 02-27 19:02 45次下载

    Xilinx FIR IP介绍仿真

    Xilinx FIR IP介绍仿真 1 xilinx fir ip 简介 1)符合 AXI4
    的头像 发表于 10-30 12:29 896次阅读

    如何进行FFT IP配置和设计

    Xilinx Vivado设计套件中提供的FFT IP为例,简要说明如何进行FFT IP配置和设计。
    的头像 发表于 07-22 10:21 2425次阅读

    Xilinx FFT IP核到FPGA实现OFDM

    笔者在校的科研任务,需要用FPGA搭建OFDM通信系统,而OFDM的核心即是IFFT和FFT运算,因此本文通过Xilinx FFT IP核的使用总结给大家开个头,详细内容可查看官方文档
    的头像 发表于 07-10 10:43 1404次阅读
    从<b class='flag-5'>Xilinx</b> <b class='flag-5'>FFT</b> <b class='flag-5'>IP</b>核到FPGA实现OFDM

    Vivado中FFT IP核的使用教程

    本文介绍了Vidado中FFT IP核的使用,具体内容为:调用IP核>>配置界面介绍>>IP核端
    的头像 发表于 11-06 09:51 805次阅读
    Vivado中<b class='flag-5'>FFT</b> <b class='flag-5'>IP</b>核的使用教程