Xilinx FFT IP v9.0 使用

该ip用于实现N=2**m(m=3~16)点FFT的变换,

实现的数学类型包括:

A)      定点全精度

B)      定点缩减位宽

C)      块浮点

每一级蝶型运算后舍入或者取整。对于N点运算,FFT还是逆FFT,scaling策略以及循环前缀的长度是运行时可配置的,可随帧改变,改变变换点数会复位FFT ip核。

有四种可选择的FFT的实现架构:

1)  PipelinedStreaming I/O

2)  Radix-4Burst I/O

3)  Radix-2Burst I/O

4) Radix-2 Lite Burst I/O

FFTip核使用基二和基四分解法计算离散傅里叶变换,对于Burst I/O architectures采用时域抽取法实现,对于Pipelined Streaming I/Oarchitecture.使用频域抽取法。当使用基四计算时,其蝶型算法的级数是log 4 (N),每一级包括N/4的基四蝶型运算。对于点数不是4的指数情况,则需要一个额外的基二来组合数据。类似的基二实现法需要log 2 (N)级蝶型运算。对于scaling方法,其每一级的scaling因子由s_axis_config_tdata来配置。Ip核的端口如下:

输入输出方向在上图中已经很明显了,下面描述端口作用

Aclk输入时钟,上升沿有效

Aclken :使用有效信号,高使能

Aresetn:同步复位信号,低电平有效(至少保持aclk两个时钟周期)

s_axis_config_tdata:包括配置信息,CP_LEN, FWD/INV, NFFT,SCALE_SCH.

上面信号所有s开始的表示的是axi信号的slave端,m是master端。各信号作用参考《Fast Fourier Transform v9.0 LogiCORE IP Product Guide》

以8点FFT示意,configure

implementtation

summary

由于xilinx自带的testbench是VHDL的,这里给出自己写的verilog版本的testbench。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: shichaog
//
// Create Date: 04/13/2016 08:35:42 PM
// Design Name:
// Module Name: TB_fft256
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module TB_fft256;
	// Inputs
	reg aclk;
	reg s_axis_config_tvalid;
	reg s_axis_data_tvalid;
	reg s_axis_data_tlast;
	reg m_axis_data_tready;
	reg [15:0] s_axis_config_tdata;
	reg [95: 0] s_axis_data_tdata;

	// Outputs
	wire s_axis_config_tready;
	wire s_axis_data_tready;
	wire m_axis_data_tvalid;
	wire m_axis_data_tlast;
	wire event_frame_started;
	wire event_tlast_unexpected;
	wire event_tlast_missing;
	wire event_status_channel_halt;
	wire event_data_in_channel_halt;
	wire event_data_out_channel_halt;
	wire [95 : 0] m_axis_data_tdata;

	reg[23:0] mem0_re[0:7];
	reg[23:0] mem1_re[0:7];
    reg[23:0] mem2_re[0:7];
	initial $readmemh("/home/gsc/FPGA_exercise/bf_verilog/stimulus0_24bit.dat",mem0_re);
	initial $readmemh("/home/gsc/FPGA_exercise/bf_verilog/stimulus1_24bit.dat",mem1_re);
	initial $readmemh("/home/gsc/FPGA_exercise/bf_verilog/stimulus2_24bit.dat",mem2_re);

	reg[7:0]   op_sample= 0;
	reg        op_sample_first = 1;
	reg[7:0]   ip_frame=0;
	reg[7:0]   op_frame=0;

	integer i;

	// generate clk
    always #5 aclk =! aclk;

	// Instantiate the Unit Under Test (UUT)
