亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于FPGA的FFT裝置及方法與流程

文檔序號:11691024閱讀:273來源:國知局
基于FPGA的FFT裝置及方法與流程
本發(fā)明涉及數(shù)字信號領(lǐng)域,尤其涉及一種基于fpga的fft裝置及方法。
背景技術(shù)
:在無線通信系統(tǒng)中,經(jīng)常使用快速傅里葉變換fft對輸入時域信號進(jìn)行變換分析,觀察頻域波形,以獲取信號的頻域特征。ofdm利用離散傅立葉反變換和離散傅里葉變換(idft/dft)代替多載波調(diào)制和解調(diào)的實(shí)現(xiàn),即在發(fā)射端對待調(diào)制數(shù)據(jù)進(jìn)行ifft運(yùn)算來實(shí)現(xiàn)調(diào)制,接收端對接收到的數(shù)據(jù)進(jìn)行fft運(yùn)算實(shí)現(xiàn)解調(diào),從而大大降低了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。fpga可以很好地解決并行性和速度問題,并且有配置靈活、易于升級等特點(diǎn),是常用的實(shí)現(xiàn)快速傅里葉變換fft的方法。例如,xilinx的virtex6系列芯片在fpga內(nèi)部,不僅提供了多個稱為dspslices的計(jì)算單元,還提供了可讀寫的lut單元、雙端口ram單元。目前xilinx的virtex6系列芯片內(nèi)部的fft算法ip軟核分為四種模式,分別為:流水的數(shù)據(jù)流i/o(pipelined,streamingi/o)、基-4突發(fā)i/o(radix-4,bursti/o)、基-2突發(fā)i/o(radix-2,bursti/o)、基-2lite突發(fā)i/o(radix-2lite,bursti/o)。按結(jié)構(gòu)可分為pipelined和burst兩種,下面簡單介紹兩種結(jié)構(gòu)的實(shí)現(xiàn)方法,如下:(1)流水的數(shù)據(jù)流i/o。流水的數(shù)據(jù)流i/o結(jié)構(gòu)通過一組基-2蝶形單元處理引擎的流水來實(shí)現(xiàn)連續(xù)數(shù)據(jù)處理。每個處理引擎都有存儲器塊來存儲輸入數(shù)據(jù)和中間數(shù)據(jù)。(2)基-4突發(fā)i/o。對于基-4突發(fā)i/o結(jié)構(gòu),fftip核用一個基-4蝶形單元處理引擎實(shí)現(xiàn)。對于流水的數(shù)據(jù)流i/o結(jié)構(gòu),ip核在處理當(dāng)前幀數(shù)據(jù)變換計(jì)算的同時,可以加載下一幀輸入數(shù)據(jù)并輸出前一幀的變換結(jié)果數(shù)據(jù),可以連續(xù)輸入數(shù)據(jù)并在一定的計(jì)算延時后獲得連續(xù)的計(jì)算結(jié)果輸出。輸入數(shù)據(jù)是順序的,輸出數(shù)據(jù)可以是倒序的或者順序的。下面以8點(diǎn)為例說明基-2蝶形流水線式的fft(如圖1所示)。基-2dif以兩點(diǎn)為單位進(jìn)行蝶形運(yùn)算,在進(jìn)入運(yùn)算前先進(jìn)行數(shù)據(jù)緩存,使輸入數(shù)據(jù)的上半部分與下半部分相結(jié)合?;窘Y(jié)構(gòu)如下:設(shè)一個時鐘周期緩存一個數(shù)據(jù),即第一個時鐘緩存0,第二個時鐘緩存1...輸入數(shù)據(jù)緩存ram空間為4,即當(dāng)?shù)谖鍌€數(shù)據(jù)“4”到來時,緩存的數(shù)據(jù)“0”與“4”直接進(jìn)行蝶形運(yùn)算,而不用存儲數(shù)據(jù)。最終輸出的頻域數(shù)據(jù)遵循倒序排列,8點(diǎn)的基-2蝶形流水線式的fft的輸入輸出表如表1所示:表1基-2蝶形流水線式的fft的輸入輸出表輸入(正序)十進(jìn)制輸出(倒序)十進(jìn)制0000000000111004010201020113110610040011101510151106011311171117根據(jù)蝶形圖,8點(diǎn)基-2fft分為3級,運(yùn)算前緩存數(shù)據(jù)需要空間為4,中間數(shù)需要的空間分別為4、2,最后順序輸出數(shù)據(jù)時需要先進(jìn)行所有點(diǎn)的緩存,再尋址輸出,緩存空間為8。共計(jì)使用ram空間 為18,每級使用一個蝶形運(yùn)算,共計(jì)使用3個蝶形運(yùn)算單元,假設(shè)1一個蝶形運(yùn)算單元使用3個dsp乘法器,則共計(jì)使用9個dsp乘法器。應(yīng)用基-2蝶形運(yùn)算單元的fft裝置利用每級放置蝶形單元及存儲中間數(shù)據(jù),讓數(shù)據(jù)可以連續(xù)進(jìn)行固定點(diǎn)fft,隨著fft運(yùn)算的點(diǎn)數(shù)增多,占用的資源也隨著增長,并且由于每級運(yùn)算只使用一個基-2蝶形單元,算數(shù)的先后是固定的,所以在最后一級要求順序輸出時,需要額外增加ram,表2統(tǒng)計(jì)了應(yīng)用基-2蝶形運(yùn)算單元的fft裝置采用scale縮放模式進(jìn)行處理時,存儲數(shù)據(jù)占用的ram的總深度和進(jìn)行運(yùn)算占用的dsp乘法器的數(shù)量。表2應(yīng)用基-2蝶形運(yùn)算單元的fft裝置占用的資源量技術(shù)實(shí)現(xiàn)要素:本發(fā)明所要解決的技術(shù)問題是:現(xiàn)有的fft裝置在數(shù)據(jù)順序輸出對ram的利用率低、需要較多的fpga資源的問題。為解決上述技術(shù)問題,本發(fā)明一方面提出了一種基于fpga的fft裝置。該基于fpga的fft裝置包括:緩存模塊、控制模塊和基-4蝶形運(yùn)算器;所述控制模塊分別與緩存模塊和基-4蝶形運(yùn)算器相連,用于控制數(shù)據(jù)的輸入、輸出,用于控制數(shù)據(jù)以乒乓緩存的方式緩存至緩存模塊中,用于控制數(shù)據(jù)以循環(huán)尋址的方式在基-4蝶形運(yùn)算器中完成fft運(yùn) 算;所述緩存模塊用于初始輸入前3/4的數(shù)據(jù),輸出后3/4的運(yùn)算結(jié)果;并用于保存中間數(shù)據(jù);所述基-4蝶形運(yùn)算器用于初始輸入后1/4的數(shù)據(jù),輸出前1/4的運(yùn)算結(jié)果??蛇x地,所述緩存模塊為多個雙口ram或多個單口ram??蛇x地,所述雙口ram的個數(shù)為7個或8個,由fft運(yùn)算的點(diǎn)數(shù)決定。可選地,所述多個ram的總深度小于等于fft運(yùn)算點(diǎn)數(shù)的兩倍??蛇x地,所述基-4蝶形運(yùn)算器的個數(shù)為1個或2個,由fft運(yùn)算的點(diǎn)數(shù)決定。本發(fā)明另一方面提出了一種采用如上所述的基于fpga的fft裝置的fft方法,包括:順序輸入第一幀數(shù)據(jù),完成第一幀數(shù)據(jù)的1級蝶形運(yùn)算后,采用乒乓緩存順序輸入第二幀數(shù)據(jù),并完成第一幀數(shù)據(jù)的m級蝶形運(yùn)算;完成第一幀數(shù)據(jù)的蝶形運(yùn)算結(jié)果的順序輸出,同時進(jìn)行第二幀數(shù)據(jù)的緩存及蝶形運(yùn)算;完成第二幀數(shù)據(jù)的m級蝶形運(yùn)算,同時采用乒乓緩存進(jìn)行第三幀數(shù)據(jù)的緩存,并開始進(jìn)行第三幀數(shù)據(jù)的1級蝶形運(yùn)算;不斷重復(fù)數(shù)據(jù)的緩存、蝶形運(yùn)算和結(jié)果輸出過程,完成多幀數(shù)據(jù)的蝶形運(yùn)算;其中,m為蝶形運(yùn)算的級數(shù),n為fft運(yùn)算的點(diǎn)數(shù),n=4m;數(shù)據(jù)讀取和存儲采用循環(huán)尋址方式??蛇x地,所述順序輸入第一幀數(shù)據(jù),完成第一幀數(shù)據(jù)的1級蝶形運(yùn)算后,采用乒乓緩存順序輸入第二幀數(shù)據(jù),并完成第一幀數(shù)據(jù)的m級蝶形運(yùn)算;完成第一幀數(shù)據(jù)的蝶形運(yùn)算結(jié)果的順序輸出,同時進(jìn)行第二幀數(shù)據(jù)的緩存及蝶形運(yùn)算包括:順序輸入前3/4的第一幀數(shù)據(jù)至緩存模塊的第一部分,當(dāng)后1/4的第一幀數(shù)據(jù)到達(dá)基-4蝶形運(yùn)算器時,根據(jù)蝶形運(yùn)算圖直接與緩存模塊中的數(shù)據(jù)進(jìn)行蝶形運(yùn)算,并將1級蝶形運(yùn)算的結(jié)果保存至緩存模塊的第一部分;完成第一幀數(shù)據(jù)的m級蝶形運(yùn)算,基-4蝶形運(yùn)算器順序輸出第一幀數(shù)據(jù)的蝶形運(yùn)算結(jié)果的前1/4,后3/4的運(yùn)算結(jié)果保存至緩存模塊的第一部分;采用乒乓緩存順序輸入前3/4的第二幀數(shù)據(jù)至緩存模塊的第二部分,當(dāng)后1/4的第二幀數(shù)據(jù)到達(dá)基-4蝶形運(yùn)算器時,根據(jù)蝶形運(yùn)算圖直接與緩存模塊中的數(shù)據(jù)進(jìn)行蝶形運(yùn)算;緩存模塊的第一部分順序輸出第一幀數(shù)據(jù)的蝶形運(yùn)算結(jié)果的后3/4;相應(yīng)地,所述緩存模塊的數(shù)據(jù)讀取和存儲采用循環(huán)尋址方式??蛇x地,所述循環(huán)尋址方式包括:進(jìn)行1級蝶形運(yùn)算,將1級蝶形運(yùn)算結(jié)果按照循環(huán)尋址的方式保存在緩存模塊中;進(jìn)行中間級的蝶形運(yùn)算,按照循環(huán)尋址方式讀取緩存模塊中的數(shù)據(jù),將中間級蝶形運(yùn)算結(jié)果按照循環(huán)尋址的方式保存在緩存模塊中;進(jìn)行最后一級的蝶形運(yùn)算,按照循環(huán)尋址方式將蝶形運(yùn)算結(jié)果保存至緩存模塊中,依次讀取緩存模塊中的數(shù)據(jù)并順序輸出蝶形運(yùn)算結(jié)果??蛇x地,所述進(jìn)行1級蝶形運(yùn)算,將1級蝶形運(yùn)算結(jié)果按照循環(huán)尋址的方式保存在緩存模塊中包括:進(jìn)行1級蝶形運(yùn)算,將1級蝶形運(yùn)算結(jié)果分成16組,將所述16組蝶形運(yùn)算結(jié)果的第0-3組數(shù)據(jù)依次存入第一ram、第二ram、第三ram和第四ram;將所述16組蝶形運(yùn)算結(jié)果的第4-7組數(shù)據(jù)依次存入第二ram、第三ram、第四ram和第一ram;將所述16組蝶形運(yùn)算結(jié)果的第8-11組數(shù)據(jù)依次存入第三ram、第四ram、第一ram和第二 ram;將所述16組蝶形運(yùn)算結(jié)果的第12-15組數(shù)據(jù)依次存入第四ram、第一ram、第二ram和第三ram??蛇x的,所述進(jìn)行中間級的蝶形運(yùn)算,按照循環(huán)尋址方式讀取緩存模塊中的數(shù)據(jù),將中間級蝶形運(yùn)算結(jié)果按照循環(huán)尋址的方式保存在緩存模塊中包括:進(jìn)行中間級的蝶形運(yùn)算,按照循環(huán)尋址方式讀取緩存模塊中的數(shù)據(jù)輸入到基-4蝶形運(yùn)算器的第一端口、第二端口、第三端口和第四端口;按照循環(huán)尋址方式讀取緩存模塊中的數(shù)據(jù)輸入到基-4蝶形運(yùn)算器的第二端口、第三端口、第四端口和第一端口;按照循環(huán)尋址方式讀取緩存模塊中的數(shù)據(jù)輸入到基-4蝶形運(yùn)算器的第三端口、第四端口、第一端口和第二端口;按照循環(huán)尋址方式讀取緩存模塊的數(shù)據(jù)輸入到基-4蝶形運(yùn)算器的第四端口、第一端口、第二端口和第三端口;其中,每次轉(zhuǎn)換輸入端口的長度為1/4m×n;將每個中間級的蝶形運(yùn)算結(jié)果分為16組,按照循環(huán)尋址的方式保存在緩存模塊中??蛇x地,所述進(jìn)行最后一級的蝶形運(yùn)算,按照循環(huán)尋址方式將蝶形運(yùn)算結(jié)果保存至緩存模塊中,依次讀取緩存模塊中的數(shù)據(jù)并順序輸出蝶形運(yùn)算結(jié)果包括:進(jìn)行最后一級蝶形運(yùn)算,將基-4蝶形運(yùn)算器中第一端口的數(shù)據(jù)保存至第一ram,將基-4蝶形運(yùn)算器中第二端口的數(shù)據(jù)保存至第三ram,將基-4蝶形運(yùn)算器中第三端口的數(shù)據(jù)保存至第二ram,將基-4蝶形運(yùn)算器中第四端口的數(shù)據(jù)保存至第四ram;其中,所述緩存模塊進(jìn)行了多級數(shù)據(jù)劃分,直到每組數(shù)據(jù)的個數(shù)為1;依次讀取緩存模塊中的數(shù)據(jù)并順序輸出蝶形運(yùn)算結(jié)果。本發(fā)明提出的基于fpga的fft裝置及方法,采用基4蝶形運(yùn)算器,提高了運(yùn)算速度,采用循環(huán)尋址的方式在存儲中間數(shù)據(jù)時不需 要額外的ram,在數(shù)據(jù)順序輸出時不需要額外的ram,在dsp乘法器使用數(shù)量與應(yīng)用基-2蝶形運(yùn)算單元的fft裝置相當(dāng)?shù)那闆r下減少了存儲數(shù)據(jù)的ram的總深度,提高了對ram的利用率,節(jié)省了fpga的資源。附圖說明通過參考附圖會更加清楚的理解本發(fā)明的特征和優(yōu)點(diǎn),附圖是示意性的而不應(yīng)理解為對本發(fā)明進(jìn)行任何限制,在附圖中:圖1為應(yīng)用基-2蝶形運(yùn)算單元的fft裝置的結(jié)構(gòu)示意圖;圖2為本發(fā)明一個實(shí)施例的基于fpga的fft裝置的結(jié)構(gòu)示意圖;圖3為本發(fā)明一個實(shí)施例的基于fpga的fft裝置的原理圖;圖4為發(fā)明一個實(shí)施例的基于fpga的fft的方法示意圖。具體實(shí)施方式下面將結(jié)合附圖對本發(fā)明的實(shí)施例進(jìn)行詳細(xì)描述。圖2示出了本發(fā)明一個實(shí)施例的基于fpga的fft裝置的結(jié)構(gòu)示意圖。如圖2所示,本實(shí)施例的基于fpga的fft裝置包括:緩存模塊1、控制模塊2和基-4蝶形運(yùn)算器3;控制模塊2分別與緩存模塊1和基-4蝶形運(yùn)算器3相連,用于控制數(shù)據(jù)的輸入、輸出,用于控制數(shù)據(jù)以乒乓緩存的方式緩存至緩存模塊1中,用于控制數(shù)據(jù)以循環(huán)尋址的方式在基-4蝶形運(yùn)算器3中完成fft運(yùn)算;緩存模塊1用于初始輸入前3/4的數(shù)據(jù),輸出后3/4的運(yùn)算結(jié)果,并用于保存中間數(shù)據(jù);基-4蝶形運(yùn)算器2用于初始輸入后1/4的數(shù)據(jù),輸出前1/4的運(yùn)算結(jié)果。本實(shí)施例的基于fpga的fft裝置,采用基4蝶形運(yùn)算器,提高了運(yùn)算速度,采用循環(huán)尋址的方式在存儲中間數(shù)據(jù)時不需要額外的 ram,在數(shù)據(jù)順序輸出時不需要額外的ram,在dsp乘法器使用數(shù)量與應(yīng)用基-2蝶形運(yùn)算單元的fft裝置相當(dāng)?shù)那闆r下減少了存儲數(shù)據(jù)的ram的總深度,提高了對ram的利用率,節(jié)省了fpga的資源。在一種可選的實(shí)施方式中,所述緩存模塊為多個雙口ram或多個單口ram。在基于fpga的fft裝置中,緩存模塊為雙口ram可以達(dá)到使用ram的個數(shù)較少的效果。所述雙口ram的個數(shù)為7個或8個,由fft運(yùn)算的點(diǎn)數(shù)決定。所述多個ram的總深度小于等于fft運(yùn)算點(diǎn)數(shù)的兩倍。所述基-4蝶形運(yùn)算器的個數(shù)為1個或2個,由fft運(yùn)算的點(diǎn)數(shù)決定。圖3為本發(fā)明一個實(shí)施例的基于fpga的fft裝置的原理圖。如圖3所示,該fft裝置包括若干雙口ram和蝶形運(yùn)算器及選擇器,其中總ram深度最多為fft點(diǎn)數(shù)的2倍,寬度為數(shù)據(jù)寬度。蝶形運(yùn)算最多設(shè)置2個基-4蝶形運(yùn)算器,每8塊ram可在一周期內(nèi)并行輸出8個數(shù)據(jù),可充分利用兩個基-4蝶形運(yùn)算單元,提高運(yùn)算速度。圖4為發(fā)明一個實(shí)施例的基于fpga的fft的方法示意圖。如圖4所示,采用如上所述的基于fpga的fft裝置的fft方法,包括:s41:順序輸入第一幀數(shù)據(jù),完成第一幀數(shù)據(jù)的1級蝶形運(yùn)算后,采用乒乓緩存順序輸入第二幀數(shù)據(jù),并完成第一幀數(shù)據(jù)的m級蝶形運(yùn)算;s42:完成第一幀數(shù)據(jù)的蝶形運(yùn)算結(jié)果的順序輸出,同時進(jìn)行第二幀數(shù)據(jù)的緩存及蝶形運(yùn)算;s43:完成第二幀數(shù)據(jù)的m級蝶形運(yùn)算,同時采用乒乓緩存進(jìn)行第三幀數(shù)據(jù)的緩存,并開始進(jìn)行第三幀數(shù)據(jù)的1級蝶形運(yùn)算;s44:不斷重復(fù)數(shù)據(jù)的緩存、蝶形運(yùn)算和結(jié)果輸出過程,完成多幀數(shù)據(jù)的蝶形運(yùn)算;其中,m為蝶形運(yùn)算的級數(shù),n為fft運(yùn)算的點(diǎn)數(shù),n=4m;數(shù)據(jù) 讀取和存儲采用循環(huán)尋址方式。進(jìn)一步地,所述順序輸入第一幀數(shù)據(jù),完成第一幀數(shù)據(jù)的1級蝶形運(yùn)算后,采用乒乓緩存順序輸入第二幀數(shù)據(jù),并完成第一幀數(shù)據(jù)的m級蝶形運(yùn)算;完成第一幀數(shù)據(jù)的蝶形運(yùn)算結(jié)果的順序輸出,同時進(jìn)行第二幀數(shù)據(jù)的緩存及蝶形運(yùn)算包括:順序輸入前3/4的第一幀數(shù)據(jù)至緩存模塊的第一部分,當(dāng)后1/4的第一幀數(shù)據(jù)到達(dá)基-4蝶形運(yùn)算器時,根據(jù)蝶形運(yùn)算圖直接與緩存模塊中的數(shù)據(jù)進(jìn)行蝶形運(yùn)算,并將1級蝶形運(yùn)算的結(jié)果保存至緩存模塊的第一部分;完成第一幀數(shù)據(jù)的m級蝶形運(yùn)算,基-4蝶形運(yùn)算器順序輸出第一幀數(shù)據(jù)的蝶形運(yùn)算結(jié)果的前1/4,后3/4的運(yùn)算結(jié)果保存至緩存模塊的第一部分;采用乒乓緩存順序輸入前3/4的第二幀數(shù)據(jù)至緩存模塊的第二部分,當(dāng)后1/4的第二幀數(shù)據(jù)到達(dá)基-4蝶形運(yùn)算器時,根據(jù)蝶形運(yùn)算圖直接與緩存模塊中的數(shù)據(jù)進(jìn)行蝶形運(yùn)算;緩存模塊的第一部分順序輸出第一幀數(shù)據(jù)的蝶形運(yùn)算結(jié)果的后3/4;相應(yīng)地,所述緩存模塊的數(shù)據(jù)讀取和存儲采用循環(huán)尋址方式。下面以一個具體的例子說明該基于fpga的fft方法中的乒乓緩存過程。設(shè)一幀串行數(shù)據(jù)進(jìn)行fft運(yùn)算的點(diǎn)數(shù)為4096點(diǎn),采用基-4dif運(yùn)算,使用的ram為圖3中的ram1-14(需要說明的是,圖3中的ram1-14為單口ram,以下乒乓緩存的過程也是以單口ram為例進(jìn)行說明的;對于fft的點(diǎn)數(shù)為4096點(diǎn)的運(yùn)算,可以使用7個雙口ram,其過程和工作原理與使用單口ram類似),其過程如下:(1)對輸入串行數(shù)據(jù)幀0進(jìn)行緩存,緩存空間設(shè)置為運(yùn)算點(diǎn)數(shù)的3/4,即4096*0.75=3072,即緩存到ram6。(2)當(dāng)?shù)?073個數(shù)據(jù)到來時,根據(jù)蝶形運(yùn)算圖,直接與之前緩存ram中第1、1025、2049個數(shù)據(jù)進(jìn)行基-4蝶形運(yùn)算。并將計(jì)算結(jié)果存入緩存至ram1~ram8中。(3)當(dāng)?shù)?074個數(shù)據(jù)到來時,根據(jù)蝶形運(yùn)算圖,直接與緩存中第2、1026、2050個數(shù)據(jù)進(jìn)行基-4蝶形運(yùn)算,并將計(jì)算結(jié)果存入緩存至ram1~ram8中。(4)當(dāng)?shù)?075個數(shù)據(jù)到來時,根據(jù)蝶形運(yùn)算圖,直接與緩存中第3、1027、2051個數(shù)據(jù)進(jìn)行基-4蝶形運(yùn)算,并將計(jì)算結(jié)果存入緩存至ram1~ram8中。當(dāng)?shù)?076個數(shù)據(jù)到來時....當(dāng)?shù)?096個數(shù)據(jù)到來時,根據(jù)蝶形運(yùn)算圖,直接與緩存中第1024、2048、3072個數(shù)據(jù)進(jìn)行基-4蝶形運(yùn)算,并將計(jì)算結(jié)果存入緩存ram中。此時完成了第1級的所有蝶形運(yùn)算。完成1級運(yùn)算的數(shù)據(jù)存入的緩存ram為ram1~ram8。(5)對下一幀輸入數(shù)據(jù)幀1進(jìn)行緩存,緩存空間從ram9開始,此1024個時鐘周期內(nèi),可以利用2個基-4蝶形運(yùn)算單元對1~6緩存ram內(nèi)的數(shù)據(jù)繼續(xù)進(jìn)行處理,此時1個時鐘周期讀出緩存器內(nèi)8點(diǎn)數(shù)據(jù)進(jìn)行蝶形運(yùn)算,在1024周期內(nèi)共完成1024*8=8192點(diǎn),即8192/4096=2級蝶形運(yùn)算。此時將3級運(yùn)算完的數(shù)據(jù)仍存回ram1~ram8,實(shí)現(xiàn)原址運(yùn)算。(6)繼續(xù)對幀1數(shù)據(jù)進(jìn)行緩存,緩存空間為ram11和ram12,此1024個時鐘周期內(nèi),可以利用2個基-4蝶形運(yùn)算單元對1~6緩存ram內(nèi)的數(shù)據(jù)繼續(xù)進(jìn)行處理,此時1個時鐘周期讀出緩存器內(nèi)8點(diǎn)數(shù)據(jù)進(jìn)行蝶形運(yùn)算,在1024周期內(nèi)共完成1024*8=8192點(diǎn),即8192/4096=2級蝶形運(yùn)算。此時將5級運(yùn)算完的數(shù)據(jù)仍存回ram1~ram8,實(shí)現(xiàn)原址運(yùn)算。(7)繼續(xù)對幀1數(shù)據(jù)進(jìn)行緩存,緩存空間為ram13和ram14, 此1024個時鐘周期內(nèi),可以利用1個基-4蝶形運(yùn)算單元對7~14緩存ram內(nèi)的數(shù)據(jù)繼續(xù)進(jìn)行處理,此時1個時鐘周期讀出緩存器內(nèi)4點(diǎn)數(shù)據(jù)進(jìn)行蝶形運(yùn)算,在1024周期內(nèi)共完成1024*4=4096點(diǎn),即4096/4096=1級蝶形運(yùn)算。此時將6級運(yùn)算完的數(shù)據(jù)仍存回ram1~ram8,實(shí)現(xiàn)原址運(yùn)算。由于已經(jīng)完成了最后一級的運(yùn)算,在計(jì)算過程中,可以將6級運(yùn)算后的結(jié)果直接輸出,當(dāng)所有計(jì)算完成時,結(jié)果輸出1/4。(8)對幀1進(jìn)行1級運(yùn)算,將運(yùn)算結(jié)果存入ram1~2、ram9~14,同時ram3輸出上一幀幀0的運(yùn)算結(jié)果。(9)對ram3、4進(jìn)行緩存,緩存數(shù)據(jù)為下一幀幀2數(shù)據(jù),同時ram5輸出上一幀的運(yùn)算結(jié)果,此時幀1數(shù)據(jù)利用兩個蝶形運(yùn)算器完成3級蝶形運(yùn)算。(10)對ram5、6進(jìn)行緩存,同時ram7開始幀0數(shù)據(jù)輸出,幀1數(shù)據(jù)完成5級運(yùn)算。(11)對ram7、8進(jìn)行緩存,幀1數(shù)據(jù)完成6級運(yùn)算并輸出。進(jìn)一步地,所述循環(huán)尋址方式包括:進(jìn)行1級蝶形運(yùn)算,將1級蝶形運(yùn)算結(jié)果按照循環(huán)尋址的方式保存在緩存模塊中;進(jìn)行中間級的蝶形運(yùn)算,按照循環(huán)尋址方式讀取緩存模塊中的數(shù)據(jù),將中間級蝶形運(yùn)算結(jié)果按照循環(huán)尋址的方式保存在緩存模塊中;進(jìn)行最后一級的蝶形運(yùn)算,按照循環(huán)尋址方式將蝶形運(yùn)算結(jié)果保存至緩存模塊中,依次讀取緩存模塊中的數(shù)據(jù)并順序輸出蝶形運(yùn)算結(jié)果。具體地,所述進(jìn)行1級蝶形運(yùn)算,將1級蝶形運(yùn)算結(jié)果按照循環(huán)尋址的方式保存在緩存模塊中包括:進(jìn)行1級蝶形運(yùn)算,將1級蝶形運(yùn)算結(jié)果分成16組,將所述16組蝶形運(yùn)算結(jié)果的第0-3組數(shù)據(jù)依次存入第一ram、第二ram、第三ram 和第四ram;將所述16組蝶形運(yùn)算結(jié)果的第4-7組數(shù)據(jù)依次存入第二ram、第三ram、第四ram和第一ram;將所述16組蝶形運(yùn)算結(jié)果的第8-11組數(shù)據(jù)依次存入第三ram、第四ram、第一ram和第二ram;將所述16組蝶形運(yùn)算結(jié)果的第12-15組數(shù)據(jù)依次存入第四ram、第一ram、第二ram和第三ram。具體地,所述進(jìn)行中間級的蝶形運(yùn)算,按照循環(huán)尋址方式讀取緩存模塊中的數(shù)據(jù),將中間級蝶形運(yùn)算結(jié)果按照循環(huán)尋址的方式保存在緩存模塊中包括:進(jìn)行中間級的蝶形運(yùn)算,按照循環(huán)尋址方式讀取緩存模塊中的數(shù)據(jù)輸入到基-4蝶形運(yùn)算器的第一端口、第二端口、第三端口和第四端口;按照循環(huán)尋址方式讀取緩存模塊中的數(shù)據(jù)輸入到基-4蝶形運(yùn)算器的第二端口、第三端口、第四端口和第一端口;按照循環(huán)尋址方式讀取緩存模塊中的數(shù)據(jù)輸入到基-4蝶形運(yùn)算器的第三端口、第四端口、第一端口和第二端口;按照循環(huán)尋址方式讀取緩存模塊的數(shù)據(jù)輸入到基-4蝶形運(yùn)算器的第四端口、第一端口、第二端口和第三端口;其中,每次轉(zhuǎn)換輸入端口的長度為1/4m×n;將每個中間級的蝶形運(yùn)算結(jié)果分為16組,按照循環(huán)尋址的方式保存在緩存模塊中。具體地,所述進(jìn)行最后一級的蝶形運(yùn)算,按照循環(huán)尋址方式將蝶形運(yùn)算結(jié)果保存至緩存模塊中,依次讀取緩存模塊中的數(shù)據(jù)并順序輸出蝶形運(yùn)算結(jié)果包括:進(jìn)行最后一級蝶形運(yùn)算,將基-4蝶形運(yùn)算器中第一端口的數(shù)據(jù)保存至第一ram,將基-4蝶形運(yùn)算器中第二端口的數(shù)據(jù)保存至第三ram,將基-4蝶形運(yùn)算器中第三端口的數(shù)據(jù)保存至第二ram,將基-4蝶形運(yùn)算器中第四端口的數(shù)據(jù)保存至第四ram;其中,所述緩存模塊進(jìn)行了多級數(shù)據(jù)劃分,直到每組數(shù)據(jù)的個數(shù)為1;依次讀取緩存模塊中的數(shù)據(jù)并順序輸出蝶形運(yùn)算結(jié)果。下面以一個具體的例子說明基于fpga的fft方法中的循環(huán)尋址的過程。(此次介紹的是使用一個蝶形運(yùn)算器的方法,與兩個蝶形運(yùn)算器方法一致)(1)將n點(diǎn)數(shù)據(jù)進(jìn)行順序輸入到ram中,直到3/4數(shù)據(jù)輸入到ram后,開始1級尋址計(jì)算。(2)1級尋址:ram1~3按照地址0~(1/4*n-1)依次讀出數(shù)據(jù)并作為蝶形運(yùn)算器的前3個輸入,蝶形運(yùn)算的第4個輸入為直接過來的數(shù)據(jù)。經(jīng)過計(jì)算后將蝶形運(yùn)算器輸出端口1~4的第0~(1/16*n-1)個數(shù)據(jù)依次存入ram1、2、3、4,序號(1/16*n)~(1/8*n-1)依次存入ram2、3、4、1,序號(1/8*n)~(3/16*n-1)依次存入ram3、4、1、2,序號(3/16*n)~(1/4*n-1)依次存入ram4、1、2、3。(3)2級尋址:ram1讀地址0~(1/16*n-1)、(1/16*n)~(1/8*n-1)、(1/8*n)~(3/16*n-1)、(3/16*n)~(1/4*n-1)數(shù)據(jù)并分別作為蝶形運(yùn)輸器輸入端口1、2、3、4的數(shù)據(jù)。同時ram2讀地址(1/16*n)~(1/8*n-1)、(1/8*n)~(3/16*n-1)、(3/16*n)~(1/4*n-1)、0~(1/16*n-1)的數(shù)據(jù)并作為蝶形運(yùn)輸器輸入端口2、3、4、1的數(shù)據(jù)。ram3讀地址(1/8*n)~(3/16*n-1)、(3/16*n)~(1/4*n-1)、0~(1/16*n-1)、(1/16*n)~(1/8*n-1)數(shù)據(jù)并作為蝶形運(yùn)算器輸入端口3、4、1、2的數(shù)據(jù)。ram4讀地址(3/16*n)~(1/4*n-1)、0~(1/16*n-1)、(1/16*n)~(1/8*n-1)、(1/8*n)~(3/16*n-1)數(shù)據(jù)并作為蝶形運(yùn)輸器輸入端口4、1、2、3的數(shù)據(jù)。經(jīng)過計(jì)算后將蝶形運(yùn)算器輸出端口1~4的第0~(1/64*n-1)個數(shù)據(jù)依次存入ram1、2、3、4,序號(1/64*n)~(1/32*n-1)依次存入ram2、3、4、1,序號(1/32*n)~(3/64*n-1)依次存入ram3、4、1、2,序號(3/64*n)~(1/16*n-1)依次存入ram4、1、2、3。同樣對剩下的數(shù)做相同 操作,即序號(1/16*n)~(5/64*n-1)數(shù)據(jù)依次存入ram1、2、3、4,序號(5/64*n)~(6/64*n-1)依次存入ram2、3、4、1,序號(6/64*n)~(7/64*n-1)依次存入ram3、4、1、2,序號(7/64*n)~(8/64*n-1)依次存入ram4、1、2、3....(4)3級尋址:ram1讀地址0~(1/64*n-1)、(1/64*n)~(2/64*n-1)、(2/64*n)~(3/64*n-1)、(3/64*n)~(4/64*n-1)數(shù)據(jù)并分別作為蝶形運(yùn)輸器輸入端口1、2、3、4的數(shù)據(jù)。同時ram2讀地址(4/64*n)~(5/64*n-1)、(5/64*n)~(6/64*n-1)、(6/64*n)~(7/64*n-1)、(7/64*n)~(8/64*n-1)數(shù)據(jù)并分別作為蝶形運(yùn)輸器輸入端口2、3、4、1的數(shù)據(jù)。ram3讀地址(8/64*n)~(9/64*n-1)、(9/64*n)~(10/64*n-1)、(10/64*n)~(11/64*n-1)、(11/64*n)~(12/64*n-1)數(shù)據(jù)并分別作為蝶形運(yùn)輸器輸入端口3、4、1、2的數(shù)據(jù)。ram4讀地址(12/64*n)~(13/64*n-1)、(13/64*n)~(14/64*n-1)、(14/64*n)~(15/64*n-1)、(15/64*n)~(16/64*n-1)數(shù)據(jù)并分別作為蝶形運(yùn)輸器輸入端口3、4、1、2的數(shù)據(jù)。同樣對剩下的地址數(shù)據(jù)做同樣操作。經(jīng)過計(jì)算后將蝶形運(yùn)算器輸出端口1~4的第0~(1/256*n-1)個數(shù)據(jù)依次存入ram1、2、3、4,序號(1/256*n)~(2/256*n-1)依次存入ram2、3、4、1,序號(2/256*n)~(3/256*n-1)依次存入ram3、4、1、2,序號(3/256*n)~(4/256*n-1)依次存入ram4、1、2、3。同樣對剩下的數(shù)做相同操作,即序號(4/256*n)~(5/256*n-1)數(shù)據(jù)依次存入ram1、2、3、4,序號(5/256*n)~(6/256*n-1)依次存入ram2、3、4、1,序號(6/256*n)~(7/256*n-1)依次存入ram3、4、1、2,序號(7/256*n)~(8/256*n-1)依次存入ram4、1、2、3....(5)4、5、6、7級尋址....(6)最后一級尋址:首先對ram1依次讀取地址0、2/16*n、3/16*n、1/16*n,輸出的數(shù)據(jù)作為蝶形運(yùn)算器的端口1輸入,同時 對ram2依次讀取地址(a+a1..)、(2/16*n+a+a1..)、(3/16*n+a+a1..)、(1/16*n+a+a1..),輸出的數(shù)據(jù)作為蝶形運(yùn)算器的端口2輸入,對ram3依次讀取地址2*(a+a1...)、[2/16*n+2*(a+a1...)]、[3/16*n+2*(a+a1...)]、[1/16*n+2*(a+a1...)],輸出的數(shù)據(jù)作為蝶形運(yùn)算器的端口3輸入,對ram4依次讀取地址3*(a+a1...)、[2/16*n+3*(a+a1...)]、[3/16*n+3*(a+a1...)]、[1/16*n+3*(a+a1...)],輸出的數(shù)據(jù)作為蝶形運(yùn)算器的端口4輸入。將端口1的計(jì)算結(jié)果直接作為最終輸出數(shù)據(jù)輸出,將端口2的數(shù)據(jù)原址存入ram3,將端口3的數(shù)據(jù)原址存入ram2,將端口4的數(shù)據(jù)原址存入ram4,接下來繼續(xù)對ram1進(jìn)行讀操作,讀取地址為2/64*n、(2/16*n+2/64*n)、(3/16*n+2/64*n)、(1/16*n+2/64*n),對ram2讀取地址為(2/64*n+a+a1...)、[(2/16*n+2/64*n)+a+a1...]、[(3/16*n+2/64*n)+a+a1...]、[(1/16*n+2/64*n)+a+a1...],對ram3讀取地址為[2/64*n+2*(a+a1...)]、[(2/16*n+2/64*n)+2*(a+a1...)]、[(3/16*n+2/64*n)+2*(a+a1...)]、[(1/16*n+2/64*n)+2*(a+a1...)],對ram4讀取地址為[2/64*n+3*(a+a1...)]、[(2/16*n+2/64*n)+3*(a+a1...)]、[(3/16*n+2/64*n)+3*(a+a1...)]、[(1/16*n+2/64*n)+3*(a+a1...)],同樣輸出的數(shù)據(jù)作為蝶形運(yùn)算器的端口4輸入。將端口1的計(jì)算結(jié)果直接作為最終輸出數(shù)據(jù)輸出,將端口2的數(shù)據(jù)原址存入ram3,將端口3的數(shù)據(jù)原址存入ram2,將端口4的數(shù)據(jù)原址存入ram4...其中a,a1...代表級,如最后一級為3級運(yùn)算,即64點(diǎn),那么a=4,a1=1。如果最后一級為4級運(yùn)算,即256點(diǎn),那么a=16,a1=4,a2=1。如果最后一級為m級運(yùn)算,即4^m點(diǎn),那么a=4^m/16,a1=4^m/64...am-1=1。(7)當(dāng)完成最后一級運(yùn)算后,1/4*n的數(shù)據(jù)已經(jīng)順序輸出完畢,接下來依次輸出ram2~4的數(shù)據(jù)即可??偨Y(jié)尋址不難發(fā)現(xiàn):對第一級的數(shù)據(jù)可以從各個ram依次讀出并順序輸入到蝶形運(yùn)算的4個端口進(jìn)行運(yùn)算。運(yùn)算的輸出數(shù)據(jù)分成16組(每個蝶形運(yùn)算器同時輸出4組數(shù)據(jù),每個蝶形運(yùn)算器輸出端口產(chǎn)生4組數(shù)據(jù)),依次存入ram1、2、3、4,ram2、3、4、1,ram3、4、1、2,ram4、1、2、3中。對中間級的數(shù)據(jù)尋址時,ram1始終從地址0開始讀出,并且將讀出的數(shù)據(jù)分別輸入到蝶形運(yùn)算器的輸入端口1、2、3、4,依次循環(huán)。每次轉(zhuǎn)換輸入端口的數(shù)據(jù)長度依次為1級1/4*n,2級1/16*n..m級1/4^m*n,其中n=4^m。ram2起始讀地址為a1+a2...,若為1級計(jì)算,a1=1/4*n,a2,a3...=0,若為2級運(yùn)算,a1=1/4*n,a2=1/16*n,a3...=0,若為m級計(jì)算,a1=1/4*n,a2=1/16*n...am=1/4^m*n,之后順序讀出地址,地址在讀到最大值時返回到地址0繼續(xù)尋址,知道完成整個地址空間深度的一次循環(huán)。ram3、4起始讀地址分別為2(a1+a2...)和3(a1+a2...),其它同ram2操作。當(dāng)?shù)芜\(yùn)算完畢開始寫入時,與讀地址位置一致,實(shí)現(xiàn)原址存儲,需要注意的是,每個蝶形運(yùn)算器輸出端口的每4組數(shù)據(jù)需要放在不同的ram中,每組的數(shù)據(jù)長度根據(jù)級數(shù)定義,1級運(yùn)算輸出為1/16*n,2級運(yùn)算輸出為1/64*n....端口1的數(shù)據(jù)存儲位置依次為ram1、2、3、4循環(huán),端口2為ram2、3、4、1循環(huán),端口3為ram3、4、1、2循環(huán),端口4為ram4、1、2、3循環(huán)。對最后1級的數(shù)據(jù)尋址時,根據(jù)基4蝶形運(yùn)算圖最終輸出順序的特點(diǎn),尋址規(guī)律如下:第一步,將ram內(nèi)的數(shù)按照地址分成4組,稱為1級組。每組的深度為1/16*n,編號為組1~4,然后ram1按照0、2/16*n、3/16*n、1/16*n進(jìn)行尋址,即順序?yàn)榻M1、組3、組2、組4的首地址,其它ram在此地址基礎(chǔ)上加上a1+a2...即可。第二步,對每個1級組再分4組,稱為2級組,每組的深度為1/64*n,編號為組1~4,然后ram1按照組1、組3、組2、組4的地址尋址, 其它ram2在此基礎(chǔ)上加上a1+a2...即可。(第一步中已經(jīng)對二級組1尋址)第三步,對每個2級組再分4組....直到每組數(shù)據(jù)的個數(shù)為1停止分組。經(jīng)過蝶形運(yùn)算后,輸出端口1的數(shù)據(jù)直接送至總模塊的輸出端口,端口2的數(shù)據(jù)存入ram3中,端口3的數(shù)據(jù)存入ram2中,端口4的數(shù)據(jù)存入ram4中。當(dāng)?shù)芜\(yùn)算完畢后,1/4*n的數(shù)據(jù)輸出完畢,此時再按順序依次讀取ram2~4的數(shù)據(jù)輸出。根據(jù)以上過程,本實(shí)施例的基于fpga的fft方法采用基4蝶形運(yùn)算器,提高了運(yùn)算速度,采用乒乓緩存、循環(huán)尋址的方式實(shí)現(xiàn)了數(shù)據(jù)的原址計(jì)算,在存儲中間數(shù)據(jù)時不需要額外的ram,在數(shù)據(jù)順序輸出時不需要額外的ram,(對比表2和表3可知)基-2蝶形運(yùn)算單元的fft裝置相當(dāng)?shù)那闆r下減少了存儲數(shù)據(jù)的ram的總深度,提高了對ram的利用率,節(jié)省了fpga的資源。表3統(tǒng)計(jì)了存儲數(shù)據(jù)占用的ram總深度和進(jìn)行運(yùn)算占用的dsp乘法器的數(shù)量,其中存儲ram的位寬為數(shù)據(jù)位寬,如下:表3應(yīng)用基-4蝶形運(yùn)算器的fft裝置占用的資源量本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可以為系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明的裝置可采用完全硬件實(shí)施例的形式。本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的設(shè)備(系統(tǒng))的流程圖和/或方框圖來描述的。盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明 范圍的所有變更和修改。本發(fā)明提出的基于fpga的fft裝置及方法,采用基4蝶形運(yùn)算器,提高了運(yùn)算速度,采用循環(huán)尋址的方式在存儲中間數(shù)據(jù)時不需要額外的ram,在數(shù)據(jù)順序輸出時不需要額外的ram,(對比表2和表3可知)基-2蝶形運(yùn)算單元的fft裝置相當(dāng)?shù)那闆r下減少了存儲數(shù)據(jù)的ram的總深度,提高了對ram的利用率,節(jié)省了fpga的資源。雖然結(jié)合附圖描述了本發(fā)明的實(shí)施方式,但是本領(lǐng)域技術(shù)人員可以在不脫離本發(fā)明的精神和范圍的情況下做出各種修改和變型,這樣的修改和變型均落入由所附權(quán)利要求所限定的范圍之內(nèi)。當(dāng)前第1頁12
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1