5303|1

56

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

玩转Zynq连载48——[ex67] Vivado FFT和IFFT IP核应用实例 [复制链接]

 

1 关于傅里叶变换

         关于傅里叶变换,这么一个神奇的变换,其基本原理和应用在教科书、网络上漫天飞舞,这里就不赘述了,以免有凑字数的嫌疑。下面我们就MatlabFPGA两个工具双管齐下,比对VivadoFFT IP核生成的数据。

 

2 Matlab产生测试数据,绘制cos时域和频域波形

         使用project\zstar_ex67\matlab文件夹下的Matlab源码fft_1line.m,运行产生1cos波形的1000个采样点数据,存储为time_domain_cos.txt文件,该文件中每个数据位宽16bit,定点signed(1.15),即最高位符号位,15位小数。同时,绘制出matlabcos时域和频域的波形如下。

 

3 Vivado中添加配置FFT IP

         Vivado中,打开IP Catalog,搜索FFT或者找到分类Core à Digital Signal Processing àTransform à FFTs,即可找到免费的IPFast Fourier Transform。双击这个IP

         第一个Configuration页面如图,可以设定IP通道数(Number of Channels)、FFT转换长度(Transform Length)、目标时钟频率(Target Clock Frequency)和FFT实现架构(Architecture Choice)等。

         如图所示,第二个Implementation页面,可以配置数据格式(Data Format)、缩放模式(Scaling Options)、数据末尾处理方式(Rounding Modes)、输入数据和相位的位宽(Input Data Width)和数据输出顺序(Output Ordering)等。

         第三个Detailed Implement页面中,可以对FPGA存储器或乘法器相关的资源进行选择配置。

         在配置页面左侧,可以查看IP接口(IP Symbol)、实现信号位宽细节(Implementation Details)和输出时延(Latency)等信息。

 

4 使用FPGAIP进行FFT运算

         使用Vivado 16.2打开project\zstar_ex67下的工程,在Sources面板中,展开Simulation Sources à sim_1,确认zstar_fft_sim文件为top module(粗体显示文件名),若不是top module,可以右键单击该文件,点击Set as Top菜单项。如图,若Set as Top菜单项为灰暗不可点击状态,表示当前该模块已经是top modulezstar_fft_sim文件中用测试脚本的形式,将matlab生成的1000个点cos数据time_domain_cos.txt文本导入,送给FFT IP核进行运算,输出FFT结果的实部和虚部分别存储在fft_result_real.txtfft_result_image.txt文本中(仿真测试结果位于project\zstar_ex67\zstar.sim\sim_1\behav文件夹下)。

         Flow Navigator面板中,展开Simulation,点击Run Simulation,弹出菜单中点击Run Behavioral Simulation进行仿真。

         弹出仿真界面后,如图所示点击Run All图标运行仿真。

         仿真运行完毕,可以看到FFT的输入数据波形和结果输出波形如图所示。

         可以打开project\zstar_ex67\zstar.sim\sim_1\behav文件夹下fft_result_real.txtfft_result_image.txt文本,分别存储FFT结果的实部和虚部。这里需要注意定点的小数位问题。在IP核页面左侧,点击Implementation Details可以看到定点的小数位标定。所有1024个输入点的位宽定义是一样的,所以如图所示,只需要查看第0点的定点标定信息。

         详细的FFT IP核配置说明,可以参考Xilinx官方文档pg109-xfft.pdf

         对于仿真产生的fft_result_real.txtfft_result_image.txt文本,可以使用Matlab脚本draw_wave_from_txt.mproject\zstar_ex67\matlab文件夹下)进行加载并绘制波形。FPGA实现的FFT运算结果,绘制波形如下。可以比对Matlab的波形,几乎是一致的。当然了,因为FPGA输入数据的精度有限(从浮点到定点的精度损失),不可能完全一致。

 

5 使用FPGAIP进行IFFT运算

         Sources面板中,展开Simulation Sources à sim_1,将zstar_ifft_sim.v文件设置为top modulezstar_ifft_sim文件中用测试脚本的形式,在zstar_fft_sim.v测试脚本产生的FFT结果的基础上,继续将此结果进入IFFT IP核进行IFFT运算,最终上传IFFT的结果。输出IFFT结果的实部存储在ifft_result.txt文本中(仿真测试结果位于project\zstar_ex67\zstar.sim\sim_1\behav文件夹下)。可以比对这个文本和time_domain_cos.txt文本的数据,几乎是一致的。

         xfft_0输出的FFT结果是定点signed(12.15),要获得最终的FFT结果,需要将IP核输出的结果再除以FFT数据个数(即1024),所以我们可以认为实际的FFT结果是定点signed(2.25)

而进入xfft_1IFFT的输入接口是定点signed(1.26),二者并不匹配,则我们认为输入数据做了1位的右移,在IFFT输出结果时要对应的左移1位。IFFT的输出是signed(12.26),那么左移1位后,就是signed(13.25)


此内容由EEWORLD论坛网友ove学习使我快乐原创,如需转载或用于商业用途需征得作者同意并注明出处

此帖出自FPGA/CPLD论坛

最新回复

大佬,你好,我在使用FFT核时遇到了很多问题,无法产生正确的数据,我看了你的FFT核的使用方法,做的很好,而我自己编写的代码时序有问题,在输入数据完了,s_axis_data_tlast这个变量的值有问题,而且在输出时会多一个数出来,不知道是哪里出了问题,可以指导下思路吗   详情 回复 发表于 2020-6-21 15:48
点赞 关注
 

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

大佬,你好,我在使用FFT核时遇到了很多问题,无法产生正确的数据,我看了你的FFT核的使用方法,做的很好,而我自己编写的代码时序有问题,在输入数据完了,s_axis_data_tlast这个变量的值有问题,而且在输出时会多一个数出来,不知道是哪里出了问题,可以指导下思路吗

此帖出自FPGA/CPLD论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表