fft ipcore matlab,【FPGA代码学习】之FFT(2) - IPcore

本文介绍了如何通过Quartus的IPcore功能来生成并配置FFT模块,详细步骤包括选择参数、生成仿真文件以及使用Matlab和Modelsim进行仿真。在Matlab中,通过读取输入文件、调用FFT模型并写入输出文件进行仿真,而在Modelsim中则展示了编译和运行FFT模块的过程,最后比较了两种仿真的结果,证实了其一致性。
摘要由CSDN通过智能技术生成

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

[复制链接]

2a0fb537e2975b3e6b702942b53e1d04.gif

本帖最后由 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

a26d678767e8b431ecd7a25f1936bdc5.gif

fft1.png (18.13 KB, 下载次数: 1)

2015-9-1 18:47 上传

3)双击FFT v14.0,输入文件名,取名fft256.v,注意一下路径!

a26d678767e8b431ecd7a25f1936bdc5.gif

fft9.png (12.73 KB, 下载次数: 2)

2015-9-1 18:48 上传

接着就出现FFT  IPcore配置页面

a26d678767e8b431ecd7a25f1936bdc5.gif

fft2.png (24.62 KB, 下载次数: 1)

2015-9-1 18:48 上传

思路还是很清晰:

Step1:设置相关参数

Step2:生成仿真所需要的文件

Step3:生成所需要的文件

接下来我们一一说明

Step1:参数设置如下

做个256点的FFT,数据输入长度16bit,旋转因子长度16bit,输出数据精度是29bit实际输出是16bit

a26d678767e8b431ecd7a25f1936bdc5.gif

fft3.png (28.04 KB, 下载次数: 2)

2015-9-1 18:49 上传

IO Data Flow默认是Streaming模式,其它模式的功能详解可以参考

a26d678767e8b431ecd7a25f1936bdc5.gif

fft4.png (28.77 KB, 下载次数: 2)

2015-9-1 18:50 上传

勾上了时钟使能功能,同时可以根据自己FPGA芯片资源你的使用情况,来选择是否使用内部RAM资源。

a26d678767e8b431ecd7a25f1936bdc5.gif

fft5.png (37.58 KB, 下载次数: 2)

2015-9-1 18:50 上传

Step2:生成仿真文件

勾上Generate Simulation Model

a26d678767e8b431ecd7a25f1936bdc5.gif

fft6.png (28.46 KB, 下载次数: 1)

2015-9-1 18:52 上传

Step3:生成全部文件

点击Generate

a26d678767e8b431ecd7a25f1936bdc5.gif

fft7.png (38.41 KB, 下载次数: 3)

2015-9-1 18:53 上传

生成所有的文件如下所示:

a26d678767e8b431ecd7a25f1936bdc5.gif

fft8.png (58.84 KB, 下载次数: 1)

2015-9-1 18:53 上传

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';

xreal和ximage需要转置一下,然后组成复数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是中间变量的输出窗口和调试窗口

a26d678767e8b431ecd7a25f1936bdc5.gif

matlab.jpg (151.81 KB, 下载次数: 3)

2015-9-1 18:56 上传

到此应该还是不够直观,我加入了原始信号的图形显示和FFT后的图形显示,如下所示:

a26d678767e8b431ecd7a25f1936bdc5.gif

matlab1.jpg (41.74 KB, 下载次数: 1)

2015-9-1 18:57 上传

好像看起来还是不够明显哦,暂时就这样吧,不知道为何altera提供这样的一个测试文件,细节暂时不表,Matlab的仿真暂时到这里,有了输入的文件,有了输出的结果。继续学习一下用Modelsim仿真能够得到什么样的结果,并比较一下和Matalb的仿真结果是否一致。

2)  Modesim仿真

(一)  创建一个Project,取名fft256

名称可以随便取,但是ProjectLocation需要放在FFT的生成目录,要不然很多文件会找不到的

a26d678767e8b431ecd7a25f1936bdc5.gif

modelsim-new.jpg (93.78 KB, 下载次数: 2)

2015-9-1 18:57 上传

(二)  增加相关文件,并全部编译

相关的文件有6个,一个都不能少哦!!

a26d678767e8b431ecd7a25f1936bdc5.gif

modelsim6.png (31.78 KB, 下载次数: 1)

2015-9-1 18:58 上传

如果丢了sgate.v这个文件会出现以下错误

a26d678767e8b431ecd7a25f1936bdc5.gif

modelsim2.png (16.9 KB, 下载次数: 1)

2015-9-1 18:58 上传

(三)  编译完成后加载相关信号

a26d678767e8b431ecd7a25f1936bdc5.gif

modelsim8.png (94.16 KB, 下载次数: 1)

2015-9-1 18:59 上传

(四)  开始运行,多么漂亮的结果

a26d678767e8b431ecd7a25f1936bdc5.gif

modelsim9.png (119.37 KB, 下载次数: 4)

2015-9-1 18:59 上传

到这里就完成了吗?没有我们还有个很重要的事情,就是比较Matlab和Modelsim仿真结果的一致性!!

4、结果比较

先放大一下看看Modelsim的结果吧

a26d678767e8b431ecd7a25f1936bdc5.gif

modelsim10.png (53.74 KB, 下载次数: 2)

2015-9-1 19:01 上传

再来看看Matlab仿真出来两个文件的结果吧

a26d678767e8b431ecd7a25f1936bdc5.gif

modelsim11.png (43.69 KB, 下载次数: 3)

2015-9-1 19:01 上传

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值