xfft_256 uut (
      .aclk(aclk),                                                // input wire aclk
      .s_axis_config_tdata(s_axis_config_tdata),                  // input wire [15 : 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 [95 : 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 [95 : 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
      .event_frame_started(event_frame_started),                  // output wire event_frame_started
      .event_tlast_unexpected(event_tlast_unexpected),            // output wire event_tlast_unexpected
      .event_tlast_missing(event_tlast_missing),                  // output wire event_tlast_missing
      .event_status_channel_halt(event_status_channel_halt),      // output wire event_status_channel_halt
      .event_data_in_channel_halt(event_data_in_channel_halt),    // output wire event_data_in_channel_halt
      .event_data_out_channel_halt(event_data_out_channel_halt)  // output wire event_data_out_channel_halt
    );

	initial begin
		// Initialize Inputs
		aclk = 0;
		s_axis_config_tvalid = 0;
		s_axis_config_tdata = 0;
		s_axis_data_tvalid = 0;
		s_axis_data_tdata = 0;
		s_axis_data_tlast = 0;
		m_axis_data_tready = 0;

		// Wait 100 ns for global reset to finish
		#150;
		m_axis_data_tready = 1;
		s_axis_config_tvalid = 1;
		//s_axis_config_tdata = 16'b0101100101011011; // FFT desired (and not IFFT
		s_axis_config_tdata = 16'b0000000000000111; // FFT desired (and not IFFT

		//s_axis_data_tlast = 1;
		s_axis_data_tdata = 96'h000000;
		s_axis_data_tvalid = 0;

		begin
		  for(i=0;i<8;i=i+1)
		      begin
                #10
                s_axis_data_tvalid <= 1;
                s_axis_data_tdata <= {{24'h000000},mem1_re[i],{24'h000000},mem0_re[i]};
		        $display("mem_a[%d] = %h", i, mem0_re[i]);
//		        if(i== 256)
//		            s_axis_data_tlast <= 1;
//		        else
//		            s_axis_data_tlast <= 0;
                end

	    end
		#10;
		s_axis_data_tdata = 96'h000000;
        s_axis_data_tvalid = 0;
		#1000 $finish;
		//$stop

	end
endmodule

stimulus0_24bit.dat文件内容如下:

000000
000001
000002
000003
000004
000005
000006
000007

stimulus1_24bit.dat文件内容随便,这里是两个通道的FFT计算。仿真波形图如下:

MATLAB计算所得的FFT结果如下:

将FFT结果的放大后得到如下图:

MATLAB计算的结果是28,而fpga仿真结果是00000e,-4则是fffffe,这是因为设置了scaling因子,且scaling因子是2,即28/2=14。

关于hls的实现见:

http://blog.csdn.net/shichaog/article/details/50811449

时间: 2024-10-26 22:57:07

Xilinx FFT IP v9.0 使用的相关文章

Quartus II 与ModelSim-Altera联合仿真FFT IP核之FFT IP核分析

FFT IP Core Features 参数设置 FFT IP核有4种模式,分别为: 突发模式(Burst): 缓存突发模式(Buffered Burst): 流模式(Streaming): 可变流模式(Variable Streaming): 前3中模式运算速度依次增大,占用资源也依次增加,第4种模式(Variable Streaming)可以用于在线改变FFT的大小.速度和流模式差不多,资源占用更多. 分为基本配置和高级配置两种,基本配置包括配置FFT ip核的变换长度,FFT还是IFFT

FFT IP核调用与仿真之SCALE压缩因子设置

