ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:138.81KB ,
资源ID:8193580      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8193580.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(FFT硬件加速器.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

FFT硬件加速器.docx

1、FFT硬件加速器1K点FFT的硬件加速器实现Versio n 0.6修改历史版本时间内容0.12018.03.22初稿0.22018.03.28修改地址计算图,1k点计算时间0.32018.03.30修改2维FFT算法,增加大点数的二维算法时间0.42018.03.31增加3维FFT算法和计算的时间,256点ram的计算0.52018.04.02增加512点ram时的计算,整理文档。0.62018.04.06增加混合基旋转因子计算图,修改各个计算时间公式,增加面积估算0.72018.04.08增加2k点计算时间0.82018.04.30修改2维计算时间,和旋转因子 load/store时间1K

2、点FFT的硬件加速器实现了 1K点的快速FFT计算,采用单级结构,使用 1个基4 蝶形计算单元就能实现基 4或基2的FFT计算。1硬件结构:图1 FFT硬件加速器结构1. LD_RAM2. 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 , R

3、AM1 , RAM2 的功能可以互换。4.RAM3载入旋转因子,并和数据一起进入基 4计算单元进行计算。分为 4个bank,分别储存Wb,Wc,Wd,即一次基4蝶形计算的3个旋转因子储存在 3个bank里,使得可以同时输 出给基 4 计算单元。或者保存中间计算的旋转因子,计算混合基计算或者二维计算时的中 间结果。这4个ram,都是1kx 64bits=8KB容量。数据在 RAM中的存储方式是每行 256bits,即每 行存储 4 点数据。5.地址计算单元输入数据地址计算和输出数据地址计算单元得到相应的数据地址。对于基 4 DIT-FFT 计算,每次输入的数据是反序的,输出的数据是顺序的。 其中

4、反序的计算是:把 1024顺序分为 5位的 4进制数,每一位由一个计数器实现,反序 即使根据顺序,这 5 个计数器的反序组合决定输入地址。地址的计算参数为:计算级数 L,每级的蝶形计算距离 Dis,当前计算蝶形所在的组为第N组,一共M组,当前蝶形所在组的位置是第 S个蝶形。其中Dis=4A(L-1。旋转因子的计算也是根据当前蝶形的位置,载入旋转因子。地址的计算:第一级:数据在 RAM1 中存储方式: 0-255, 256-511, 512-767, 768-1023 分别储存在 4个 bank 中。第一级基 4FFT 的采样间隔为 1,所以计算的 4 点应该为 0-1-2-3, 4-5-6-7

5、, 8-9-10- 11.。则但是根据 DIT-FFT的原理,应该为反序输入,正序的计数器顺序为 15-14-13-12-11,则反序的计数器顺序为 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的数据。因为第

6、二级的采样间隔为 4,则数据计算完毕的原位保存顺序为 0-1-2-3作为一个256bits 到 bankl,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.第二级的旋转因

7、子数目为 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,顺序输出。反

8、序正序RAM1I5I4I3I2I19:8 7:6 5:4 3:2 1:0原采样顺序间隔为0I1I2I3I4I59:8 7:6 5:4 3:2 1:0反序后的采样顺序RAM20-1-2-30-1-2-316-17-18-192550-1-2-30-256-512-768256-5114-5-6-764-320-576-832512-7678-9-10-11128-384-640-896经过基4FFT计 算,保存为原采 样顺序(原址计 算),0-1-2-3 保存到bank1,4-5-6-7 到bank2 4-5-6-78-9-10-11768-102312-13-14-15每次从4个bank里各输

9、出1个数据,数据偏移量为12*64+13*16+14*4+15图1第一级计算的地址关系RAM1RAM2 RAM1 RAM2RAM1 RAM20-1-2-30-1-2-316-17-18-190-4-8-121-5-9-130-16-32-4825564-68-72-76256-5114-5-6-716-20-24-2864-80-96-112512-7678-9-10-1132-26-40-44128-144-160176768-102312-13-14-1548-52-56-60192-208-2242400-64-128-1920-1-2-3255256-320-384-448256-51

10、1512-576-640-704512-767768-832-896-960768-1023图2每级计算ram内数据保存顺序6基4计算单元基4计算单元完成一个完整的 4点基4蝶形计算,根据地址单元生成的地址顺序,载入 数据,进行基4的蝶形计算。以下是基 4计算公式和基4计算单元的结构。A = a1+a2jA = A+CWc + (BWb+DWd) B = A-CWc - j(BWb-DWd) C = A+CWc - (BWb+DWd) D,= A-CWc + j(BWb-DWd)B = b1+b2j bwmZwZ-b22)f bw2=(b2wb1+b1Wb2)-A-CWc:I2=a1-cw1Q

11、2=a2-cw2C = c1+c2j D = d1+d2jWb = Wb1+Wb2j _Wc = Wc1+Wc2j _Wd = Wd1+Wd2j 一A+CWc + (BWb+DWd) =(I1+I3)+j(Q1+Q3) _A-CWc -j(BWb-DWd)=(I2+Q4)+j(Q2-I4)A,cw1=(c1wc1-c2Wc2)cw2=(c2wc1+c1Wc2)dw1=(d1wd1 七2Wd2) dw2=(d2wd1+d1Wd2)C*Wc= cw1+jcw2BWb+DWdI3=bw1+dw1Q3=bw2+dw2A+CWc - (BWb+DWd) =(I1-I3)+j(Q1-Q3)D*Wd= BW

12、b-DWddw1+jdw2 I4=bw1-dw1 A-CWc +j(BWb-DWd)Q4=bw2-dw2 =(I2-Q4)+j(Q2+14)图3基4蝶形计算公式ABCD图4基4计算单元图3中一共有6个乘加单元和16个实数加,这里一共需要 6个四元乘加单元和 16个实数 加法器,其中6个乘加单元指的就是实现类似公式 bw2=(b2wb1+b1Wb2的乘加单元。2 FFT详细计算步骤2.1.1k点数据计算流程:1) 1K点的数据从 L2cache到RAM1。分别存入 4个bank。需要的拍数为:256+10延迟)2) 1024点一共分为5级基4FFT计算。对于每级计算,先计算每次 4点的数据地址和

