加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

xilinx FFT IP的介绍与仿真

2020/06/29
285
阅读需 15 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1 xilinx FFT IP 介绍

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

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 xilinx 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 字段中。

图 2 AXI4-Stream 时序图

图 2 显示了在 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 验证:

clear allclose allclc 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 的设置

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)仿真结果

Vivado 最终的仿真结果为

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

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

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

赛灵思

赛灵思

赛灵思(英语:Xilinx)是一家位于美国的可编程逻辑器件的生产商。该公司发明了现场可编程逻辑门阵列,并由此成名。赛灵思还是第一个无厂半导体公司(Fabless)。28nm时代,赛灵思提出All Programmable 的概念,从单一的FPGA企业战略转型为All Programmable FPGA、 SoC 和 3D IC 的全球领先提供商。且行业领先的器件与新一代设计环境以及 IP 完美地整合在一起,可满足客户对可编程逻辑乃至可编程系统集成的广泛需求赛灵思于1984年创建于美国加利福尼亚州的硅谷,总部位于硅谷核心的圣何塞,并在科罗拉多州、爱尔兰、新加坡 印度、中国、日本拥有分支机构

赛灵思(英语:Xilinx)是一家位于美国的可编程逻辑器件的生产商。该公司发明了现场可编程逻辑门阵列,并由此成名。赛灵思还是第一个无厂半导体公司(Fabless)。28nm时代,赛灵思提出All Programmable 的概念,从单一的FPGA企业战略转型为All Programmable FPGA、 SoC 和 3D IC 的全球领先提供商。且行业领先的器件与新一代设计环境以及 IP 完美地整合在一起,可满足客户对可编程逻辑乃至可编程系统集成的广泛需求赛灵思于1984年创建于美国加利福尼亚州的硅谷,总部位于硅谷核心的圣何塞,并在科罗拉多州、爱尔兰、新加坡 印度、中国、日本拥有分支机构收起

查看更多

相关推荐

电子产业图谱

lee
lee

从数字出发,走进图像世界,聆听音频的美妙旋律。从电路出发,实现美妙的算法,展示代码的美奂。从知识到实现,欢迎大家关注公众号FPGA开源工作室。