加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

仿真altera FFT core

(2015-10-26 19:14:35)
标签:

verilog

分类: 学习心得

题记:还没安排具体事情做,就学学项目中要用的东西,本来要好好了解的,最后还是仅仅只是做了仿真来学习和验证FFT功能。

第一步:生成matlab数据

      在altera的FFT核中,自动生成的仿真数据为随机数据,所以需要用matlab生成标准的信号,这样可以可一目了然的查看FFT的功能是否正确。

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 core" TITLE="仿真altera FFT core" />
为了方便存储,将数据转成字符数据,将bb就是我们需要的数据。

第二步:生成工程

按照生成工程的方式生成一个新的工程,假设顶层文件名设置为FFT_top,那么在生成IP的时候为了方便,将IP的名称修改为FFT_top,这样的好处是,在编译工程时候,不需要重新新建一个顶层文件。

FFT的第一步不需要修改任何东西,第二步,选上Generate Simulation Model,并将语言设置为verilog HDL,如下图所示:

http://s2/mw690/0033TwPDgy6WvECXaVP71&690FFT core" TITLE="仿真altera FFT core" />
下面就是直接仿真IP核,具体做法和前面博客中仿真PCI IP核一致。此时仿真出来的结果如下图所示:

http://s10/mw690/0033TwPDgy6WvFyPnC1b9&690FFT core" TITLE="仿真altera FFT core" />
可以看出显示的是乱码,无法确认是否FFT正确。

第三步:修改输入

在这里我们为了查看FFT功能正确与否,将输入修改为正弦波信号,理论上正弦波的频率就是一个脉冲信号,因为只有一个频率。

1、 生成txt文件

在前面matlab中,我们生成的bb就是一个正弦波信号,此时长度为1024.那么将数据存入到txt文件中,去掉bb 

此时有可能会有空格,如果要去掉空格,可以在notpad中双击空格,然后ctrl+F,

点击Replace,在Replace with 中仅仅将鼠标点上,然后点击Replace all

http://s16/mw690/0033TwPDgy6WvERwaTRbf&690FFT core" TITLE="仿真altera FFT core" />
2.修改FFT_top_real_input.txt和FFT_top_imag_input.txt

可以看到这两个文件的长度为4096,将步骤1生成的txt文件,分别重复粘贴四次到这两个文件中,然后重新运行tcl文件

http://s9/mw690/0033TwPDgy6WvEWIwv608&690FFT core" TITLE="仿真altera FFT core" />
重新编译,运行仿真查看结果:

http://s14/mw690/0033TwPDgy6WvF0Sq8B6d&690FFT core" TITLE="仿真altera FFT core" />
可以看到四次对正弦波信号进行了FFT,这是由于FFT点数是1024,而我们数据的长度为4096,可以看到正弦波的频率为一个脉冲波形,仿真结果和理论一致,表示功能正确。
最后贴一张采集到的IQ数据FFT仿真结果:

http://s2/mw690/0033TwPDgy6WvFDKU1Pf1&690FFT core" TITLE="仿真altera FFT core" />


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有