12967|27

5979

帖子

8

TA的资源

版主

楼主
 

【FPGA代码学习】之FFT(2) - IPcore [复制链接]

 
本帖最后由 chenzhufly 于 2015-9-3 16:52 编辑


   上一篇简要的回顾了一下FFT的基本原理,有人已经等不及了,抱怨说原理就不用多说了吧,期待的是如何实现FFT功能。其实我觉得有3个方面都是很重要的:算法的原理,算法的分析,算法的实现,这些暂时就不展开说了。接下来我将进一步的学习使用Quartus自带的IPcore来实现FFT功能的,同时学习一下如何进行仿真,如何相互印证结果的准确性等。
1、相关工具
     quanrtus 14.0
     Modelsim 10.1e
     Maltab R2015
2、使用IPcore,生成FFT模块
      1)打开Quartus,创建一个工程
      2)在Quartus软件的右边有个IPcatalog,找到FFT v14.0
       3)双击FFT v14.0,输入文件名,取名fft256.v注意一下路径!

接着就出现FFT  IPcore配置页面
思路还是很清晰:
Step1:设置相关参数
Step2:生成仿真所需要的文件
Step3:生成所需要的文件

接下来我们一一说明
Step1参数设置如下
做个256点的FFT,数据输入长度16bit,旋转因子长度16bit,输出数据精度是29bit实际输出是16bit
IO Data Flow默认是Streaming模式,其它模式的功能详解可以参考
勾上了时钟使能功能,同时可以根据自己FPGA芯片资源你的使用情况,来选择是否使用内部RAM资源。
Step2生成仿真文件
勾上Generate Simulation Model
Step3生成全部文件
点击Generate
生成所有的文件如下所示:
3、仿真、仿真,还是仿真
上述配置完成以后,我相信很多人还是有很多的疑问,参数如何选择?不同的输出模式在什么场合应用?等等
1)  Matlab仿真
涉及文件有两个fft256tb.m,fft256model.m;
其中fft256tb.m调用了fft256model函数,fft256model调用了Sfftmodel,Sfftmodel函数是Quartus自带一个库文件,没有找到相关的说明
我们来分析一下fft256tb.m文件
  
N=256;这个是需要进行FFT的点数
  
% Read  input complex vector from source text files
  
fidr = fopen('fft256_real_input.txt','r');                                            
  
fidi = fopen('fft256_imag_input.txt','r');                                          
  
xreali=fscanf(fidr,'%d');                                                     
  
ximagi=fscanf(fidi,'%d');                                                     
  
fclose(fidi);                                                                  
  
fclose(fidr);     
  
以上是打开两个文件,并从两个文件中把实部和虚部的数据读入;                                                            
  
% Create  input complex row vector from source text files
  
x = xreali' +  j*ximagi';   
  
xrealximage需要转置一下,然后组成复数x                                                      
  
[y, exp_out] =  fft256_model(x,N,0);
  
调用fft256_model函数,完成FFT操作
  
fidro = fopen('fft256_real_output_c_model.txt','w');                                 
  
fidio = fopen('fft256_imag_output_c_model.txt','w');                                 
  
fideo = fopen('fft256_exponent_out_c_model.txt','w');                                 
  
fprintf(fidro,'%d\n',real(y));                                                
  
fprintf(fidio,'%d\n',imag(y));                                                
  
fprintf(fideo,'%d\n',exp_out);                                                
  
fclose(fidro);                                                                 
  
fclose(fidio);                                                               
  
fclose(fideo);  
  
把转换后的结果写入文件,可以用作后面的数据比较
  
  
用Matlab仿真的具体顺序,入下图所示:
1) 打开Matlab,
2) 双击fft256tb.m,在代码串口可以产看文件源码,可见图中1、2
3) 点击RUN,运行fft256tb.m,可以看到在文件目录下生成了3个文件:
     fft256_real_output_c_model.txt,
     fft256_imag_output_c_model.txt,
     fft256_exponent_out_c_model.txt
  可见图3、6
4) 图4和图5是中间变量的输出窗口和调试窗口
到此应该还是不够直观,我加入了原始信号的图形显示和FFT后的图形显示,如下所示:
好像看起来还是不够明显哦,暂时就这样吧,不知道为何altera提供这样的一个测试文件,细节暂时不表,Matlab的仿真暂时到这里,有了输入的文件,有了输出的结果。继续学习一下用Modelsim仿真能够得到什么样的结果,并比较一下和Matalb的仿真结果是否一致。
2)  Modesim仿真
(一)  创建一个Project,取名fft256
名称可以随便取,但是ProjectLocation需要放在FFT的生成目录,要不然很多文件会找不到的
(二)  增加相关文件,并全部编译
相关的文件有6个,一个都不能少哦!!
如果丢了sgate.v这个文件会出现以下错误
(三)  编译完成后加载相关信号
(四)  开始运行,多么漂亮的结果
到这里就完成了吗?没有我们还有个很重要的事情,就是比较Matlab和Modelsim仿真结果的一致性!!

4、结果比较
先放大一下看看Modelsim的结果吧
再来看看Matlab仿真出来两个文件的结果吧

睁大眼睛仔细的看看,是否有惊人的发现,两个结果完全一致!当然如果不一致,那一定是你操作错了,哈哈

此帖出自FPGA/CPLD论坛

最新回复

