当前位置:   article > 正文

VIVADO FFT IP核简单使用、8点FFT的实现

vivado fft ip

一、VIVADO FFT IP核的调用、配置和生成

  1. 点击IP Catalog查找到vivado的fft IP核Fast Fourier Transform,双击进入配置界面。
    在这里插入图片描述

  2. 界面介绍,主要分为两大块,左边区域为IP核整体信息介绍部分,右边为详细配置部分。按照自己需求进行配置后可查看左边生成的IP核信息。具体的IP核配置界面介绍和参数分析可查看以下链接中大佬们阐述的内容。
    在这里插入图片描述
    !!!!!!☟☟☟不懂必看系列☟☟☟!!!!!!
    vivado 的IFFT/FFT IP核的配置及调用
    Vivado中FFT9.1 IP核的使用(1)

看完上面的链接后,可根据自己需求配置IP核
这里有三个需要注意的点:
①:时钟要设置正确,并且仿真或者硬件输入要匹配。如果硬件输入时钟与你的FFT IP核时钟不一致,可以使用MMCM时钟IP核进行转换。仿真时也要记得给对正确的时钟。
②:FFT IP核的复位引脚(ARESETn)最好使用,怎么使用?–把时钟IP核输出的locked引脚赋给FFT的复位引脚,并且在locked引脚为低时给FFT IP核一系列输入引脚均赋予初值。时钟IP核locked引脚代表意义:时钟IP核输出的时钟是否稳定有效,低时不稳定,高时表明时钟IP核输出时钟稳定
③:FFT IP核的输出模式,依据自己需要进行选择,默认为倒序输出,一般选择为自然输出。

二、个人配置示例

还有什么对FFT IP核不懂的均可直接查看官方数据手册,毕竟官方的东西就是牛逼!!
网上找不到可以进入赛灵思官网,搜索pg109。那里有你最需要的东西!!

以我调用的FFT IP核配置供大家参考,我定义的FFT IP核时钟为10MHZ,数据通道个数为1,变换点数N=8,输入数据为16位定点可截断数据,并使用了复位引脚(ARESETn),输出模式为自然输出模式(Natural Output),以下是配置截图。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、个人对IP核的使用,以及引脚含义的理解

  • 首先从FFT IP核引脚分布来分析,大约可分为五大块
    ①:寄存器配置部分(S_AXIS_CONFIG):它包含三个引脚,分别为TDATA,TREADY,TVALID。配置信息包含在tdata里面,tdata的位宽以及位定义在你配置好IP核后就已经确定,查看IP核信息部分中的IP Symbol栏即可按照正确配置方式在代码中进行寄存器配置。tready,tvaild两兄弟的作用可参考上面链接中详细阐述。

在这里插入图片描述
②:输入数据部分(S_AXIS_DATA):四个引脚TDATA,TREADY,TVALID,TLAST。首先说的是S_AXIS_DATA_TDATA的位宽是你配置FFT IP核时输入数据位宽的两倍,同样位定义可以在IP Symbol查看,为什么是两倍?因为FFT IP核既可以做顺序运算也可做逆运算→也就是IFFT,意思就是给你准备了虚数部分的位定义。S_AXIS_DATA_TDATA低位为实数部分,高位为虚数部分。在哪里配置?在S_AXIS_CONFIG_TDATA里面配置。TREADY,TVALID两兄弟不说了,TLAST是起到一个输入数据末端指示作用,比如你作8点FFT运算,你要给8个数据给IP核吧,在最后一个数据期间你把TLAST拉高就行了,意思是告诉IP核,这一组的8个数据都给你带过来了,这是最后一个。IP核一验算,整整齐齐8个,就不会找你麻烦了。
③:输出数据部分(M_AXIS_DATA):输出和输入差不多,使用时将M_AXIS_DATA_TREADY一直拉高即可。
④:时钟和复位(aclk/aresetn):时钟和复位正常使用,注意事项上面(一、2、②)已经阐述,遇到问题可参考。
⑤:事件报告部分总共七个引脚,具体含义可直接查看手册,一般高有效,主要报告芯片工作状态以及出错情况。

在这里插入图片描述

  • FFT IP核使用说明及注意事项
    ①:**关于复位引脚的使用,建议大家都用上,保证电路稳点可靠。**如上面(一、2、②)所说,复位引脚可使用时钟IP核输出引脚locked作为复位信号,locked为低时,可以使FFT IP核复位;为高时,时钟输出稳定,并且FFT IP核也正常运行。至于赋FFT IP核输入信号的初值,也可以在locked为低时赋值,这样保证输入信号也达到一个初始化的稳定状态。
    ②:FFT IP核输入数据赋值:当IP核的S_AXIS_DATA_TREADY引脚拉高时,表示核本身已经准备好接收数据,这时,你把S_AXIS_DATA_TDATA拉高N个时钟周期来传N个数据,并同时在每个时钟里都塞入数据,到达数据输入终点时的最后一个数据传输时钟里将S_AXIS_DATA_TDATA拉高一个时钟周期,即完成数据输入。
    ③:始终均可拉高的引脚:S_AXIS_CONFIG_TVALID,S_AXIS_DATA_TREADY。别问,问就是不知道。

四、收获仿真

  • 我的是8个点的FFT IP核,输入数据简单点,就弄了序列X=[1,2,3,4,5,6,7,8];
    matlab的fft数据如下:

在这里插入图片描述

  • 我的仿真结果如下:
    输入为8点数据,分别为1-8,使用的是ROM IP核输出的,有关ROM IP核的使用请自行学习,也很简单哦!
    输出自然也为8点,我的FFT IP核输出的是32位数据,低16位为实部,高16位为实部,程序中我已分开输出。
    整体波形
    重点:FFT输入数据波形
    重点:FFT输入、输出数据波形
    ![重点:real_out:输出数据实部、imag_out:输出数据虚部

五、总结

  • 关于实现代码:希望大家都能从理论上论证学习再到实操实践,自己动手远比拿着别人的结果看一看会收获得多。这里附上vivado VHDL语言的工程文件,有需要的可以下载!
    VIVADO VHDL 8点FFT的简单实现project文件
  • 此文章介绍的FFT IP核内容有限,还不够详细!帮助自己总结,也希望能稍微帮到你们一点,网上论坛和博客中均含有使用FFT IP核的类似文章,我也是一边看网上实操加上看官网提供的IP核数据手册-pg109(这玩意是最准确有效的法宝)才慢慢摸索出来的,不是很难,但也绝非容易。
  • 再强调一下,迷茫的时候大家根据需求多看数据手册,看懂了就没太大问题了。
  • 怕大家没看到,这两篇链接再放出来一下,很好的文章。
    vivado 的IFFT/FFT IP核的配置及调用
    Vivado中FFT9.1 IP核的使用(1)
  • 最后,欢迎大家指正讨论!哔哔完*&……¥撒花✿✿ヽ(°▽°)ノ✿!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/669405
推荐阅读
相关标签
  

闽ICP备14008679号