在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3432|回复: 8

[原创] 基于FPGA的FFT和IFFT IP核应用实例

[复制链接]
发表于 2019-8-10 14:37:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
基于FPGAFFTIFFT IP核应用实例
AT7_Xilinx开发板(USB3.0+LVDS)资料共享
       腾讯链接:https://share.weiyun.com/5GQyKKc
       百度网盘链接:https://pan.baidu.com/s/1M7PLzRs-yMJv7NFJE8GVAw
       提取码:qr0t
1.jpg
                              
1 关于傅里叶变换
         关于傅里叶变换,这么一个神奇的变换,其基本原理和应用在教科书、网络上漫天飞舞,这里就不赘述了,以免有凑字数的嫌疑。下面我们就Matlab和FPGA两个工具双管齐下,比对Vivado的FFT IP核生成的数据。
2 Matlab产生测试数据,绘制cos时域和频域波形
         使用at7_img_ex05\matlab文件夹下的Matlab源码fft_1line.m,运行产生1组cos波形的1000个采样点数据,存储为time_domain_cos.txt文件,该文件中每个数据位宽16bit,定点signed(1.15),即最高位符号位,15位小数。同时,绘制出matlab中cos时域和频域的波形如下。 2.jpg
3 Vivado中添加配置FFT IP
         Vivado中,打开IP Catalog,搜索FFT或者找到分类Core à Digital Signal Processing àTransform à FFTs,即可找到免费的IP核Fast Fourier Transform。双击这个IP。 3.jpg
         第一个Configuration页面如图,可以设定IP通道数(Number ofChannels)、FFT转换长度(Transform Length)、目标时钟频率(Target Clock Frequency)和FFT实现架构(Architecture Choice)等。 4.jpg
         如图所示,第二个Implementation页面,可以配置数据格式(DataFormat)、缩放模式(Scaling Options)、数据末尾处理方式(Rounding Modes)、输入数据和相位的位宽(Input Data Width)和数据输出顺序(Output Ordering)等。 5.jpg
         第三个Detailed Implement页面中,可以对FPGA存储器或乘法器相关的资源进行选择配置。 6.jpg
         在配置页面左侧,可以查看IP接口(IP Symbol)、实现信号位宽细节(ImplementationDetails)和输出时延(Latency)等信息。 7.jpg
4 使用FPGAIP进行FFT运算
         使用Vivado 16.2打开at7_img_ex05下的工程,在Sources面板中,展开SimulationSources à sim_1,确认at7_fft_sim文件为top module(粗体显示文件名),若不是top module,可以右键单击该文件,点击Set as Top菜单项。如图,若Set as Top菜单项为灰暗不可点击状态,表示当前该模块已经是top module。at7_fft_sim文件中用测试脚本的形式,将matlab生成的1000个点cos数据time_domain_cos.txt文本导入,送给FFT IP核进行运算,输出FFT结果的实部和虚部分别存储在fft_result_real.txt和fft_result_image.txt文本中(仿真测试结果位于at7_img_ex05\at7.sim\sim_1\behav文件夹下)。
         在Flow Navigator面板中,展开Simulation,点击RunSimulation,弹出菜单中点击Run Behavioral Simulation进行仿真。
         弹出仿真界面后,如图所示点击Run All图标运行仿真。 8.jpg
         仿真运行完毕,可以看到FFT的输入数据波形和结果输出波形如图所示。 9.jpg
         可以打开at7_img_ex05\at7.sim\sim_1\behav文件夹下fft_result_real.txt和fft_result_image.txt文本,分别存储FFT结果的实部和虚部。这里需要注意定点的小数位问题。在IP核页面左侧,点击Implementation Details可以看到定点的小数位标定。所有1024个输入点的位宽定义是一样的,所以如图所示,只需要查看第0点的定点标定信息。 10.jpg
         详细的FFT IP核配置说明,可以参考Xilinx官方文档pg109-xfft.pdf。
         对于仿真产生的fft_result_real.txt和fft_result_image.txt文本,可以使用Matlab脚本draw_wave_from_txt.m(at7_img_ex05\matlab文件夹下)进行加载并绘制波形。FPGA实现的FFT运算结果,绘制波形如下。可以比对Matlab的波形,几乎是一致的。当然了,因为FPGA输入数据的精度有限(从浮点到定点的精度损失),不可能完全一致。 11.jpg
5 使用FPGAIP进行IFFT运算
         在Sources面板中,展开SimulationSources à sim_1,将at7_ifft_sim.v文件设置为top module。at7_ifft_sim文件中用测试脚本的形式,在at7_fft_sim.v测试脚本产生的FFT结果的基础上,继续将此结果进入IFFT IP核进行IFFT运算,最终上传IFFT的结果。输出IFFT结果的实部存储在ifft_result.txt文本中(仿真测试结果位于at7_img_ex05\zstar.sim\sim_1\behav文件夹下)。可以比对这个文本和time_domain_cos.txt文本的数据,几乎是一致的。 12.jpg
         xfft_0输出的FFT结果是定点signed(12.15),要获得最终的FFT结果,需要将IP核输出的结果再除以FFT数据个数(即1024),所以我们可以认为实际的FFT结果是定点signed(2.25)。 13.jpg
而进入xfft_1做IFFT的输入接口是定点signed(1.26),二者并不匹配,则我们认为输入数据做了1位的右移,在IFFT输出结果时要对应的左移1位。IFFT的输出是signed(12.26),那么左移1位后,就是signed(13.25)。
AT7_Xilinx开发板(USB3.0+LVDS)资料共享
       腾讯链接:https://share.weiyun.com/5GQyKKc
       百度网盘链接:https://pan.baidu.com/s/1M7PLzRs-yMJv7NFJE8GVAw
       提取码:qr0t

发表于 2019-12-13 09:31:26 | 显示全部楼层
   
发表于 2019-12-31 11:55:57 | 显示全部楼层
学习一下
发表于 2021-4-15 11:32:01 | 显示全部楼层
链接能再发一下吗
发表于 2021-5-17 18:01:02 | 显示全部楼层
Thanks
头像被屏蔽
发表于 2021-5-28 08:14:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2021-12-29 12:32:03 | 显示全部楼层
very good
发表于 2023-4-20 21:10:25 | 显示全部楼层
已经不能共享了。
发表于 2023-8-29 11:10:02 | 显示全部楼层
可以再分享一下吗  链接失效了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-28 03:48 , Processed in 0.032109 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表