关于FFT IP核的配置,网上有很多相关的资料可以参考,但是唯独涉及到scaled压缩因子设置这个参数,资料却非常匮乏,这是个什么参数,应该整么设置,设置后对结果输出会有什么影响,整样才能知道它设置的合理不合理? 先来看一下官方说明手册里关于scaled的说明: 翻译过来就是:对于Pipelined Streaming I/O结构,将临近的一对基2阶组在一起,即阶0和阶1为组0,阶2和阶3为组1,阶4和阶5为组2等等.例如数据长度N=1024,Scale_SCH = [10 10 00 01 1

ProToolMaker v9.0+Complete.v13.8

MapiPitney Bowes MapInfo Pro v12.0.0 Win32_64 1CD MSC.Adams.v2013.1.Win64 1DVD PGI.Visual.Fortran.v13.6.with.VS2010.Shell.win7.8.2008.r2.2012.X64 1DVD PGI.Visual.Fortran.v13.8.win7.8.2008.r2.2012.X64 1CD PGI.Visual.Fortran.v13.8.with.VS2010.Shell.win

CSI.CSiCol.v9.0.0 Repack -ISO 1CD柱子设计和分析工具

CSI.CSiCol.v9.0.0 Repack -ISO 1CD柱子设计和分析工具CSI Column v8.4.0 1CD CSI Csicol v8.3.2 Update 1CD(柱子设计和分析工具.适用于任何的混凝土 .钢筋混凝土或混合横截面的柱 子的设计) CSI.Etabs.v9.6.0-ISO 1CD(国际领先的建筑结构分析与设计软件) CSI.Etabs v9.12 CHS 1CD CSI Etabs 中文手册(34.2M) CSI Etabs NL Server v9.0.7

已经测试vmgsim.V9.0.46 最新版流程模拟软件

已经测试vmgsim.V9.0.46 最新版流程模拟软件     VMGSim 物性数据库包括5600 多个纯组分,100,000个以上的二元交互作用参数数据库,以及大量的混 合物交互作用参数,并在此基础上进行物性数据的严格计算:对于炼油模型,VMGSim集成了利用油品分析 评价数据进行炼油物流表征及油品特殊物性计算的强大功能:vmgsim在石油天然气,石油炼制,石油化工 等域,利用VMGSim你能够准确建模并预测大多数的工艺装置的性能:VMGSim在提高模拟模型的使用和开发 效率方面有了新的创

全方位的作业Lindo.Systems.Lingo.v9.0.Incl.Patch+COMSOL.Multiphysics.V5.2高级数值

全方位的作业Lindo.Systems.Lingo.v9.0.Incl.Patch+COMSOL.Multiphysics.V5.2高级数值  Lindo.Systems.Lingo.v9.0.Incl.Patch(全方位的作业研究软件)GraphPad.Prism.v4.03(著名的数据处理 软件,用来进行生物学统计.曲线拟合以及作图) Genstat.v8.2.SP1-ISO 1CD(国际常用统计软件) Lindo.Systems.Lingo.v9.0.Incl.Patch(全方位的作业研究

IBM Rational Software Architect V9.0安装图解

IBM Rational Software Architect(RSA) -- IBM软件开发平台的一部分 – 是IBM在2003年二月并购Rational以来,首次发布的Rational产品.改进过的软件开发平台在集成和易用性上达到一个新的层次.算是Rational Rose是的一个替代品. Rational Software Architect 是一个基于 Eclipse 的工具,它支持开发者和架构师获得 Eclipse 平台可用性功能. 然而,Rational Software Archi

开发程序 ip 127.0.0.0 0.0.0.0原理与区别

ip 127.0.0.1 0.0.0.0ip 地址分四个字节,每个字节有八位,及ip地址有32位,每位的数字是0-255,位与位之间用“."分开,有时ip/24,24代表24个1,表示的是子网掩码,等价于255.255.255.0.网络号是有ip和子网掩码安位与形成的,剩余的一位是本机的主机号.127.x.x.x一个特殊的ip,linux上称为localhost,习惯上称为127.0.0.1,实际上127.0.0.1到127.255.255.254之间都是等价的.正常的网络包从ip层到进入到链路

析测结Trimble TILOS v9.0 1CD

析测结Trimble TILOS v9.0 1CD Trimble Tilos可以使你的下一个项目的规划更简单快捷:· 整合时间和位置,让规划设计更加直观准确判断项目的工作位置.工作流程和生产力.· 通过优化方案,避免项目冲突.节省时间和成本.· 将CAD.测量数据和大众运输等空间数据与项目管理功能整合.· 生成专业.精确的成果.· 与其他项目规划软件数据交换.brLindo.WhatsBestn.vb v15.0.1.0 1CDMaterialise qmmmMagics 22.0.0.227