本文是采用输入8位数据,输出8位数据的16点fft实现,旋转因子采用8位rom存储,分为cos和sin2个rom存储;输入数据以及每一级的输出数据采用8位的ram进行存储,分为实部和虚部进行存储。采用顺序输入,那么输出则为倒序。
生成rom,可先在matlab中,计算出cos和sin的值,然后写入coe文件,再由ip核生成,具体过程自行百度,懒得百度的话,可以发我的邮箱来获得具体的程序。因为本文采用的16点的fft,点数比较少,所以自己动动手就可以写一个rom了,就可以不用上面的步骤。
生成ram,使用ip核生成与生成rom的过程类似,也是要先获取coe文件,来初始化ram。当然,本文点数比较少,又偷懒了,自己写了一个小ram,初始化ram的值即为输入数据的值。读写分离,即只能读或者只能写。
乘法器单元,采用8x8的带符号的四个乘法器,分别计算real*cos,real*sin,imag*cos,imag*sin。当然这个用ip核生成,自己写的话,是比较麻烦的。
接下来就是控制单元,使用状态机来实现,分为11个状态(s0-s10),其中s0-s9来完成一次蝶形单元的计算,s10为停止状态。当然就可以计算出总共的时间为T*10*8*4(T为时钟周