关于FFT IP CORE的记忆(altera fft ip core配置)

5 篇文章 0 订阅

现成的东西已经很高端了,自己编的怎么也不好,就像别人家的孩子一样。IP CORE有最优化的代码,效率和资源的兼顾,所以君子性非异也,善假于物也。

之前实验了很久结果老是不对,费尽了各种周折,最终知道自己的测试方法不对。ip core是根所实际信号优化过的,所以要加以实际信号,如正弦波,而我的思路还停留在教书。展开来说,ip core对于小信号不敏感,比如对于N点fft,输入N个1和输入N个2,结果都是一样的。因为对于位宽较宽的数据,如10位,1或2只是1/2^10,所以结果不会有差异。现实中信号的差异是较明显的,而ip core针对这种情况,进行了优化,实现高速运算。

看具体的顶层配置。

首先在MegaWizard设置好一个fft core,通过matlab产生一个时域信号,导入.mif文件,用rom装载,再由rom送给ip core。验证该时域信号通过matlab和ip core的结果差异。

top level如图:

cnt1024给rom地址,fft_ctrl控制sink_sop和sink_eop,rom里存着待测信号。

需要注意的是resetr_n要有从0到1的配置,而不能一开始就赋1,会计算错误。其他如,sink_sop要与输入帧头对齐(输入数据块的第一个数据),sink_eop要与帧尾对齐。另外source_exp表示对结果的定标,为负值。如source_exp=-4,则结果为source_reak*2^4。仿真结果如下图

 

可以看到在计算到第二帧的时候,结果开始输出。而256点时,输出开始在第三帧附近,说明点数不同会影响其加速过程。

最后与matlab的fft计算结果进行对比,如下图:

可以看出,在大信号的时候有较准确的贴近,在小信号的时候,失真较大。这也是由于ipcore有限位宽导致的。

--------------------------------------我是奇葩的分割线-----------------------------------------------------------

 

心得:

1.       quartus的波形仿真结果输出到matlab

a)         在仿真报告上选fileàsave current report section as,存为.tbl格式的文件

b)         excel将该报告打开,筛选所需要的数据。由于clk时钟上下变化,使得每一个数据会重复出现。只需要提取奇数或偶数行的数据即可。提取方法见2.

2.       Excel的提取奇数、偶数行:在新的一列如E输入=mod(row(),2),然后下拉,则该列会出现奇数为1,偶数为0选中该列,使用“筛选”,如筛选1

 

 

奇葩的方法是因为没入门,临时就这样吧。

--------------------------------------------------我是新的分割线--------------------------------------------

接下来需要掌握的:

1.Modelsim的仿真,testbench的编写。现在问题是Modelsim的库怎么也添不上,只是按照网上的教程配置,只知其然不知其所以然,所以应该搞清其文件系统。对quartus也是同样的道理,生成了哪些文件,运行的时候是哪些文件关联。

2.verilog的入门。现在只好最简单的积木,然后从建模到时序,verilog有非常庞大和自由的体系,要反复训练才能得其要领。希望我会喜欢上搭积木的感觉。

 

最后要谢谢小明,要不是你,我可能一辈子陷入为什么输入1和2结果却都一样的困惑中。实际和理论有很大的差距,多多接触,适应这个实际。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值