本文所采用的是定點壓縮結(jié)構(gòu)。該結(jié)構(gòu)相對于全精度無壓縮結(jié)構(gòu),能夠大大減少FPGA內(nèi)部資源Xtreme DSP Slices和塊RAM的使用,而相對于塊浮點型,可靈活調(diào)節(jié)壓縮比。定點壓縮結(jié)構(gòu)的壓縮比例表(Scale_SCH)完全由用戶自定義得到。壓縮比例是按照1、2、4或者8對每一階進(jìn)行壓縮,即對應(yīng)于分別向右移位0、1、2或者3。如果壓縮不充分,則蝶形輸出結(jié)果會超出其動態(tài)范圍,引起數(shù)據(jù)溢出。對于Burst I/O結(jié)構(gòu),Scale_SCH的表示方法:對于每一階的壓縮比都由指定的一個2 bit的數(shù)表示,零階的2 bit數(shù)為最低位,具體形式為[?N4,N3,N2,N1,N0],每一個2 bit數(shù)分別對應(yīng)著相應(yīng)階數(shù)的壓縮比。
例:對于基4結(jié)構(gòu),數(shù)據(jù)轉(zhuǎn)換長度N=1024,Scale_SCH=[01 10 00 11 10]則表示對階0右移位2,對階1右移位3,對階2右移位0,對階3右移位2,對階4右移位1。經(jīng)驗總結(jié)(可以防止產(chǎn)生數(shù)據(jù)溢出):對于1024點的基4,Burst I/O結(jié)構(gòu),Scale_SCH=[10 10 10 10 11];而對于1024點的基2結(jié)構(gòu),Scale_SCH=[01 01 01 01 01 01 01 01 01 10]。
對于流水線,Streaming I/O結(jié)構(gòu),把臨近的一對基2階組在一起,即階0和階1為組0,階2和階3為組1,等等。Scale_SCH的表示方法:對于每一組的壓縮比都由指定的一個2 bit的數(shù)表示,零組的2 bit數(shù)為最低位,具體形式為[?N4,N3,N2,N1,N0],每一個2 bit數(shù)分別對應(yīng)著相應(yīng)組的壓縮比,表示同組內(nèi)的兩個基2階有相同的壓縮比。例:數(shù)據(jù)長度N=1024,Scale_SCH=[10 10 00 01 11]表示對組0(階0和階1)右移位3,對組1(階2和階3)右移位1,對組2(階4和階5)沒有移位,對組3(階6和階7)右移位2,對組4(階8和階9)右移位2。若變換長度N不是4的冪次方的時候,最后一組只包含一個基2階,只能用00或者01表示。經(jīng)驗總結(jié)(可以防止產(chǎn)生數(shù)據(jù)溢出):N=512時,Scale_SCH=[01 10 10 10 11];N=1024時,Scale_SCH=[10 10 10 10 11]。
壓縮比例Scale_SCH的位寬,對于流水線,Streaming I/O結(jié)構(gòu)和基4,Burst I/O結(jié)構(gòu),為2*ceil(0.5*log2(N));對于基2,Burst I/O結(jié)構(gòu)和基2 Lite Burst I/O結(jié)構(gòu),為2*log2(N),其中N為轉(zhuǎn)換數(shù)據(jù)長度。
3 FFT IP核的仿真驗證
1)IP核配置:
Page 1:(配置實現(xiàn)結(jié)構(gòu))
Page 2:(數(shù)據(jù)位寬以及數(shù)據(jù)處理)
Page 3:(配置數(shù)據(jù)緩存空間)
接口說明:
信號名稱
傳輸方向
說明
XN_RE
Input
輸入操作數(shù)實部,以2的補碼輸入。
XN_IM
Input
輸入操作數(shù)虛部,以2的補碼輸入。
START
Input
當(dāng)此信號變高時,開始輸入數(shù)據(jù),隨后直
接進(jìn)行FFT 轉(zhuǎn)換操作和數(shù)據(jù)輸出
SCALE_SCH
Input
進(jìn)行數(shù)據(jù)縮減運算有用,其總的效果是輸出結(jié)果/N
SCALE_SCH_WE
Input
作為SCALE_SCH 的使能信號
FWD_INV
Input
用以指示IP Core為FFT還是IFFT, 1為FFT
UNLOAD
Input
對于Burst I/O結(jié)構(gòu),此信號將開始以自然順序輸出處理的結(jié)果。對于流水線結(jié)構(gòu)和比特逆序輸出的情況,此端口不是必要的。
FWD_INV_WE
Input
作為FWD_INV端口的使能信號
RESET
Input
FFT核復(fù)位信號
CLK
Input
工作時鐘,與輸入數(shù)據(jù)流有關(guān)
XK_RE
Output
輸出數(shù)據(jù)總線實部,以2的補碼輸出
XK_IM
Output
輸出數(shù)據(jù)總線虛部,以2的補碼輸出
XN_INDEX
Output
位寬等于log2(N),輸入數(shù)據(jù)的下標(biāo)
XK_INDEX
Output
位寬等于log2(N),輸出數(shù)據(jù)的下標(biāo)
RFD
Output
輸入數(shù)據(jù)有效信號,高電平有效
DV
Output
輸出數(shù)據(jù)有效指示信號,當(dāng)輸出端口存在有效數(shù)據(jù)時變高
BUSY
Output
IP Core 工作狀態(tài)的指示信號,在進(jìn)行FFT轉(zhuǎn)換時為高電平
EDONE
Output
高有效。在DONE信號變高的前一個時鐘變?yōu)楦唠娖?/p>
DONE
Output
高有效。在FFT完成后變高,且只存在一個時鐘。在DONE變高后,IP Core 開始輸出計算結(jié)果。
通過例化調(diào)用Xilinx IP核來實現(xiàn)一個512點、數(shù)據(jù)位寬和相位因子位寬都為10 bit的FFT算法模塊,時鐘頻率為 50MHz(時鐘頻率越高,可以獲得更高的復(fù)用倍數(shù),節(jié)省更多的資源面積),采用流水線,Streaming I/O和定點壓縮結(jié)構(gòu)。為了方便驗證FFT IP核功能的正確性:以零開始計數(shù),在每個時鐘上升沿到來時,進(jìn)行加1得到的數(shù)據(jù),分別作為其輸入信號的實部和輸入信號的虛部。Scale_SCH=[01 10 10 10 11],在ISE 14.1中建工程,例化調(diào)用Xilinx FFT IP核,然后利用ModelSimSE 6.5進(jìn)行仿真,其仿真時序如圖2所示。

時序驗證方面:可以看出整個時序在實現(xiàn)中是完全正確的。從圖可以看出:busy信號高的的時候表明FFT IP核正在進(jìn)行FFT運算,busy信號拉低后表明運算已經(jīng)結(jié)束,要向外輸出FFT運算結(jié)果;edone信號在done信號之前一個周期到達(dá);此時done信號拉高一個周期,表明FFT運算完成;而且由于進(jìn)行的是512點的FFT運算,所以,每間隔512個時鐘周期,edone和done信號都會拉高一次;rfd信號一直拉高,表明輸入數(shù)據(jù)一直傳送到FFT IP核的輸入端口,跟采用流水線,Streaming I/O結(jié)構(gòu),可以進(jìn)行連續(xù)數(shù)據(jù)處理是一致的;dv信號一直為高,表明輸出的信號一直有效。
電子發(fā)燒友App













評論