FFT硬件加速器Word文件下载.docx
- 文档编号:16144390
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:17
- 大小:82.47KB
FFT硬件加速器Word文件下载.docx
《FFT硬件加速器Word文件下载.docx》由会员分享,可在线阅读,更多相关《FFT硬件加速器Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
0.7
2018.04.08
增加2k点计算时间
0.8
2018.04.30
修改2维计算时间,和旋转因子load/store时间
1K点FFT的硬件加速器实现了1K点的快速FFT计算,采用单级结构,使用1个基4蝶形计算单元就能实现基4或基2的FFT计算。
1硬件结构:
图1FFT硬件加速器结构
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.地址计算单元
输入数据地址计算和输出数据地址计算单元得到相应的数据地址。
对于基4DIT-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,顺序输出。
图1第一级计算的地址关系
图2每级计算ram内数据保存顺序
6.基4计算单元
基4计算单元完成一个完整的4点基4蝶形计算,根据地址单元生成的地址顺序,载入数据,进行基4的蝶形计算。
以下是基4计算公式和基4计算单元的结构。
图3基4蝶形计算公式
图4基4计算单元
图3中一共有6个乘加单元和16个实数加,这里一共需要6个四元乘加单元和16个实数加法器,其中6个乘加单元指的就是实现类似公式bw2=(b2wb1+b1Wb2>
的乘加单元。
2FFT详细计算步骤
2.1.1k点数据计算流程:
1)1K点的数据从L2cache到RAM1。
分别存入4个bank。
需要的拍数为:
256+10<
延迟)
2)1024点一共分为5级基4FFT计算。
对于每级计算,先计算每次4点的数据地址和3点的旋转因子地址。
1拍。
载入4点数据:
1拍
3)由RAM1中输入数据A,B,C,D,进行基4的FFT计算
基4的FFT计算先进行3个复数乘,再进行8个复数加
18拍
4)计算完成后,输出到RAM2中保存。
4点的地址1拍
保存4点1拍
下一级的计算由RAM2输出要计算的数据,ram1保存计算完成的数据。
每级要进行256次蝶形计算,这里的计算单元可以流水执行,
每级计算需要的拍数为:
256+22+22拍
因为第一级的旋转因子都是1,则可以在进行第一级计算时载入768点<
192拍)旋转因子。
5)当完成5级计算后,最后的结果保存在RAM2中,直接输出保存L2cache。
保存1k点需要的拍数为:
256+10拍
总:
256+10+<
256+44)×
5+256+10=2032拍。
2.2.基2计算
基2计算的基本公式
这里基4计算单元可以每次计算2个基2计算,即4点计算,如下图所示。
图5基2计算公式
图64点基2计算
每个基2计算需要1个复数乘和2个复数加,因为基4计算单元有3个复数乘单元,那么每次可以计算6点的基2FFT。
这里为了计算方便,每次计算4点。
每级基2计算的时间为计算地址1拍,输入数据1拍,复数乘6拍,复数加6拍,计算地址和保存数据2拍。
一共16拍。
8点计算,如果按照基2计算,分为3级,
每级为4个基2计算,分成2次计算,计算时间为16+2+16=34拍。
一共3级,则计算总时间是:
L2->
RAM1:
进入4个bank,2拍
三级计算:
34*3=102拍
数据保存RAM2->
L2:
2拍
一共106拍。
2.3.基4和基2混合基计算
以8点的计算举例:
18点分为4行,每行2点,即[0,1],[2,3],[4,5],[6,7]。
2先进行列的计算,即分别计算[0,2,4,6]和[1,3,5,7],进行基4计算。
3将基4计算的结果乘以中间旋转因子W,W的取值为
.
4中间结果进行基2计算,[0,1],[2,3],[4,5],[6,7]。
5计算的结果顺序为[0,2,4,6,1,3,5,7],得到最终的计算结果。
计算时间分析:
2个基4计算:
22+2+22=46拍
中间计算复乘:
每次计算3点,可以流水执行,时间为10+3+10=23拍
4个基2计算:
16+2+16=34拍
一共107拍。
但是中间的计算地址变换和旋转因子地址计算稍微复杂。
2.4.各个点数计算时间
2.6.1.16点
进入4个bank,4拍
2级每级4个基4计算:
2×
<
22+4+22)=96拍
4拍
一共104拍。
2.6.2.32点
进入4个bank,8拍
2级8个基4计算:
22+8+22)=104拍
每次计算3点,可以流水执行,时间为10+11+10=31拍
16个基2计算:
16+8+16=40拍
8拍
一共191拍。
一维:
5级基2:
40×
5=200拍。
一共216拍。
2.6.3.64点
进入4个bank,16拍
3级每级16个基4计算:
3×
22+16+22)=180拍
16拍
一共212拍。
2.6.4.128点:
进入4个bank,32拍
3级32个基4计算:
22+32+22)=228拍
每次计算3点,可以流水执行,时间为10+43+10=63拍
64个基2计算:
32+16+16=64拍
32拍
一共419拍。
2.6.5.256点
进入4个bank,64+10拍
4级每级64个基4计算:
4×
22+64+22)=432拍
64+10拍
一共580拍。
2.6.6.512点
进入4个bank,128+10拍
4级128个基4计算:
22+128+22)=688拍
每次计算3点,可以流水执行,时间为10+170+10=190拍
256个基2计算:
128+16+16=160拍
128+10拍
一共1314拍。
2.6.7.512点<
256点ram时)
转置:
256拍。
2个256点计算580×
2-128-20<
第二组数据载入输出时间)=1160-148拍
中间计算转置:
256拍
复乘:
128+16+16=160拍
结果进行中转置256拍
一共2268拍。
2.5.大点数转置时间
2.7.1.L2矩阵转置时间
L2为1Mbyte,最多转置64K复数点,转置时间为0.032ms。
L2cache:
nK复数点的矩阵转置时间:
每次传输256bits,每点为64bits,使用寄存器转置,传入寄存器时间为nk/4,传出时间为nk/4,一共nk/2拍。
2.7.2.L3矩阵转置时间
L3假设大于8MB,主频为L2的一半
转置nK复数点:
转置时间为nK拍,从L3到寄存器传输延迟为100拍。
总时间为:
nK+100拍。
2.6.大点数的二维计算
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FFT 硬件 加速器
![提示](https://static.bdocx.com/images/bang_tan.gif)