標籤:相對 重複 空間 載入 點擊 tput 產生 結合 計算
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就出現多少周期。
Quartus II 與ModelSim-Altera聯合模擬FFT IP核之FFT IP核分析