当前位置:   article > 正文

FPGA中FFT IP核应用(三)_fpga fft ip核

fpga fft ip核


前言

之前两篇文章讲解了如何使用Xilinx公司的FFT IP核如何使用,现在介绍一下Altera公司的FFT IP核使用详解。由于我现在使用的Quartus版本为13.1,所以就以这个版本的FFT IP核为例讲解其使用步骤。


一、生成FFT IP核

再正常添加FFT IP核后,会出现如下配置界面,我们只关心Step1和Step2就行。
在这里插入图片描述

  • Step1:主要是关于IP核参数配置的选项,我把我的配置放在下图,供大家参考:
    如下是关于芯片器件选项,采样点数配置,输入数据位宽,以及旋转因子精度(该值应该小于数据精度)
    在这里插入图片描述
    如下页面选择FFT引擎架构,并行FFT引擎的数量,以及I/O数据流。
    在这里插入图片描述
    实现页面选项配置,主要是对存储核运算资源的选择。
    在这里插入图片描述
  • Step2:选择仿真模块核使用的语言,如下图:
    在这里插入图片描述
  • Step3:生成IP核

二、FFT IP核引脚说明

信号方向说明
clkin输入时钟
reset_nin系统复位,低有效
clk_enain时钟使能,高有效
inversein如果断言,计算FFT逆。仅在SOP取样。即0 - FFT ,1 - IFFT
sink_realin输入数据的实部
sink_imagin输入数据的虚部
sink_sopin输入数据起始标记脉冲(维持一个时钟的高电平),与第一个数据同步
sink_eopin输入数据结束标记脉冲(维持一个时钟的高电平),与最后一个数据同步
sink_validin拉高表示通知FFT即将有N个数据输入
sink_errorin指示数据流的错误信息:00——没有错误;01——丢失SOP;10——丢失EOP;11——多余的EOP;
source_errorout表明upstream模块或者FFT模块出了问题,错误信息提示与sink_error一样 output
source_readyin表明downstream模块(理解为FFT的后续接收数据模块)可以接收数据 input
sink_readyoutFFT模块准备就绪,可以接收数据 output
source_realout变换后输出数据的实部
source_imagout变换后输出数据的虚部
source_expout结果数据缩放因子:这个指数位的意思打个比方说吧,比如它是3,就是说这时输出的虚部和实部的数值要除以2的3次方,如果是10,就要除以2的10次方,如果对结果精度要求不高的话,可以直接截去相应的长度,比如指数是3,实部输出1011_0111_0111,那么此刻实际的值应该为1_0110_1110.111;取整就是101101110
source_validout置高,准备输出结果
source_sopout输出数据起始标记
source_eopout输出数据结束标记

三、实验例程

实验环境

  • EDA:Quartus II 13.1
  • 仿真:ModelSim ALTERA STARTER EDITION 10.1d

由于Quartus没有成型的DDS IP核,所以自己设计了DDS波形发生器,来提供仿真信号输入(这个DDS波形发生器的设计可以参考一下,方便大家做信号测试使用)。有例化了FFT IP核,对输出的实部和虚部进行操作,得到频谱。如下图,我已经得到了具体的频谱图,也再程序中添加了类似于Xilinx核的索引信号,便于对频谱进行计算。
在这里插入图片描述
以下是程序例化代码:

my_fft my_fft_inst(
    .clk(clk),
    .reset_n(rst_n),
    .clk_ena(clk_ena),
    .inverse(inverse),     
    .sink_real(sink_real),
    .sink_imag(sink_imag),
    .sink_sop(sink_sop),
    .sink_eop(sink_eop),
    .sink_valid(sink_valid),
    .sink_error(sink_error),
    .source_error(source_error),
    .source_ready(source_ready),
    .sink_ready(sink_ready),
    .source_real(source_real),
    .source_imag(source_imag),
    .source_exp(source_exp),
    .source_valid(source_valid), 
    .source_sop(source_sop),
    .source_eop(source_eop)
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

注:在此附上实验例程的工程下载连接:https://download.csdn.net/download/qq_41894385/85366514,解压密码:mjd。
ps:这个版本的代码中发现有点小瑕疵,懒得重新上传,请读者自行将代码中fft_ctrl.v中的输入fft IP核的实部数据做如下映射处理:

always @(posedge clk,negedge rst_n)
   if(!rst_n)
      sin_reg <= 8'b0;
   else if(sin[7])
      sin_reg <= 8'hff;
   else
      sin_reg <= 8'b0;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/966708
推荐阅读
相关标签
  

闽ICP备14008679号