13、 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中,直接输出保存 L2 cac

14、he。保存1k点需要的拍数为:256+10拍总:256+10+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,得到最终的计算结果。计算时间分析:L2-RAM1 :进入 4

15、 个 bank,2 拍2个基4计算:22+2+22 = 46拍中间计算复乘:每次计算 3点,可以流水执行,时间为 10+3+10=23拍4个基2计算:16+2+16 = 34拍数据保存RAM2-L2 : 2拍一共107拍。但是中间的计算地址变换和旋转因子地址计算稍微复杂。2.4.各个点数计算时间2.6.1.16 点L2-RAM1 :进入 4 个 bank,4 拍2级每级4个基4计算:2 X L2 : 4拍一共104拍。L2-RAM1 :进入 4个 bank,8 拍2级 8 个基 4 计算:2 X L2 : 8 拍一共 191 拍。一维:L2-RAM1 :进入 4个 bank, 8拍16个基 2

16、计算: 16+8+16 = 40 拍5 级基 2: 40X 5=200 拍。数据保存 RAM2-L2 : 8 拍一共 216 拍。2.6.3.64 点L2-RAM1 :进入 4个 bank, 1 6拍3级每级 16个基 4计算: 3XL2 : 16 拍一共 212 拍。2.6.4.128 点:L2-RAM1 :进入 4 个 bank, 32 拍3级 32个基 4计算: 3XL2 : 32拍一共 419 拍。2.6.5.256 点L2-RAM1 :进入 4个 bank, 64+10拍4级每级 64个基 4计算: 4XL2 : 64+10拍一共 580 拍。2.6.6.512 点10+11+10=

17、31 拍10+43+10=63 拍L2-RAM1 :进入 4个 bank, 128+10 拍4 级 128 个基 4 计算:4 X L2 : 128+10 拍一共 1314 拍。2.6.7.512点RAM1 :转置: 256 拍。2个256点 计算580 X 2-128-20L2 : 128+10 拍一共 2268 拍。2.5.大点数转置时间2.7.1.L2 矩阵转置时间L2 为 1 Mbyte ,最多转置 64K 复数点,转置时间为 0.032ms。L2cache: nK复数点的矩阵转置时间:每次传输 256bits,每点为 64bits,使用寄存器转置,传入寄存器时间为 nk/4,传出时间

18、为nk/4, 共nk/2拍。2.7.2.L3 矩阵转置时间L3 假设大于 8MB, 主频为 L2 的一半转置 nK 复数点:转置时间为 nK 拍,从 L3 到寄存器传输延迟为 100拍。总时间为: nK+100 拍。2.6.大点数的二维计算二维计算的计算过程即是混合基的计算。1进行数据转置,进行列的计算。2计算完毕进行转置,回到原来地址,以方便下一级计算。3计算中间旋转因子,中间结果4进行每行的计算5进行矩阵转置,保存输出。大点数二维计算时的旋转因子计算:对于nk点,二维旋转因子计算数目比较大,但是有规律的,见下图所示0 1 2 3 n-1上图中,nk点中间旋转因子数目总数为 nk个,计算公式

19、和一维一样, .一其中k的值在这里是行号x列号。如果先计算列的话,可以看出第 m列的旋转因子是 m-1列的旋转因子,乘以第 2列,这样子的话可以由只存储第 2列的旋转因子,每次重新计算第m列,减少ram使用量,增加少量的计算。问题就是这样子计算的话,可以后面的旋转因子误差比较大,可以隔几列计算后保存第 k列的标准值,使用标准值计算,这样可以避免误差过大。目前使用 matlab计算的话,如果是32k,只保存一列的话,假设单精度数, 1列的结果误差为10的-5次方,保存32列的误差为10的-6次方,是可以接受的。但是还需要更加精确的计算。这里暂定方案是保存一 列。281 1k点ram时的二维计算即

