仿真altera FFT core

标签:
verilog |
分类: 学习心得 |
题记:还没安排具体事情做,就学学项目中要用的东西,本来要好好了解的,最后还是仅仅只是做了仿真来学习和验证FFT功能。
第一步:生成matlab数据
matlab代码如下所示:
fc=10e6;
nn=1/fc/1024
t=[0:1024]*nn;
x=sin(2*pi*fc*t);
xx=fix(128+(2^7-1)*x);
yy=reshape(xx,1024,1);
bb=num2str(yy);
其中xx就是对正弦波采样的数据,采样点1024,生成的xx波形为:
http://s11/mw690/0033TwPDgy6WvEyv5Y68a&690FFT
为了方便存储,将数据转成字符数据,将bb就是我们需要的数据。
第二步:生成工程
按照生成工程的方式生成一个新的工程,假设顶层文件名设置为FFT_top,那么在生成IP的时候为了方便,将IP的名称修改为FFT_top,这样的好处是,在编译工程时候,不需要重新新建一个顶层文件。
FFT的第一步不需要修改任何东西,第二步,选上Generate
http://s2/mw690/0033TwPDgy6WvECXaVP71&690FFT
下面就是直接仿真IP核,具体做法和前面博客中仿真PCI
IP核一致。此时仿真出来的结果如下图所示:
http://s10/mw690/0033TwPDgy6WvFyPnC1b9&690FFT
可以看出显示的是乱码,无法确认是否FFT正确。
第三步:修改输入
在这里我们为了查看FFT功能正确与否,将输入修改为正弦波信号,理论上正弦波的频率就是一个脉冲信号,因为只有一个频率。
1、
在前面matlab中,我们生成的bb就是一个正弦波信号,此时长度为1024.那么将数据存入到txt文件中,去掉bb
此时有可能会有空格,如果要去掉空格,可以在notpad中双击空格,然后ctrl+F,
点击Replace,在Replace
http://s16/mw690/0033TwPDgy6WvERwaTRbf&690FFT
2.修改FFT_top_real_input.txt和FFT_top_imag_input.txt
可以看到这两个文件的长度为4096,将步骤1生成的txt文件,分别重复粘贴四次到这两个文件中,然后重新运行tcl文件
http://s9/mw690/0033TwPDgy6WvEWIwv608&690FFT
重新编译,运行仿真查看结果:
http://s14/mw690/0033TwPDgy6WvF0Sq8B6d&690FFT
可以看到四次对正弦波信号进行了FFT,这是由于FFT点数是1024,而我们数据的长度为4096,可以看到正弦波的频率为一个脉冲波形,仿真结果和理论一致,表示功能正确。
最后贴一张采集到的IQ数据FFT仿真结果:
http://s2/mw690/0033TwPDgy6WvFDKU1Pf1&690FFT