资讯详情

FPGA中FFT IP核应用(二)

Xilinx FFT IP核使用介绍

  • 前言
  • 一、Vivado的FFT使用详解
    • 1、IP介绍核配置界面
    • 2、IP核主端口说明
    • 3、IP核时序说明
  • 二、FFT核使用例程
    • 1.工程建立
    • 2.编程架构
    • 3.modelsim仿真
  • 总结


前言

以前主要介绍ise当中的FFT IP本文将介绍核的使用方法Vivado中的FFT IP核使用方法。并设计一段仿真代码,进行波形仿真,查看输出结果。


提示:以下是本文的主要内容

一、Vivado的FFT使用详解

Xilinx LogiCORE IP傅里叶快速变换(FFT)核心实现了Cooley-Tukey FFT算法是计算离散傅里叶变换(DFT)高效计算方法IP核使用AXI通过4总线协议输出数据ready和valid信号在上下游模块之间握手。 输入数据按自然顺序显示,输出数据可按自然顺序显示,也可按位/数字倒序输出。FFT验收复杂的数据样本,但实际数据可以通过将所有虚拟数字输入设置位零来转换。由于字长效应有限,在转换过程中引入噪声,导致输出数据不完全对称,建议实施实际值FFT使用输出数据的后半部分(N/2 1,N)。

1、IP介绍核配置界面

2、IP核主端口说明

名称/th> 方向 说明
aclk in 时钟信号,上升沿采样,输入范围1MHz~100MHz
aclken in 时钟使能,高电平有效
aresetn in 同步清零,低有效
s_axis_config_tdata in 配置通道数据输入,承载配置信息:CP_LEN, FWD/INV, NFFT和SCALE_SCH。
s_axis_config_tvalid in 配置通道valid信号
s_axis_config_tready out 配置通道ready信号
s_axis_data_tdata in 数据输入通道,承载采样数据:XN_RE、XN_IM
s_axis_data_tvalid in 数据输入通道valid信号
s_axis_data_tready out 数据输入通道ready信号
s_axis_data_tlast in 数据输入通道last信号
m_axis_data_tdata out 数据输出通道,承载IP核转换数据:XK_RE、XK_IM
m_axis_data_tuser out 数据输出通道,承载附加的预采样信息:XK_INDEX,OVFLO,BLK_EXP
m_axis_data_tvalid out 数据输出通道valid信号
m_axis_data_tlast out 数据输出通道last信号
m_axis_data_tready in 数据输出通道ready信号
event_frame_started out IP核开始处理新帧时发出该信号,持续一个时钟周期
event_tlast_unexpected out 当s_axis_data_tlast插入位置不对时,该信号输出,持续一个时钟周期,如果出现多个last信号,也会对应插入多个
event_tlast_missing out 当IP核输入的数据数目大于核设置的最大转换点数时,会发出该信号,持续一个时钟周期
event_data_in_channel_halt out 当信号在FFT数据输入需要接收数据时,而没有数据可用时,会插入此信号,直到有新的数据插入时,该信号才会变为低电平

3、IP核时序说明

数据在AXI4-Stream通道中的传输如图所示。TVALID由通道的源端(主端)驱动,而TREADY由接收端(从端)驱动。TVALID表示有效负载字段(TDATA、TUSER和TLAST)的值是有效的。“TREADY”表示从机已经准备好接收数据。当TVALID和TREADY在一个循环中都为真时,就会发生转移。主、从分别为下一次传输设置TVALID和TREADY。 当选择流I/O且不使用循环前缀时,核心可以将帧的加载与之前帧的处理和卸载重叠。如果上游主程序在前一帧的最后一个符号之后立即为新帧提供第一个符号,那么核心程序立即开始加载它。下图显示了通道流架构中背对背帧的一般时序。 注意,在加载帧和该帧的处理数据可用之间有一个延迟。这个延迟取决于Vivado IDE中为参数化核心所选择的选项。然而,当延迟过去后,经过处理的帧将背靠背出现。

二、FFT核使用例程

1.工程建立

  • Vivado 2020.2
  • ModelSim SE-64 2020.4

利用Vivado建立一个工程,由于需要使用得到后期的频谱图,所以这里需要建立一个DDS IP核,来产生一个可供仿真的正弦波形。而且由于要生成频谱,则在FFT运算完成后的实部、虚部数据进行平方和操作,故需要调用一个乘法器和加法器进行运算。参数配置:我的开发板系统频率是200MHz,所以现在选取FFT的采样频率为200MHz,N=4096;为了实现方便,DDS的系统频率也选取200MHz,相位累加器选取32位位宽,输出正弦波形频率定为10MHz,故DDS的频率控制字=214748365。 下面展示一下我的例化FFT核代码片段:

fft_core fft_core_inst (
  .aclk(clk),                                              // 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 [15 : 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 [15 : 0] m_axis_data_tdata
  .m_axis_data_tuser(m_axis_data_tuser),                    // output wire [15 : 0] m_axis_data_tuser
  .m_axis_data_tvalid(m_axis_data_tvalid),                  // output wire m_axis_data_tvalid
  .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_data_in_channel_halt(event_data_in_channel_halt)  // output wire event_data_in_channel_halt
);

2.程序设计架构

3.modelsim仿真

  • 首先查看DDS生成的正弦波形是否正常,如下图所示:
  • 再将正弦波形输入FFT核,查看输出是否有报错事件信号,如下图:只有event_frame_started信号有脉冲输出,表示开始处理FFT新帧计算,其它事件都为0。
  • 输出频谱,如下图所示: 根据查看频谱中最高峰的索引值为3902,经过计算得到最终的信号频率为:(4096-(3902-11))/4096*200=10.009765625≈10MHz。(其中减11是乘法器和加法器的延迟)

总结

本章对Vivado工具中的FFT IP核的应用进行了简单介绍,先介绍了FFT核配置界面的各个选项的功能及配置选项,后又对核的引脚进行了说明,有讲了一个实验例程,对于初学FFT核的同学希望有帮助,如果有不同见解请评论区留言。 注:在此附上实验例程的工程下载连接:https://download.csdn.net/download/qq_41894385/85356944解压密码:mjd。

标签: mjd41ct4g三极管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台