找回密码
 注册
关于网站域名变更的通知
查看: 340|回复: 1
打印 上一主题 下一主题

转—— 【FPGA代码学习】之FFT(2) - IPcore 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-10 16:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
转—— 【FPGA代码学习】之FFT(2) - IPcore

6 D7 L! ~2 b4 b: o, i
( F0 ~4 p( Q  v& Q+ w) ?# H( c
   上一篇简要的回顾了一下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注意一下路径!
! B  \( H4 j5 y; O/ ^" M" O
接着就出现FFT  IPcore配置页面
思路还是很清晰:
Step1:设置相关参数
Step2:生成仿真所需要的文件
Step3:生成所需要的文件
1 z: T2 b8 u. U- C
接下来我们一一说明
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仿真结果的一致性!!

: Y% y4 q- e( S( o( E" h/ }2 ?$ T  W
4、结果比较
先放大一下看看Modelsim的结果吧
再来看看Matlab仿真出来两个文件的结果吧
/ m) r+ W2 ~, f8 {6 K
睁大眼睛仔细的看看,是否有惊人的发现,两个结果完全一致!当然如果不一致,那一定是你操作错了,哈哈

! C- a. U; `7 M7 A% `6 }5 ]: X

该用户从未签到

2#
发表于 2019-4-10 17:42 | 只看该作者
看看楼主怎么说的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-29 19:47 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表