新聞中心

EEPW首頁 > 汽車電子 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的專用信號(hào)處理器設(shè)計(jì)和實(shí)現(xiàn)

基于FPGA的專用信號(hào)處理器設(shè)計(jì)和實(shí)現(xiàn)

作者:■ 北京理工大學(xué)電子工程系 杜兆林 吳嗣亮 時(shí)間:2005-04-28 來源:eaw 收藏

摘 要:本文介紹基于、用VHDL語言編程實(shí)現(xiàn)矢量脫靶量測量專用信號(hào)處理器的方法。有效利用片內(nèi)硬件資源,無需外圍電路,高度集成,實(shí)現(xiàn)了對(duì)復(fù)數(shù)數(shù)據(jù)進(jìn)行去直流、加窗、和求模平方運(yùn)算。
關(guān)鍵詞:;

前言
矢量脫靶量測量系統(tǒng)中,信號(hào)處理電路模塊的主要任務(wù)是完成目標(biāo)檢測、數(shù)據(jù)存儲(chǔ)以及給其它單元控制信號(hào)。系統(tǒng)所進(jìn)行的目標(biāo)檢測需要計(jì)算信號(hào)的功率譜,所以先要對(duì)采集到的多通道(8路)數(shù)據(jù)按512點(diǎn)為一幀,作FFT處理,得到其頻譜。為了監(jiān)測接收機(jī)工作狀態(tài),需要在頻域用恒虛警的方法,判斷各路接收通道是否正常。除此之外,還需要對(duì)數(shù)據(jù)進(jìn)行去直流、加窗的初始化處理,F(xiàn)FT結(jié)果再進(jìn)行求模平方、累加運(yùn)算,結(jié)果以FIFO輸出。
選擇用FPGA完成上述功能有諸多優(yōu)點(diǎn)。首先,F(xiàn)PGA實(shí)現(xiàn)FFT運(yùn)算是硬件處理,采用多個(gè)硬件乘法器、加法器,運(yùn)算周期短,加上內(nèi)部集成的大量塊RAM可高速訪問,所以速度大大提高。其次,F(xiàn)PGA片內(nèi)邏輯資源豐富,可用的寄存器、鎖存器、查找表和多路數(shù)據(jù)選擇器等,能夠?qū)崿F(xiàn)硬件流水結(jié)構(gòu)。這樣多種運(yùn)算可同時(shí)流水進(jìn)行,減少了中間等待時(shí)間,整體速度大幅提高。再次,用硬件處理數(shù)據(jù)時(shí)延固定,可準(zhǔn)確預(yù)測。
當(dāng)然,F(xiàn)PGA也有不足。在FPGA內(nèi)設(shè)定的數(shù)據(jù)長度相對(duì)固定,不夠靈活,如果為實(shí)現(xiàn)高精度而采用浮點(diǎn)運(yùn)算,則設(shè)計(jì)復(fù)雜,速度會(huì)降低,而且硬件開銷大。用“塊浮點(diǎn)”算法,可以很好地兼顧高速和高精度,并且硬件實(shí)現(xiàn)和控制相對(duì)簡單,彌補(bǔ)了FPGA這一不足。

各運(yùn)算單元算法和實(shí)現(xiàn)
如圖1所示,信號(hào)處理器共包括4大部分:去直流、加窗的預(yù)處理單元,F(xiàn)FT運(yùn)算單元,模平方累加與檢測單元,F(xiàn)IFO輸出單元。每個(gè)單元都分配有存儲(chǔ)器來存儲(chǔ)中間結(jié)果,它們是由FPGA中的塊RAM生成的,不占用邏輯資源,而且訪問快速。
預(yù)處理單元
如圖2所示,預(yù)處理單元首先讀入控制單元,在收到啟動(dòng)信號(hào)后,產(chǎn)生讀信號(hào)和讀地址,讀取外部數(shù)據(jù)到內(nèi)部存儲(chǔ)器R、I,同時(shí)數(shù)據(jù)送入累加單元求和,移位后得到平均值,也就是直流分量。然后,在讀取數(shù)據(jù)完畢時(shí),讀入控制單元啟動(dòng)加窗運(yùn)算控制單元,讀取原始數(shù)據(jù)和窗函數(shù),這時(shí)原始數(shù)據(jù)減掉直流分量后,與窗函數(shù)相乘,就得到去直流和加窗后的結(jié)果,為FFT單元作好準(zhǔn)備。
FFT運(yùn)算單元
如圖3所示,F(xiàn)FT運(yùn)算單元主要包括、讀寫控制、塊浮點(diǎn)運(yùn)算、數(shù)據(jù)存儲(chǔ)R、I和旋轉(zhuǎn)因子存儲(chǔ)單元。以下分別介紹。
單元
時(shí)域抽樣(DIT)的基-2蝶型運(yùn)算算法可以表示為:
 
