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核的port例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
输入输出方向在上图中已经非常明显了,以下描写叙述port作用
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
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
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
Xilinx FFT IP v9.0 使用的更多相关文章
- Xilinx FFT IP v9.0 使用(一)
reference:https://blog.csdn.net/shichaog/article/details/51189711 https://blog.csdn.net/qq_36375505/ ...
- 从Xilinx FFT IP核到OFDM
笔者在校的科研任务,需要用FPGA搭建OFDM通信系统,而OFDM的核心即是IFFT和FFT运算,因此本文通过Xilinx FFT IP核的使用总结给大家开个头,详细内容可查看官方文档PG109.关于 ...
- Xilinx FFT IP核缩放因子说明
以1024点FFT为例, reg [9:0] scale_sch = 10'b11_10_01_01_01; 流水线结构中,将每个基 2 的蝶形处理单元视为一个阶段. 每个阶段进行一次数据的缩减,缩减 ...
- FFT HDL Optimized模块HDL综合代码生成及与Xilinx xfft IP MEX接口精度详细比较
前面一篇随笔叙述了关于MATLAB中FFT_HDL_Optimzed模块定点(IEEE754单精度float格式)二进制与十进制转换实现,有需要的往前翻一下即可.这一篇随笔将叙述 FFT HDL Op ...
- 实测—fft IP核使用(包括ifft的配置使用)
Vivado xilinx fft9.0 使用笔记: ****注 仿真实测1024点的转换需要经过1148个时钟周期才能得到转换结果: 模块配置信号含义请参考pg109文档手册(写的贼烂会看晕),不详 ...
- FFT ip core
The FFT core provides four architecture options to offer a trade-off权衡取舍 between core size andtransf ...
- PCIE xilinx v5 IP核使用前的研究
外带一个月前啃的一个星期,加本星期心无旁骛,啃出些心得,广惠后人.但愿有用. trn信号是数据链路层的信号 TLP包是数据链路层传给transaction层的包 解包需要一个transaction的协 ...
- xilinx DMA IP核(一) —— loop测试 代码注释
本篇笔记中的代码来自:米联科技的教程“第三季第一篇的DMA_LOOP环路测试” 硬件的连接如下图所示: 图:DMA Loop Block Design 橘色的线就是DMA加FIFO组成的一个LOOP循 ...
- FFT IP核调用与仿真之SCALE压缩因子设置
关于FFT IP核的配置,网上有很多相关的资料可以参考,但是唯独涉及到scaled压缩因子设置这个参数,资料却非常匮乏,这是个什么参数,应该整么设置,设置后对结果输出会有什么影响,整样才能知道它设置的 ...
随机推荐
- Win7如何解决telnet不是内部或外部命令的方案!
https://jingyan.baidu.com/article/7908e85c6ec355af491ad265.html Telnet用于远程操作互联网中的设备或终端计算机服务器,可以有效的减少 ...
- 送你一套纯净版的 SSM 架构
大致介绍一下,目前 Java 中使用比较多的框架组合就是 Spring .Springmvc .Mybatis ,这 3 个框架也就是我们常说的 SSM. 前面陆陆续续也已经介绍完了这 3 个框架,今 ...
- 网络数据包信息收集工具ferret-sidejack
网络数据包信息收集工具ferret-sidejack 网络数据包传递用户的各种操作和对应的信息.但是由于各种数据混在一起,不利于渗透测试人员分析.Kali Linux提供了一款信息搜集工具ferr ...
- mysql三大特性、三范式、五大约束
1.数据库的三大特性 '实体':表 '属性':表中的数据(字段) '关系':表与表之间的关系 2.数据库设计三大范式 a:确保每列保持原子性(即数据库表中的所有字段值是不可分解的原子值) b:确保表中 ...
- CSDN博客栏目设置个性化
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha ====== <a href=" http://weibo.com/23 ...
- 正睿OI 提高 Day1T3 ZYB玩字符串(DP)
题目链接 设可能的答案串为p,长为len.p一定是s的一个子串且len|n. 虽然一些p在s中可能被断成若干段,但删掉其中的若干段后,这段区间一定会被全部消掉. 于是枚举p后,可以用f[i][j]表示 ...
- BZOJ.2007.[NOI2010]海拔(最小割 对偶图最短路)
题目链接 想一下能猜出,最优解中海拔只有0和1,且海拔相同的点都在且只在1个连通块中. 这就是个平面图最小割.也可以转必须转对偶图最短路,不然只能T到90分了..边的方向看着定就行. 不能忽略回去的边 ...
- jQuery自己定义绑定的魔法升级版
jQuery自己定义绑定 首先让我们来看看jQuery的自己定义绑定的用法,你能够使用bind或者live来订阅一个事件(当然1.7以后也能够使用on了),代码例如以下: $("#myEle ...
- STM32 TIMER DIAGRAM
- LPC-LINK 2 Board IO