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