FFT硬件加速器Word文件下载.docx

上传人:b****6 文档编号:16144390 上传时间:2022-11-20 格式:DOCX 页数:17 大小:82.47KB
下载 相关 举报
FFT硬件加速器Word文件下载.docx_第1页
第1页 / 共17页
FFT硬件加速器Word文件下载.docx_第2页
第2页 / 共17页
FFT硬件加速器Word文件下载.docx_第3页
第3页 / 共17页
FFT硬件加速器Word文件下载.docx_第4页
第4页 / 共17页
FFT硬件加速器Word文件下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

FFT硬件加速器Word文件下载.docx

《FFT硬件加速器Word文件下载.docx》由会员分享,可在线阅读,更多相关《FFT硬件加速器Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。

FFT硬件加速器Word文件下载.docx

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计算:

<

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计算:

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计算:

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.大点数的二维计算

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1