楼主可不可以吧工程给我啊, 再叫一下我如何做1024点的FFT , 必有重谢,非常感谢  详情 回复 发表于 2018-4-4 14:29

赞赏

1

查看全部赞赏

点赞 关注(1)
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 

回复
举报

27

帖子

3

TA的资源

一粒金砂(中级)

推荐
 
想问一下     你加入了原始信号的图形显示和FFT后的图形显示   想知道你的MATLAB程序是怎么编写的
此帖出自FPGA/CPLD论坛
 
 

回复

542

帖子

71

TA的资源

纯净的硅(中级)

沙发
 
虽然不懂,但前排占座
此帖出自FPGA/CPLD论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

挤挤。。  详情 回复 发表于 2015-9-1 19:19
 
 
 

回复

1万

帖子

2853

TA的资源

管理员

板凳
 
占座~~
此帖出自FPGA/CPLD论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复

1万

帖子

2853

TA的资源

管理员

4
 
好东西收藏了~
此帖出自FPGA/CPLD论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复

6423

帖子

17

TA的资源

版主

5
 
学习了
此帖出自FPGA/CPLD论坛
个人签名training
 
 
 

回复

2700

帖子

0

TA的资源

五彩晶圆(初级)

6
 
前排水军帮顶!
此帖出自FPGA/CPLD论坛
个人签名作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
 
 
 

回复

1891

帖子

2

TA的资源

纯净的硅(中级)

7
 
phantom7 发表于 2015-9-1 17:09
虽然不懂,但前排占座

挤挤。。
此帖出自FPGA/CPLD论坛

点评

挤挤。  详情 回复 发表于 2015-9-1 23:27
个人签名
分享铸就美好未来。。。




 
 
 

回复

165

帖子

0

TA的资源

一粒金砂(中级)

8
 
大神,我来顶你了
此帖出自FPGA/CPLD论坛
个人签名什么都不会,只会水经验,请见谅。如果有什么得罪的地方,请找我们队长..................ID:lcofjp
 
 
 

回复

165

帖子

0

TA的资源

一粒金砂(中级)

9
 

挤挤。
此帖出自FPGA/CPLD论坛
个人签名什么都不会,只会水经验,请见谅。如果有什么得罪的地方,请找我们队长..................ID:lcofjp
 
 
 

回复

5979

帖子

8

TA的资源

版主

10
 
恩 恩 恩 继续 继续
此帖出自FPGA/CPLD论坛
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

11
 
请问Sfftmodel函数在哪里,如何定义的?谢谢  最近一直纠结这个问题
此帖出自FPGA/CPLD论坛
 
 
 

回复

5979

帖子

8

TA的资源

版主

12
 
在这个目录下面ip/altera/fft/lib/
此帖出自FPGA/CPLD论坛
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

13
 
chenzhufly 发表于 2015-9-7 09:57
在这个目录下面ip/altera/fft/lib/

您好,在目录ip/altera/fft/lib下面,只有Sfftmodel.dll和Sfftmodel.mexw32文件,没有Sfftmodel.m文件,如何调用?谢谢
此帖出自FPGA/CPLD论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

14
 
chenzhufly 发表于 2015-9-7 09:57
在这个目录下面ip/altera/fft/lib/

我的QQ:1210318515,方便留一下联系方式么?谢谢
此帖出自FPGA/CPLD论坛
 
 
 

回复

5979

帖子

8

TA的资源

版主

15
 
他是库文件 不是源文件  源文件没有给出
此帖出自FPGA/CPLD论坛
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

16
 
库文件如何调用?我在运行时提示Sfftmodel未定义,如下图所示

134240tfi6fzqfpmiciico.png (18.25 KB, 下载次数: 0)

134240tfi6fzqfpmiciico.png
此帖出自FPGA/CPLD论坛
 
 
 

回复

5979

帖子

8

TA的资源

版主

17
 
看看别人是怎么调用的
  1. function [y, exp_out] = fft256_model(x,N,INVERSE)
  2. addpath(strcat(getenv('QUARTUS_ROOTDIR'),'/../ip/altera/fft/lib/'));
  3. % Parameterization Space   
  4. THROUGHPUT=4;
  5. ARCH=0;
  6. DATA_PREC=16;
  7. TWIDDLE_PREC=16;
  8. input_vector_length = length(x);                                                              
  9. number_of_blocks = ceil(input_vector_length/N);                                               
  10. % Zero-stuff last block if necessary                                                         
  11. x = [x, zeros(1,number_of_blocks * N - input_vector_length)];                                 
  12. y=[];                                                                                         
  13. exp_out=[];                                                                                   
  14. for i=1:number_of_blocks                                                                     
  15.     rin = real(x((i-1)*N + 1: i*N));                                                         
  16.     iin = imag(x((i-1)*N + 1: i*N));                                                         
  17.     [roc,ioc,eoc] = Sfftmodel(rin,iin,N,THROUGHPUT,ARCH,DATA_PREC,TWIDDLE_PREC,INVERSE);      
  18.     y = [y, roc+j*ioc];                                                                       
  19.     exp_out = [exp_out, eoc];                                                                 
  20. end                    
复制代码


此帖出自FPGA/CPLD论坛
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复

5979

帖子

8

TA的资源

版主

19
 
上面不是已经贴了吗?
此帖出自FPGA/CPLD论坛
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

20
 
本帖最后由 xizhang 于 2016-1-23 16:22 编辑

非常详细,谢谢!

此帖出自FPGA/CPLD论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表