20、按照上述计算过程计算,1矩阵转置:nK/2拍。2列的计算和中间结果相乘:每列 1k,进行计算,266+1500拍,然后载入第1k点的旋转因子,进行 1k点复数乘,同时可以并行进行 3个复数乘,时间为350+10+10延迟)=370拍,同时载入下一个 1k点旋转因子的基础值。然后计算下一个1k的中间旋转因子1k个复数乘),时间为 370拍,保存中间数 据和1k点的旋转因子,同时载入下一个 1k数据。每列的时间为 266+1500+370+370=2506 拍,nk 点时间为266+1500+370+370+266 ) *n+266=532+2506*n )3矩阵转置:nK/2拍4每行的计算:二维

21、计算,256+10+300p n+256+10=532+300pn5矩阵转置:nK/2拍n 点的计算时间为 m ,需要 p 级,则总时间为 3nk/2+532+2506*n+532+300pn=3*n*512+2506*n+1064+300*p*n 2k 点的计算时间 9748ns =9.748us4k 点的计算时间 18432ns= 18.432us8k 点的计算时间 40600 ns =40.600us16k 点的计算时间 75336ns =75.336us32k 点的计算时间 159208ns =159.208us64k 点的计算时间 317352ns =317.352us2.8.2.

22、1k 点 ram ,使用 L3cache 时的计算1矩阵转置,在 L3 内: nK+100 拍,2n个1k进行FFT计算:传输时间:1k拍的计算时间为 512+100+300 X 5延迟)拍,同时载入 1k点二维旋转因子1k 个中间结果: 1k 点复数乘和下一个 1k 点旋转因子计算时间 370+370=740 拍,同时载入下1k的数据,然后保存二维旋转因子到 L2 cache 266拍,同时载入1k点基4 的旋转因子。nk 的中间计算时间为 612+1500+740+266)*n+612=2506*n+12243将计算结果传回L3做矩阵转置:nk+100拍。4计算 1k 个 n 点并传回,计

23、算 n 点,一共需要 1k 次计算,每次计算的时间为:300*p*n+612+612,p为n点计算的级数 时间为: 1224+300*p*n5L3 做矩阵转置 nK+100 拍。总时间为: 3*n*1024+300+2506*n+300*p*n+1224*264k 点:417340ns =417.340us128k 点: 870332ns =870.332us 256k 点: 1737916ns =1.738ms 512k 点: 3626684ns =3.627ms2.8.3. 256点 ram 的二维计算1矩阵转置: nK/2 拍。2列的计算和中间结果相乘:每列 256点,进行计算, 64+

24、10+432拍,载入 256点二维的旋 转因子,进行 256点复数乘,同时可以并行进行 3个复数乘,时间为 90+10+10延迟) =110拍。 然后计算下一个 256的中间旋转因子,时间为 110拍,保存中间数据和 256 点的旋转因子 74 拍,同时载入下一个 256 点数据。每列的时间为 64+10+432+110+110=726 拍,nk 点时间为 64+10+726)*4n+64+10= 148+2904*n3矩阵转置: nK/2 拍4每行的计算:二维计算,4n 点数据, 4n 点的计算需要 p 级。256次 4n 点计算时间256点同时进行4n点的计算,每级可以流水计算 256点,

25、则如果需要 p级,一共要 m 拍,则 256点的计算需要 64+44拍。256次4n点计算需要 64+10+64+10+4n X 108 Xp) =432*p*n+1485矩阵转置: nK/2 拍4n点的计算时间为 m,需要p级,则总时间为1536*n+148+ 2904*n +432*p*n+1481k 点的计算时间 5168ns =5.168us2k 点的计算时间 10904ns =10.904us4k 点的计算时间 21512ns= 21.512us8k 点的计算时间 46184ns =46.184us16k 点的计算时间 92072ns =92.072us32k 点的计算时间 1976

26、72ns =197.672us64k 点的计算时间 395048ns =395.048us2.8.4.256 点 ram ,使用 L3cache 计算1矩阵转置,在L3内:n K+100拍,2 n/4 个 4k 进行 FFT 计算:传输时间:4k拍的计算时间为21512+100=6579*n3将计算结果传回L3做矩阵转置:nk+100拍。4计算 4k 个 n/4 点,计算 n/4 点, p 为 n/4 点的计算级数。时间为: 64+100+432*p*n +64+100=328+432*p*n5L3 做矩阵转置 nK+100 拍。总时间为:n/4点时间m, n点需要p级,都按照4k点分。300

27、+3*n*1024+6579*n +432*p*n+32864k 点: 673588ns =673.588us128k 点: 1401844ns =1.402ms256k 点: 2803060ns =2.803ms512k 点: 5826676ns = 5.827ms2.8.5.512点 ram 的二维计算1矩阵转置: nK/2 拍。2列的计算和中间结果相乘:每列 256 点,进行两列计算, 128+10+(64+64+44*4 拍,载 入 512 点的二维旋转因子,进行 512 点复数乘,同时可以并行进行 3 个复数乘,时间为 170+10+10延迟) =190 拍。 然后计算下一个 512 的中间旋转因子,时间为 190拍,保存中间数据和 512点的旋转

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

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