其中復(fù)乘運(yùn)算可表示為:

 
由蝶形運(yùn)算算法公式可以看出一個(gè)基-2蝶形運(yùn)算要進(jìn)行一個(gè)復(fù)乘、兩個(gè)復(fù)加。由復(fù)乘運(yùn)算公式可知:若在一個(gè)時(shí)鐘周期內(nèi)實(shí)現(xiàn)復(fù)乘,需4個(gè)實(shí)數(shù)乘法器和2個(gè)實(shí)數(shù)加法器。因?yàn)檫@里采用的是Xilinx公司的VirtexII系列FPGA,內(nèi)部有硬件乘法器,不占用邏輯資源,因此為了簡化結(jié)構(gòu)和提高系統(tǒng)的穩(wěn)定性,采用4乘法器的直接實(shí)現(xiàn)結(jié)構(gòu)(見圖4)。
讀寫控制
FFT讀寫控制單元負(fù)責(zé)產(chǎn)生FFT運(yùn)算過程、各個(gè)階段RAM的讀寫信號(hào)和地址信號(hào),以保證各級(jí)運(yùn)算數(shù)據(jù)的正確調(diào)用和存儲(chǔ)。此外,還需要協(xié)調(diào)各部分的時(shí)序關(guān)系。因?yàn)榘磿r(shí)間抽取的FFT是混序,在實(shí)際運(yùn)算中,直接將輸入數(shù)據(jù)按原位運(yùn)算要求的“亂序”存放是很不方便的。因此總是按自然順序?qū)⑤斎胄蛄写嫒氪鎯?chǔ)單元,再通過變址運(yùn)算將自然順序變換成按時(shí)間抽取的FFT算法要求的順序。變址過程可以用程序安排加以實(shí)現(xiàn)。計(jì)數(shù)器順序計(jì)數(shù)(0~511),將計(jì)數(shù)器的最低位(第‘0’位)取反后,對(duì)應(yīng)位進(jìn)行交換,就能產(chǎn)生每一級(jí)的數(shù)據(jù)讀取地址。同樣的,旋轉(zhuǎn)因子的地址是由計(jì)數(shù)器地址交換后,特定位置零產(chǎn)生的。由于采用原位運(yùn)算,每級(jí)蝶形運(yùn)算的寫地址和抽取地址完全相同。
塊浮點(diǎn)
塊浮點(diǎn)由“溢出檢測”和“指數(shù)累加器”組成。如果輸入蝶形單元中的數(shù)據(jù)的實(shí)部和虛部是16比特,那么輸出數(shù)據(jù)實(shí)部和虛部最大溢出是2比特。所以,每一級(jí)蝶形運(yùn)算中,“溢出檢測”根據(jù)輸出數(shù)據(jù)的高三位(最高位是符號(hào)位)就可以判斷溢出情況,由此決定下一級(jí)蝶形運(yùn)算時(shí),如何選擇上一級(jí)18位結(jié)果數(shù)據(jù)中的16位進(jìn)入蝶形單元。溢出的位數(shù)由指數(shù)累加器累加,最后決定FFT運(yùn)算結(jié)果的指數(shù)位。
數(shù)據(jù)存儲(chǔ)
FFT運(yùn)算單元先讀取預(yù)處理結(jié)果的實(shí)部、虛部,送入蝶形運(yùn)算單元。第一級(jí)結(jié)果也會(huì)分成實(shí)部、虛部存儲(chǔ)在本單元的數(shù)據(jù)存儲(chǔ)器中。此后每一級(jí)都進(jìn)行原位操作,最終的結(jié)果也存于這兩片RAM中。旋轉(zhuǎn)因子事先單獨(dú)存儲(chǔ)在一片512



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