1K点FFT的硬件加速器实现
10字加油短句Version 0.6
修改历史
1K点FFT的硬件加速器实现了1K点的快速FFT计算,采用单级结构,使用1个基4蝶形计算单元就能实现基4或基2的FFT计算。
1硬件结构:
图1 FFT硬件加速器结构
1. LD_RAM新义安五虎十杰
载入1k点的计算数据。当正在计算1k点数据时,载入下一个需要计算的1k点数据。
2. RAM1
载入1K点计算数据,输入到基4计算单元。分为4个bank,分别保存0-255,256-511,512-755,756-1023的数据。
3. RAM2
保存基4计算单元蝶形计算的结果。也分为和RAM1一样的4个bank。
在FFT计算的偶数级时,RAM2会输入数据给基4计算单元,而RAM1保存计算后的数据。
当载入数据,计算,或保存数据时,LD_RAM,RAM1,RAM2的功能可以互换。
4. RAM3
载入旋转因子,并和数据一起进入基4计算单元进行计算。分为4个bank,分别储存Wb,Wc,Wd,即一次基4蝶形计算的3个旋转因子储存在3个bank里,使得可以同时输出给基4计算单元。或者保存中间计算的旋转因子,计算混合基计算或者二维计算时的中间结果。
这4个ram,都是1k×64bits=8KB容量。数据在RAM中的存储方式是每行256bits,即每行存储4点数据。
5. 地址计算单元
输入数据地址计算和输出数据地址计算单元得到相应的数据地址。
对于基4 DIT-FFT计算,每次输入的数据是反序的,输出的数据是顺序的。许维恩离婚
其中反序的计算是:把1024顺序分为5位的4进制数,每一位由一个计数器实现,反序即使根据顺序,这5个计数器的反序组合决定输入地址。相信的反义词
地址的计算参数为:计算级数L,每级的蝶形计算距离Dis,当前计算蝶形所在的组为第N组,一共M组,当前蝶形所在组的位置是第S个蝶形。其中Dis=4^(L-1)。
旋转因子的计算也是根据当前蝶形的位置,载入旋转因子。
地址的计算:
第一级:
数据在RAM1中存储方式:0-255,256-511,512-767,768-1023分别储存在4个bank 中。第一级基4FFT的采样间隔为1,所以计算的4点应该为0-1-2-3,4-5-6-7,8-9-10-11…..。则但是根据DIT-FFT的原理,应该为反序输入,正序的计数器顺序为I5-I4-I3-I2-I1,则反序的计数器顺序为I1-I2-I3-I4-I5,这里I1的计数相当于bank的ID, 其他计数器的计数顺序不变,I2累加-> I3累加-> I4累加-> I5累加。
0-1-2-3这4个数的反序地址正好分别在4个bank中。每次计算点数的bank偏移地址为I2*64+I3*16+I4*4+I5。计算的4个数按照原位计算的地址保存,即按照正序的计数器顺序保存。
这里计算的时候要考虑到ram内存储的格式为0,1,2,3即相邻的四个点组成了一个256bits的数据。
因为第二级的采样间隔为4,则数据计算完毕的原位保存顺序为0-1-2-3作为一个256bits 到bank1,4-5-6-7到bank2,8-9-10-11到bank3,12-13-14-15到bank4,依次类推。这样下一级也可以每次从4个bank中取得4个计算点。
第一级的旋转因子数目为3个,即每个基4计算的旋转因子相同。
第二级:
数据的输入顺序为0-4-8-12,不用反序。当计算4次,即计算完0-15后,偏移地址加1,计算下一个16点数据。
伊能静和庾澄庆
数据计算后的输出顺序为0-4-8-12作为一个256bits存入bank1,16-20-24-28存入bank2.
第二级的旋转因子数目为12个。
第三级:
数据的输入顺序为0-16-32-48,不用反序。当计算1次,偏移地址加1,计算下一个4点数据1-17-33-49。当计算4次后,偏移地址-4,回到最早的地址。当计算16次,即0-63点计算完成后。偏移地址加1.
数据计算后的输出顺序为0-16-32-48作为一个256bits存入bank1,16-20-24-28存入bank2.
第三级的旋转因子数目为48个。
其他各级地址关系见图2。这里最后一级的计算输入是0-256-512-768,保存的时候也分别保存到4个bank中,即原来的地址,以保持数据的顺序。最后输出的顺序即是0-1023,顺序输出。
每次从4个bank里各输出1个数据,
数据偏移量为
I2*64+I3*16+I4*4+I5反序
正序
[9:8]
[1:0]
[3:2]
[5:4]
[7:6]
[9:8][1:0]
[3:2]
[5:4]
将才帅才
[7:6]
RAM1
RAM2
经过基4FFT计
算,保存为原采
样顺序(原址计
算),0-1-2-3
保存到bank1,
4-5-6-7到
bank2……
图1 第一级计算的地址关系