潘 于,田映輝,劉志哲,陳 濤,張 偉,申 奇
(1.海光信息技術(shù)股份有限公司,北京 100193;2.拓維電子科技(上海)有限公司,上海 201108;3.中國聯(lián)通智能城市研究院,北京 100048)
快速傅里葉變換(FFT)是數(shù)字信號處理領(lǐng)域應(yīng)用最廣泛的算法,其廣泛應(yīng)用于數(shù)字通信、雷達(dá)系統(tǒng)、成像系統(tǒng)以及圖像處理系統(tǒng)中。隨著現(xiàn)代數(shù)字信號處理技術(shù)的發(fā)展,系統(tǒng)對于FFT 的數(shù)據(jù)處理精度有著更高的要求。同時,不同的應(yīng)用環(huán)境需要使用不同點(diǎn)數(shù)的FFT,對于當(dāng)前的數(shù)字信號處理系統(tǒng)來說,也存在不同點(diǎn)數(shù)FFT 動態(tài)實(shí)時切換的應(yīng)用場景。因此,需要高精度、點(diǎn)數(shù)可配置的FFT 處理器。
FFT算法發(fā)展成熟,存在多種FFT算法,如基2、基4、基8 以及混合基等算法[1-12]。對于基2 算法,F(xiàn)FT 的運(yùn)算級數(shù)長、運(yùn)算時間長,但優(yōu)點(diǎn)在于硬件實(shí)現(xiàn)簡單;對于基8 算法,F(xiàn)FT 的運(yùn)算級數(shù)短,其運(yùn)算所需時間短,但其硬件實(shí)現(xiàn)復(fù)雜度高;基4 算法的運(yùn)算時間和硬件復(fù)雜度介于兩者之間?;? 算法可以實(shí)現(xiàn)任意2n點(diǎn)FFT 運(yùn)算;基4 算法可以實(shí)現(xiàn)任意4n點(diǎn)FFT 運(yùn)算;基8 算法可以實(shí)現(xiàn)任意8n點(diǎn)FFT 運(yùn)算。為了實(shí)現(xiàn)任意2n點(diǎn)FFT 運(yùn)算,且保證運(yùn)算時間相對較快,本文采用基2-基4 混合基實(shí)現(xiàn)對任意2n點(diǎn)FFT 的運(yùn)算。
為了加速FFT,存在多種硬件微架構(gòu)來實(shí)現(xiàn)FFT 處理器,其中最典型的就是基于存儲器和蝶形運(yùn)算單元共享(hardware-sharing)的FFT 處理器[13-14]和基于流水線(pipelined)的FFT 處理器[15-17]。對于hardware-sharing FFT 處理器,其通常采用ping-pang RAM 的方案實(shí)現(xiàn)[18-19],該方案可有效地節(jié)省資源消耗,但其運(yùn)算時間更長。pipelined FFT 處理器比hardware-sharing FFT 處理器面積大,但其運(yùn)算時間更短,為了獲得高速的FFT 處理器,本文設(shè)計(jì)了一種基于pipelined 的FFT 處理器。
同時,為了提高運(yùn)算精度,本文首次提出了類浮點(diǎn)的概念,設(shè)計(jì)了一種用于提高運(yùn)算精度的類浮點(diǎn)運(yùn)算單元,在不增加運(yùn)算資源的條件下提高FFT 的運(yùn)算精度。傳統(tǒng)的塊浮點(diǎn)運(yùn)算需要在每級進(jìn)行動態(tài)截位,因此數(shù)據(jù)的低位信息被舍棄,導(dǎo)致數(shù)據(jù)精度下降。采用本文設(shè)計(jì)的類浮點(diǎn)運(yùn)算方法,數(shù)據(jù)的低位信息可以得到有效利用。與傳統(tǒng)pipelined FFT 處理器以及經(jīng)典塊浮點(diǎn)FFT處理器相比,本文提出的類浮點(diǎn)方案具有更優(yōu)的PPA性能。
為了減少FFT 的運(yùn)算時間,同時實(shí)現(xiàn)任意2n點(diǎn)FFT運(yùn)算,本文采用基于基2-基4 混合基的FFT 算法實(shí)現(xiàn)可配置FFT 處理器。下面以32 點(diǎn)FFT 為例介紹其推導(dǎo)過程:
式中:N是一個復(fù)合數(shù),N=r1×r2×r3,按照混合基的形式將N分解為N= 4 × 4 × 2=32,進(jìn)一步將n按式(2)表示:
式中:n0= 0,1;n1=0,1,2,3;n2=0,1,2,3;n 同樣,可將頻率變量k用式(3)表示: 式中:k0=0,1,2,3;k1=0,1,2,3;k2=0,1。 按上述分解,得到32 點(diǎn)混合基信號流圖如圖1 所示。若要得到順序結(jié)果,需要對上式中X3(k0,k1,k2)進(jìn)行倒位序操作。 本文所述8~2 048 點(diǎn)可配置FFT 處理器核心架構(gòu)如圖2 所示,其由5 級基4 模塊和1 級基2 模塊組成。 圖2 中:第1個基4模塊用于完成FFT信號流圖對應(yīng)的第一級基4 運(yùn)算;第2 個基4 模塊用于完成FFT 信號流圖的第二級基4 運(yùn)算;第3 個基4 模塊用于完成FFT 信號流圖的第三級基4 運(yùn)算;第4 個基4 模塊用于完成FFT信號流圖的第四級基4 運(yùn)算;第5 個基4 模塊用于完成FFT 信號流圖的第五級基4 運(yùn)算;最后1 個基2 模塊用于完成FFT 信號流圖的最后1 級基2 運(yùn)算。 如果運(yùn)算8 點(diǎn)FFT,則只有第1 個基4 模塊和最后一個基2 模塊一同工作,通過多路選擇器使上述每個模塊的輸出作為下一個模塊的輸入,最后1 個基2 模塊的輸出作為8 點(diǎn)FFT 的運(yùn)算結(jié)果輸出;如果運(yùn)算16 點(diǎn)FFT,則只有前2 個基4 模塊工作,每個模塊的輸出作為下一個模塊的輸入,第2 個基4 模塊的輸出作為16 點(diǎn)FFT 的運(yùn)算結(jié)果輸出;如果運(yùn)算32 點(diǎn)FFT,則前2 個基4模塊和最后一個基2 模塊一同工作,每個模塊的輸出作為下一個模塊的輸入,最后1個基2模塊的輸出作為32點(diǎn)FFT 的運(yùn)算結(jié)果輸出;如果運(yùn)算64 點(diǎn)FFT,則只有前3 個基4 模塊工作,每個模塊的輸出作為下一個模塊的輸入,第3 個基4 模塊的輸出作為64 點(diǎn)FFT 的運(yùn)算結(jié)果輸出;如果運(yùn)算128 點(diǎn)FFT,則前3 個基4 模塊和最后一個基2 模塊一同工作,每個模塊的輸出作為下一個模塊的輸入,最后1 個基2 模塊的輸出作為128 點(diǎn)FFT 的運(yùn)算結(jié)果輸出。對于其余點(diǎn)數(shù)的FFT 運(yùn)算,如256 點(diǎn)FFT、512 點(diǎn)FFT、1 024 點(diǎn)FFT 以及2 048 點(diǎn)FFT 運(yùn)算,其運(yùn)算流程與上述類似,即通過利用圖2 中的兩個多路選擇器Mux1 和Mux2,選擇合適的數(shù)據(jù)通路以完成相應(yīng)點(diǎn)數(shù)的FFT 運(yùn)算。 圖3 詳述了每個基4 模塊以及基2 模塊的具體結(jié)構(gòu)以及數(shù)據(jù)流在基4模塊和基2模塊的運(yùn)算流程。以32點(diǎn)FFT 為例,對于第1 個基4 模塊,32 個輸入數(shù)據(jù)順次輸入到基4 模塊。輸入數(shù)據(jù)1~8 存儲到基4 模塊的第1 個輸入存儲器中;輸入數(shù)據(jù)9~16 存儲到基4 模塊的第2 個輸入存儲器中;輸入數(shù)據(jù)17~24存儲到基4模塊的第3個輸入存儲器中。之后,輸入數(shù)據(jù)25~32 順次輸入到基4 模塊,此時輸入1~8、9~16、17~24 順次并行從存儲器中輸出,這四組數(shù)據(jù)同時輸入給基4 蝶形運(yùn)算單元進(jìn)行蝶形運(yùn)算。蝶形運(yùn)算8 個周期會產(chǎn)生32 個結(jié)果,每個周期會產(chǎn)生4 個運(yùn)算結(jié)果,其中每周期的第1 個運(yùn)算結(jié)果輸出給下一級基4 模塊,第2~4 個運(yùn)算結(jié)果分別輸出到輸出存儲器1~3 中,當(dāng)前8 個數(shù)據(jù)輸出完畢后,輸出存儲器1~3 中存儲的數(shù)據(jù)順次輸出給下一級基4 模塊。對于后續(xù)基4 模塊以及基2 模塊的運(yùn)算,按照相似的辦法進(jìn)行。該執(zhí)行過程與FFT 信號流圖一致,采用此方法即可完成FFT 運(yùn)算,其是基于流水線方式實(shí)現(xiàn)的。 圖3 各級蝶形運(yùn)算數(shù)據(jù)流 采用傳統(tǒng)浮點(diǎn)運(yùn)算會增加設(shè)計(jì)復(fù)雜度,采用傳統(tǒng)的塊浮點(diǎn)運(yùn)算又存在數(shù)據(jù)精度的損失,為了降低設(shè)計(jì)復(fù)雜度,同時提高FFT處理器的精度,本文在蝶形運(yùn)算設(shè)計(jì)時根據(jù)浮點(diǎn)運(yùn)算的思路,提出了一種類浮點(diǎn)蝶形運(yùn)算單元。 圖4 為四點(diǎn)基本基4 運(yùn)算算法框圖。其中:a、b、c、d、A、B、C、D均為復(fù)數(shù),根據(jù)輸入數(shù)據(jù)a、b、c、d得到基4運(yùn)算的結(jié)果A、B、C、D如式(4)所示: 圖4 基本蝶形運(yùn)算算法框圖 不同級數(shù)據(jù)輸入時,需要乘以蝶形因子,因此在進(jìn)入基4 基本運(yùn)算單元之前需要進(jìn)行復(fù)數(shù)乘法。整體的基4 蝶形運(yùn)算單元如圖5 所示。 圖5 基4 蝶形運(yùn)算單元 對于8~2 048 點(diǎn)FFT 處理器,其輸入數(shù)據(jù)為16 bit有符號整數(shù)型數(shù)據(jù),即輸入數(shù)據(jù)格式為int16。如采用傳統(tǒng)的基于定點(diǎn)的FFT處理器方法,隨著運(yùn)算級數(shù)的增加,各級蝶形運(yùn)算單元的輸入數(shù)據(jù)位寬也會隨之增加,如果進(jìn)行2 048 點(diǎn)FFT 運(yùn)算時,其最后一級輸入數(shù)據(jù)位寬為27 bit。當(dāng)設(shè)計(jì)更大點(diǎn)數(shù)的FFT 處理器時,其輸入數(shù)據(jù)位寬會進(jìn)一步增加,進(jìn)而導(dǎo)致FFT處理器面積顯著增加。 當(dāng)用塊浮點(diǎn)實(shí)現(xiàn)FFT 處理器時,通過對每一級FFT處理器進(jìn)行動態(tài)的截位,可以使每一級蝶形運(yùn)算單元的輸入數(shù)據(jù)位寬保持在16 bit,但是動態(tài)截位會使得運(yùn)算結(jié)果的低位數(shù)據(jù)被直接截斷,造成低位數(shù)據(jù)丟失,進(jìn)而影響運(yùn)算精度。 為了減少FFT 處理器的面積,同時盡可能地提高FFT 處理器的運(yùn)算精度,本文借鑒IEEE 754 中使用的尾數(shù)+指數(shù)的浮點(diǎn)數(shù)據(jù)表示方式,采用數(shù)據(jù)的整數(shù)部分+指數(shù)部分來表示INT 型數(shù)據(jù)。文中稱此種方法為類浮點(diǎn)方法,雖然稱之為類浮點(diǎn),但實(shí)際上是采用類似浮點(diǎn)的表示方式描述更大動態(tài)范圍的整數(shù)數(shù)據(jù)。其輸入數(shù)據(jù)的格式為:整數(shù)部分加上指數(shù)部分,如圖6 所示。 圖6 類浮點(diǎn)數(shù)據(jù)表示方法 在圖6 中,整數(shù)部分由16 bit 有符號數(shù)表示,指數(shù)部分由4 bit 無符號數(shù)表示。對于圖6,如果其整數(shù)部分?jǐn)?shù)據(jù)為x,指數(shù)部分?jǐn)?shù)據(jù)為y,則其表示的真實(shí)INT 型數(shù)據(jù)值為x?2y。如20 bit 的16 進(jìn)制數(shù)據(jù)h00082,其整數(shù)部分?jǐn)?shù)據(jù)為8,指數(shù)部分?jǐn)?shù)據(jù)為2,則其表示的數(shù)據(jù)值為82,即64。對于本文提出的數(shù)據(jù)表示方法,其表示的INT 數(shù)據(jù)的范圍為-32 768×215~32 767×215,即-1 073 741 824~1 073 709 056 之間的整數(shù)。 利用本文提出的數(shù)據(jù)表示方法,對于不同的指數(shù)項(xiàng),其精度不同,即其精度為2y,y為指數(shù)項(xiàng)值。如果指數(shù)項(xiàng)為0,則精度精確到1;如果指數(shù)項(xiàng)為1,則精度精確到2;如果指數(shù)項(xiàng)為2,則精度精確到4,依此類推。選取4 bit 作為指數(shù)項(xiàng)的原因在于進(jìn)行2 048 點(diǎn)FFT 運(yùn)算時最大的位擴(kuò)展為11,因此用4 bit 數(shù)據(jù)即可覆蓋其擴(kuò)展范圍。類浮點(diǎn)蝶形單元具體硬件結(jié)構(gòu)如圖7 所示。 圖7 類浮點(diǎn)蝶形運(yùn)算單元 圖7 中的比較器用于對進(jìn)行基4 蝶形運(yùn)算的4 個輸入數(shù)據(jù)的4 個指數(shù)部分進(jìn)行比較,獲得這4 個輸入數(shù)據(jù)指數(shù)部分的最大值,根據(jù)該指數(shù)最大值對4 個輸入數(shù)據(jù)歸一化到同一指數(shù)。 圖7 中選擇移位器實(shí)質(zhì)上是4 個多路選擇器,分別控制4 路數(shù)據(jù)的整數(shù)部分進(jìn)行移位,多路選擇器的選擇端為4 個數(shù)據(jù)的最大指數(shù)值減去自身的指數(shù),該值如果為0 則整數(shù)部分不右移,如果為1 則整數(shù)部分符號右移1 位,為2 則整數(shù)部分符號右移2 位,以此類推。此過程完畢后,4 個輸入數(shù)據(jù)歸一化到同一量程,其具有相同的指數(shù)。 將選擇移位器的輸出和旋轉(zhuǎn)因子同時輸入到圖7所示復(fù)數(shù)乘法器中,由于旋轉(zhuǎn)因子中絕對值最大的旋轉(zhuǎn)因子為1,且為1的旋轉(zhuǎn)因子必定存在,為了歸一化量程,乘法器的運(yùn)算結(jié)果直接截掉低位,此時輸出數(shù)據(jù)為16 bit。 選擇移位器的運(yùn)算結(jié)果通過圖7 中的基本基4 單元完成基本基4 運(yùn)算,基本基4 單元只進(jìn)行加法運(yùn)算,其每個輸出會產(chǎn)生3 bit數(shù)據(jù)擴(kuò)展,輸出結(jié)果為19 bit。 將基本基4 單元的輸出通過圖7 中的取絕對值模塊,獲得這組輸出數(shù)據(jù)的絕對值。絕對值結(jié)果通過移位值產(chǎn)生器,將絕對值后的4 路數(shù)據(jù)的高3 bit 數(shù)據(jù)進(jìn)行或運(yùn)算,或運(yùn)算的結(jié)果可獲得有效數(shù)據(jù)的信息。根據(jù)或運(yùn)算結(jié)果對基本基4單元的19 bit輸出數(shù)據(jù)進(jìn)行移位,如果最高位為1,則將這4路整數(shù)數(shù)據(jù)的高16 bit數(shù)據(jù)輸出,同時輸出3 作為移位值;如果第18 bit 為1,則輸出[17∶2],同時輸出2作為移位值;如果第17 bit為1,則輸出[16∶1],同時輸出1作為移位值;否則輸出[15∶0],同時輸出0作為移位值。將此時獲得的移位值與圖7 中比較器獲得的4 個數(shù)據(jù)的最大指數(shù)項(xiàng)相加獲得最終運(yùn)算結(jié)果的指數(shù)部分,此時運(yùn)算結(jié)果再次表示為類浮點(diǎn)格式。 利用Matlab 對本文所使用的FFT 處理器進(jìn)行建模,其中復(fù)數(shù)乘法采用本文提出的類浮點(diǎn)方法。同時,利用Matlab 對采用經(jīng)典塊浮點(diǎn)運(yùn)算單元的FFT處理器進(jìn)行建模。分別為類浮點(diǎn)模型和經(jīng)典塊浮點(diǎn)模型生成激勵,并與FFT 的黃金值進(jìn)行比較。本設(shè)計(jì)為8~2 048 點(diǎn)可配置FFT 處理器,選擇512 點(diǎn)FFT 進(jìn)行精度比較。生成6 組長度為512 的激勵數(shù)據(jù)作為512 點(diǎn)FFT 處理器的輸入數(shù)據(jù)。第一組輸入數(shù)據(jù)為2,3,…,513,是斜率為1的線性信號;第二組輸入數(shù)據(jù)為20,30,…,5 130,是斜率為10 的線性信號;第三組數(shù)據(jù)是128,128,…,128,是斜率為0 的線性信號;第四組數(shù)據(jù)是32 768,32 768,…,32 768,是斜率為0 的線性信號;第五組數(shù)據(jù)為正弦信號,其振幅為212-1;第六組數(shù)據(jù)也是正弦信號,其振幅為215-1。 如表1 所示,當(dāng)輸入數(shù)據(jù)比較小時,兩者具有相同的精度。但是,隨著輸入數(shù)據(jù)值的增加,本文采用的類浮點(diǎn)相比傳統(tǒng)塊浮點(diǎn)來說具有更高的精度。 表1 本文方案與傳統(tǒng)塊浮點(diǎn)方案實(shí)虛部誤差分析 % 8~2 048 點(diǎn)FFT 處理器在執(zhí)行512 點(diǎn)FFT 運(yùn)算時,選擇一組隨機(jī)激勵作為512 點(diǎn)FFT 的輸入數(shù)據(jù),其實(shí)部結(jié)果和Matlab 黃金結(jié)果如圖8 所示。 圖8 實(shí)部運(yùn)算結(jié)果對比 其虛部結(jié)果與Matlab 黃金結(jié)果如圖9 所示。 圖9 虛部運(yùn)算結(jié)果對比 8~2 048 點(diǎn)FFT 處理器功能仿真波形圖如圖10 中的verdi 波形所示,本仿真中8~2 048 點(diǎn)FFT 配置執(zhí)行1 024 點(diǎn)FFT 運(yùn)算。 圖10 8~2 048 點(diǎn)FFT 處理器功能仿真波形圖 通過在關(guān)鍵路徑乘法器上插入寄存器,使得本文所設(shè)計(jì)的FFT 處理器能夠獲得較高的工作頻率。通過對乘法器使用門控單元,使得輸入為0 的數(shù)據(jù)不進(jìn)行乘法運(yùn)算;同時對0+0j、j、-1、-j 這4 種蝶形因子對應(yīng)的乘法運(yùn)算進(jìn)行優(yōu)化,使得乘法器的使用率進(jìn)一步減少,進(jìn)而降低功耗。 本文設(shè)計(jì)的FFT 處理器共有5 個基4 模塊和1 個基2 模塊。每個基4 模塊由3 個復(fù)數(shù)乘法單元和4 個復(fù)數(shù)加法單元組成;每個基2 模塊由1 個復(fù)數(shù)乘法單元和1 個復(fù)數(shù)加法單元組成,即本設(shè)計(jì)共有16 個復(fù)數(shù)乘法單元和22 個復(fù)數(shù)加法單元。每個復(fù)數(shù)乘法單元用于實(shí)現(xiàn)兩個復(fù)數(shù)的乘法運(yùn)算,每個復(fù)數(shù)加法單元產(chǎn)生一個復(fù)數(shù)運(yùn)算結(jié)果。FFT 運(yùn)算的每一級都具備存儲器用于存儲這一級運(yùn)算的輸入數(shù)據(jù)和輸出數(shù)據(jù)。每個基4 模塊有6 個存儲器,其中3 個存儲器用于存儲輸入數(shù)據(jù),3 個存儲器用于存儲輸出數(shù)據(jù)。對于第1 個基4 模塊,其每一個存儲器的深度為512;對于第2個基4模塊,其每一個存儲器的深度為128;對于第3 個基4 模塊,其每一個存儲器的深度為32;對于第4 個基4 模塊,其每一個存儲器的深度為8;對于第5 個基4 模塊,其每一個存儲器的深度為2,此時使用寄存器即可。對于基2 模塊,其僅有一個深度為1 的寄存器用于緩存輸入數(shù)據(jù)。 在每一級運(yùn)算中,與輸入數(shù)據(jù)伴隨輸入到蝶形運(yùn)算單元中的數(shù)據(jù)還有蝶形因子,蝶形因子存儲在ROM 當(dāng)中,其中基2 模塊中的ROM 總深度為1 024;第2 個基4模塊中ROM 總深度為16;第3 個基4 模塊中ROM 總深度為64;第4 個基4 模塊中ROM 總深度為256;第5 個基4 模塊中ROM 總深度為1 024。 本文所設(shè)計(jì)的8~2 048 點(diǎn)可配置FFT 處理器版圖如圖11所示。在55 nm 工藝下,其工作頻率為200 MHz,面積為1.1 mm2,工作電壓為1.08 V,功耗為42.6 mW。 圖11 8~2 048 點(diǎn)FFT 處理器版圖 表2 給出了性能比較。為了公平比較,使用歸一化公式(5)將各工藝下的面積歸一化到同一標(biāo)準(zhǔn)。 表2 展示了本文與經(jīng)典塊浮點(diǎn)FFT 處理器以及傳統(tǒng)pipeline 型FFT 處理器的性能比較。表2 中文獻(xiàn)[20]采用基于hardware-sharing 的塊浮點(diǎn)方法實(shí)現(xiàn)64 點(diǎn)FFT處理器,其輸入數(shù)據(jù)位寬為16,在180 nm 工藝下,面積為0.626 7 mm2,最高工作頻率為300 MHz,功耗為126.17 mW。利用歸一化公式,將文獻(xiàn)[20]歸一化到55 nm 工藝下,其歸一化面積為0.058 mm2??紤]到文獻(xiàn)[20]中FFT 點(diǎn)數(shù)為64,而FFT 的面積與FFT 點(diǎn)數(shù)線性相關(guān),如果采用文獻(xiàn)[20]所示方法實(shí)現(xiàn)2 048 點(diǎn)FFT,其歸一化面積為1.856 mm2,且文獻(xiàn)[20]使用的hardwaresharing 方案本身是一種節(jié)省資源的方法,故本文相對于文獻(xiàn)[20]面積更小。理論上,芯片制程越先進(jìn),其供電電壓越低,動態(tài)功耗也越低。文獻(xiàn)[20]在300 MHz下其功耗為126.17 mW,假設(shè)文獻(xiàn)[20]采用55 nm工藝,則可近似認(rèn)為其供電電壓下降3.27 倍,考慮到功耗與電壓的平方相關(guān),故可近似認(rèn)為文獻(xiàn)[20]在55 nm 其功耗為11.79 mW;當(dāng)其FFT點(diǎn)數(shù)變?yōu)? 048時,其功耗線性近似為377.28 mW,其功耗同樣大于本文所述FFT 的功耗。文獻(xiàn)[20]具有更高的工作頻率。綜合比較本文與文獻(xiàn)[20]的PPA 性能,即頻率/(面積*功耗),本文的PPA 值為0.43,文獻(xiàn)[20]的PPA 值為4.26,故相對于經(jīng)典塊浮點(diǎn)FFT 處理器,本文所提出的FFT處理器具有更好的綜合性能。同時根據(jù)前述Matlab分析,本文相對于塊浮點(diǎn)還具有精度優(yōu)勢。 表2 中文獻(xiàn)[21]為傳統(tǒng)FFT 處理器,其采用傳統(tǒng)方法實(shí)現(xiàn)。文獻(xiàn)[21]中的FFT 處理器為輸入數(shù)據(jù)位寬為32 bit的1 024點(diǎn)FFT處理器,其在65 nm下面積為3.6 mm2,其歸一化面積為3.04 mm2;由于FFT 點(diǎn)數(shù)與面積線性相關(guān),采用文獻(xiàn)[21]的方法實(shí)現(xiàn)2 048 點(diǎn)FFT 時,其等效歸一化面積為6.09 mm2;進(jìn)一步FFT 數(shù)據(jù)位寬與面積線性相關(guān),采用文獻(xiàn)[21]方法實(shí)現(xiàn)20 bit 輸入數(shù)據(jù),其最終等效面積為3.8 mm2,故本文相對于文獻(xiàn)[21]面積更小。文獻(xiàn)[21]在600 MHz 下其功耗為60.3 mW,采用前述比較方法,得到文獻(xiàn)[21]在相同標(biāo)準(zhǔn)(工藝、FFT 點(diǎn)數(shù)、FFT 輸入數(shù)據(jù)位寬)下的等效功耗為54.2 mW,其功耗同樣大于本文FFT 的功耗。文獻(xiàn)[21]具有更高的工作頻率。綜合比較本文與文獻(xiàn)[21]的PPA 性能,即頻率/(面積*功耗),文獻(xiàn)[21]的PPA 值為2.91,故相對于文獻(xiàn)[21]所述的經(jīng)典FFT 處理器,本文所提出的FFT 處理器具有更優(yōu)的綜合性能。 綜上所述,本文設(shè)計(jì)是實(shí)現(xiàn)FFT 處理器的一種有效實(shí)現(xiàn)方案。 本文采用類浮點(diǎn)運(yùn)算單元實(shí)現(xiàn)基于流水線的FFT處理器,首次提出類浮點(diǎn)的數(shù)據(jù)格式,相比于傳統(tǒng)的塊浮點(diǎn)運(yùn)算單元,在不增加資源消耗的情況下,采用類浮點(diǎn)運(yùn)算單元的FFT 處理器的運(yùn)算精度得到了有效提高。同時,相比于傳統(tǒng)塊浮點(diǎn)FFT 處理器和經(jīng)典FFT 處理器,本文所實(shí)現(xiàn)的FFT 處理器具有更優(yōu)的綜合性能。此外,采用本文使用的基2/基4 混合基流水線方法,使得該FFT 處理器可以實(shí)現(xiàn)任意2n點(diǎn)的FFT 運(yùn)算,提高了其適用范圍。因此本文所述方案是一種實(shí)現(xiàn)高精度、可變點(diǎn)流水線型FFT 處理器的有效方案。2 FFT 處理器微架構(gòu)
2.1 FFT 處理器整體架構(gòu)及其運(yùn)算流程
2.2 類浮點(diǎn)蝶形運(yùn)算的實(shí)現(xiàn)方案
3 實(shí)驗(yàn)結(jié)果與分析
3.1 精度比較
3.2 性能比較
4 結(jié) 語