FFT IP Core Features
參數設置
FFT IP核有4種模式,分別為:
-
突發模式(Burst);
-
緩存突發模式(Buffered Burst);
-
流模式(Streaming);
-
可變流模式(Variable Streaming);
前3中模式運算速度依次增大,占用資源也依次增加,第4種模式(Variable Streaming)可以用於在線改變FFT的大小。速度和流模式差不多,資源占用更多。
分為基本配置和高級配置兩種,基本配置包括配置FFT ip核的變換長度,FFT還是IFFT,數據模式,輸入、輸出的順序。數據精度等。高級配置包括FFT的結構,FFT的引擎數。
Tansform:
Length:是FFT的變換長度,只能選擇指定長度,不能自定義。
Direction:指定該IP核完成的是FFT變換還是用戶可控制的FFT變換或IFFT變換。
I/O:
Data Flow:選擇輸入數據流的方式,共有4中方式,突發(Burst)、緩存突發(BufferedBurst)、流模式(Streaming)、可變長度流模式(Variable Streaming),其中前3種方式運算速度依次增加,消耗的資源也依次增加,第4種方式允許用戶改變FFT的變換長度,速度和流模式(Streaming)差不多,但消耗更多資源。
Input Otder:輸入數據的順序
Output Order:輸出數據的順序
Data and Twiddle:
Representation:數據數據的結構,有三種分別是:
-
Block Floating(塊浮點);
-
Fixed Point(定點);
-
Single Floating Point(單浮點);
Fixed Point和Single Floating Point這兩種方式只能用於可變流模式(Variable Streaming),對於突發(Burst)、緩存突發(Buffered Burst)、流模式(Streaming)這三種方式來說只能用(塊浮點)Block Floating。塊浮點就是在數據的一幀數據中有一個共同的縮放因子,這同時也帶來了一個問題,當一幀數據中有大有小的時候,共用一個縮放因子會造成小數(比較小的數)誤差增大。
-
定點:小數點的位置確定;
-
浮點:小數點的位置不確定,浮點數轉換成二進制數存放的准則:如20.25,轉換成二進制並歸一化:10100.01=1.010001*2^4;用32位浮點表示 [31] 1位符號 [30-23]8位指數 [22-00]23位小數:0 00000100 00000000000000000010001
-
塊浮點:一個數據塊的數據共享一個指數。例如一個數據塊有6個數據,則開7個空間,前六個放數據,后一個放指數;指數用的是此數據塊中最大值歸一化后的指數,其余5個數按此指數存放二進制數;
Data Input Width:輸入數據的數據寬度
Twiddle Width:旋轉因子的數據寬度,旋轉因子的數據寬度不能大於輸入數據的數據寬度
Data Output Width::輸出數據的數據寬度,FFT的計算結果是輸出的實部和虛部與縮放因子(EXP)的結合,縮放因子為負表示,輸出數據需要左移(增大),為正則右移,輸出的實部和虛部,縮放因子都是有符號數,這點需要注意。
Latency Estimaters:
-
Calculation:計算的延遲
-
Throughput Latency:處理延遲
高級設置一共有兩個選擇,一個是選擇運算的結構,一個是選擇FFT的引擎數。
運算結構有兩種:Single Output(單輸出)和Qaud Output(四輸出),單輸出一個時鍾周期只計算一個FFT的蝶形運算,四輸出一個周期計算4個基4的蝶形運算。
FFT的引擎數越多,計算速度越快,當然也消耗更多的資源。默認是四輸出,一個FFT引擎,默認設置即可。
設置完參數后即可點擊Generate HDL來產生HDL文件(綜合文件和仿真文件)。
接口信號信息
一個時鍾,時鍾就是FFT ip核運算的時鍾;
一個復位,reset_n是FFT ip核復位信號,低電平有效,復位的時候sink_ready信號一直為低(無效);
一個FFT/IFFT控制線,inverser設置FFT變換還是IFFT變換,低電平表示FFT,高電平表示IFFT。一個sink,一個source 。
sink信號:
-
sink_valid:輸入到FFT,輸入數據有效信號,在輸入數據期間要保持有效;
-
sink_sop:輸入到FFT,輸入數據起始信號,與第一個數據對齊,只需保持一個時鍾周期即可;
-
sink_eop:輸入到FFT,輸入數據結束信號,與最后一個數據對齊,只需保持一個時鍾周期;
-
sink_ready: FFT輸出,輸入准備好信號,此信號為高表示可輸入變換數據,否則不要輸入變換數據;
-
sink_error:輸入到FFT,輸入錯誤信號,置0即可;
-
sink_real:輸入到FFT,輸入的實部信號;
-
sink_imag:輸入到FFT,輸入的虛部信號;
Source信號:
-
source_valid:FFT輸出,輸出有效信號,FFT變換完成后,此信號置高,開始輸出數據;
-
source_ready:輸入到FFT,輸出數據准備好信號,置1即可;
-
source_error:FFT輸出,輸出錯誤信號,若輸入的數據格式有誤,則不進行FFT變換,並給出錯誤值,根據錯誤值可查看手冊,確定是輸入數據怎么錯了;
-
source_sop:FFT輸出,輸出數據起始信號,與輸出的第一個數據對齊;
-
source_eop:FFT輸出,輸出數據的終止信號,與輸出的最后一個數據對齊;
-
source_real:FFT輸出,輸出數據的實部;
-
source_imag:FFT輸出,輸出數據的虛部;
-
source_exp:FFT輸出,數據的縮放因子;
輸出數據格式
Source_exp的輸出范圍
注:
-
FFT IP核的輸入數據和輸出數據,縮放因子都是有符號數;
-
實際運算的結果是實部和虛部與縮放因子的結合,若縮放因子為負,實部和虛部要左移相應的位數,若為正則右移,例如:縮放因子寬度為6,二進制值為101011,該值為有符號數,表示-21,則實部和虛部需要左移21位才是最終結果;
-
若是FFT逆變換,只需要把inverser置1即可;
Burst接口時序
Streaming接口時序
流I/O數據流結構允許輸入數據連續處理,並輸出連續的復數數據流。這個過程不需要停止FFT函數數據流的進出。
注意:在每一幀數據傳輸時要注意sink_valide、sink_ready,inverse要同sink_sop同步。
當完成數據轉換后,FFT模塊將source_valid置為有效,並以自然順序輸出變換域的數據,FFT模塊輸出source_sop表示第一個有效數據的輸出。在N個數據(一幀)都變換結束之后即 N個時鍾后,FFT模塊將source_eop置為有效表示輸出數據的結束。輸出時序圖如下。
FFT兆核函數采用Altera Atlantic接口I/0協議,輸入接口為主設備匯端(Master Sink)而輸出接口為主設備源端(Master Source)。
在reset信號無效后,數據源將sink_valide置為高有效,向FFT通知在輸入端至少有N個復數據樣點可以輸入。FFT函數將sink_ready信號置高電平,表明有能力接收這些輸入信號。當sink_ready(FFT核發出的)和sink_valide同時有效時,傳輸開始。數據源加載第一個復數據樣點到FFT函數中,同時將sink_sop(start)信號置高電平,表示輸入模塊的開始,在下一個時鍾周期,sink_sop信號被復位,並以自然順序加載數據樣點;當最后一個數據輸入后,sink_eop 被置為有效 ,sink_valid仍處於有效,並完成這一幀數據的傳輸。然后在下一個時鍾將sink_sop置為有效,並重復上一過程。
sink_sop必須與sink_valid同時有效並且是一個周期,否則相對於sink_valid滯后的話source _error 出現01錯誤,查手冊發現是valid goes high, but there is no start of frame。sink_sop滯后多少周期01就出現多少周期。