基于FPGA的專用信號處理器設(shè)計和實現(xiàn)
摘 要:本文介紹基于FPGA、用VHDL語言編程實現(xiàn)矢量脫靶量測量專用信號處理器的方法。有效利用FPGA片內(nèi)硬件資源,無需外圍電路,高度集成,實現(xiàn)了對復(fù)數(shù)數(shù)據(jù)進行去直流、加窗、512點FFT和求模平方運算。
關(guān)鍵詞:512點FFT;FPGA;蝶形運算
前言
矢量脫靶量測量系統(tǒng)中,信號處理電路模塊的主要任務(wù)是完成目標(biāo)檢測、數(shù)據(jù)存儲以及給其它單元控制信號。系統(tǒng)所進行的目標(biāo)檢測需要計算信號的功率譜,所以先要對采集到的多通道(8路)數(shù)據(jù)按512點為一幀,作FFT處理,得到其頻譜。為了監(jiān)測接收機工作狀態(tài),需要在頻域用恒虛警的方法,判斷各路接收通道是否正常。除此之外,還需要對數(shù)據(jù)進行去直流、加窗的初始化處理,F(xiàn)FT結(jié)果再進行求模平方、累加運算,結(jié)果以FIFO輸出。
選擇用FPGA完成上述功能有諸多優(yōu)點。首先,F(xiàn)PGA實現(xiàn)FFT運算是硬件處理,采用多個硬件乘法器、加法器,運算周期短,加上內(nèi)部集成的大量塊RAM可高速訪問,所以速度大大提高。其次,F(xiàn)PGA片內(nèi)邏輯資源豐富,可用的寄存器、鎖存器、查找表和多路數(shù)據(jù)選擇器等,能夠?qū)崿F(xiàn)硬件流水結(jié)構(gòu)。這樣多種運算可同時流水進行,減少了中間等待時間,整體速度大幅提高。再次,用硬件處理數(shù)據(jù)時延固定,可準(zhǔn)確預(yù)測。
當(dāng)然,F(xiàn)PGA也有不足。在FPGA內(nèi)設(shè)定的數(shù)據(jù)長度相對固定,不夠靈活,如果為實現(xiàn)高精度而采用浮點運算,則設(shè)計復(fù)雜,速度會降低,而且硬件開銷大。用“塊浮點”算法,可以很好地兼顧高速和高精度,并且硬件實現(xiàn)和控制相對簡單,彌補了FPGA這一不足。
各運算單元算法和實現(xiàn)
如圖1所示,信號處理器共包括4大部分:去直流、加窗的預(yù)處理單元,F(xiàn)FT運算單元,模平方累加與檢測單元,F(xiàn)IFO輸出單元。每個單元都分配有存儲器來存儲中間結(jié)果,它們是由FPGA中的塊RAM生成的,不占用邏輯資源,而且訪問快速。
預(yù)處理單元
如圖2所示,預(yù)處理單元首先讀入控制單元,在收到啟動信號后,產(chǎn)生讀信號和讀地址,讀取外部數(shù)據(jù)到內(nèi)部存儲器R、I,同時數(shù)據(jù)送入累加單元求和,移位后得到平均值,也就是直流分量。然后,在讀取數(shù)據(jù)完畢時,讀入控制單元啟動加窗運算控制單元,讀取原始數(shù)據(jù)和窗函數(shù),這時原始數(shù)據(jù)減掉直流分量后,與窗函數(shù)相乘,就得到去直流和加窗后的結(jié)果,為FFT單元作好準(zhǔn)備。
FFT運算單元
如圖3所示,F(xiàn)FT運算單元主要包括蝶形運算、讀寫控制、塊浮點運算、數(shù)據(jù)存儲R、I和旋轉(zhuǎn)因子存儲單元。以下分別介紹。
蝶形運算單元
時域抽樣(DIT)的基-2蝶型運算算法可以表示為:
其中復(fù)乘運算可表示為:
由蝶形運算算法公式可以看出一個基-2蝶形運算要進行一個復(fù)乘、兩個復(fù)加。由復(fù)乘運算公式可知:若在一個時鐘周期內(nèi)實現(xiàn)復(fù)乘,需4個實數(shù)乘法器和2個實數(shù)加法器。因為這里采用的是Xilinx公司的VirtexII系列FPGA,內(nèi)部有硬件乘法器,不占用邏輯資源,因此為了簡化結(jié)構(gòu)和提高系統(tǒng)的穩(wěn)定性,采用4乘法器的直接實現(xiàn)結(jié)構(gòu)(見圖4)。
讀寫控制
FFT讀寫控制單元負(fù)責(zé)產(chǎn)生FFT運算過程、各個階段RAM的讀寫信號和地址信號,以保證各級運算數(shù)據(jù)的正確調(diào)用和存儲。此外,還需要協(xié)調(diào)各部分的時序關(guān)系。因為按時間抽取的FFT是混序,在實際運算中,直接將輸入數(shù)據(jù)按原位運算要求的“亂序”存放是很不方便的。因此總是按自然順序?qū)⑤斎胄蛄写嫒氪鎯卧?,再通過變址運算將自然順序變換成按時間抽取的FFT算法要求的順序。變址過程可以用程序安排加以實現(xiàn)。計數(shù)器順序計數(shù)(0~511),將計數(shù)器的最低位(第‘0’位)取反后,對應(yīng)位進行交換,就能產(chǎn)生每一級的數(shù)據(jù)讀取地址。同樣的,旋轉(zhuǎn)因子的地址是由計數(shù)器地址交換后,特定位置零產(chǎn)生的。由于采用原位運算,每級蝶形運算的寫地址和抽取地址完全相同。
塊浮點
塊浮點由“溢出檢測”和“指數(shù)累加器”組成。如果輸入蝶形單元中的數(shù)據(jù)的實部和虛部是16比特,那么輸出數(shù)據(jù)實部和虛部最大溢出是2比特。所以,每一級蝶形運算中,“溢出檢測”根據(jù)輸出數(shù)據(jù)的高三位(最高位是符號位)就可以判斷溢出情況,由此決定下一級蝶形運算時,如何選擇上一級18位結(jié)果數(shù)據(jù)中的16位進入蝶形單元。溢出的位數(shù)由指數(shù)累加器累加,最后決定FFT運算結(jié)果的指數(shù)位。
數(shù)據(jù)存儲
FFT運算單元先讀取預(yù)處理結(jié)果的實部、虛部,送入蝶形運算單元。第一級結(jié)果也會分成實部、虛部存儲在本單元的數(shù)據(jù)存儲器中。此后每一級都進行原位操作,最終的結(jié)果也存于這兩片RAM中。旋轉(zhuǎn)因子事先單獨存儲在一片512
評論