vivado 的IFFT/FFT IP核的配置及調用


        對於viavado 中IFFT IP的使用剛開始的時候,沒有找到IFFT的IP,最后經過查找資料發現,在VIVADO中 FFT IP和IFFT IP是用的統一個IP,具體是IFFT還是FFT通過設s_axis_config_tdata=1/0設置fft或ifft模式,而且在同一個工程當中,盡量選擇同一個IP多次例化使用。

        FFT IP的設置主要包括三個界面,雖然不是每一個標簽欄都需要修改配置,但最好也要知道一下他的作用:

第一頁界面

         第一個標簽頁里主要配置通道數,點數,時鍾,吞吐量,結構,以及是否可以運行時配置,需要注意的是結構的配置會影響調整因子。如下圖所示:

          number  of  channels :變換通道,可以選擇多通道,實現多幀數據同時進行FFT運算;

        transform  lenfgth   : FFT變換長度,如果選擇了最下面的‘run time configurable transdorm legth’,則該參數是FFT變化的最大長度,一般不選。

     architecure  choice : 這個標簽里主要是用來實現,FFT變換所選用的架構:

             Automatically  selected :   自動選擇所需要的,FFT變化架構。

                pipelined  streaming     :    並行流水線結構

                radix-4, burst i/o            :   基4 I/O突發結構 

                                               radix-2, burst i/o            :    基2 I/O突發結構

                                               radix-2 life, burst i/o       :   基2 I/O突發結構

          其中流水線的結構變換處理時間最短,資源消耗最大。

     run time configurable transdorm legth  : 該選項可以在FFT變換中通過設置s_axis_config_tdata中NFFT字段的長度來改變FFT變化的長度。

 第二頁界面

         第二配置頁主要是數據寬度,格式,控制信號,輸出方式,和可選的控制信號。需要注意的是輸據的輸入是自然方式(Natural  Order),輸出可以是自然方式也可以是倒序方式(Reversed Order),如果選用倒序方式輸出,在后面處理中就要注意這一特性。

         其中在data format;下拉標簽中,對應着FFT IP核支持兩種數據類型: 
                                       1. 定點全精度 
                                       2. 定點縮減位寬 
         scaling optios :縮放選項 :

                                        1、 block floating point :不管輸入的格式如何,FFT變化內部都采用浮點,會根據每一級的的數據情況自動縮放,是的數據不出現溢出的情況,

                                        2、scaled :在m_axis_data_tuser中會有5BIT表示每一級的縮放情況,在s_axis_config_data中會有相應的字段配置配置縮放因子.每一級別包含2個stage ,2個bit 表示一級縮放,一般0-3可選,如果log(NFFT)不是2的倍數,則最高一級的縮放只能在0-1之間選取。

                                        3、unscaled :不用擔心變化過程中會出現溢出,但是輸入是32bit的話,輸出是64bit。

          Aresten : 復位信號要勾選,至少保持兩個時鍾的低電平。

           output odering options: 輸出順序選項。

                                        1、nature order:就是FFT變化后的輸出已經調整了順序,按照xk_index自然順序列出變化結果,

                                        2、bit/digital reserved oder就是按照變化后的順序直接輸出,是倒序輸出,需要自己后續處理,

                                        3、cyclic perfix insertion :循環前綴插入,一般添加,在進行IFFT后可以根據s_axis_config_data中的CP長度配置自動添加CP。

           optional output fileds :選項輸出字段,

                                        1、xk_index:FFT 變幻的結果索引,在m_axis_data_user中有相應的字段。

                                        2、OVFLO是變換中溢出的指示信號,對應event_fft_overflow.

                             

         

 

 

 第三頁界面:

         不做任何修改。

  第四:

關於一些端口的說明:

s_axis_config_tdata:控制輸入模式,進行fft/ifft以及衰減因子的設置,第0位為1fft,為0做ifft,高位用於scale因子的設置。

s_axis_config_tvalid:拉高若干個時鍾周期后歸零,之后將s_axis_data_tvalid拉高

s_axis_config_tready:s_axis_config_tvalid拉高兩個時鍾周期后,該口給1輸出;

s_axis_data_tready:s_axis_config_tvalid拉高兩個時鍾周期后,該口給1輸出,ip核初始化完成,可進行數據輸入必須進行賦值;

s_axis_data_tvalid:拉高2048個周期,輸入2048個數據進行fft;

s_axis_data_tdata:輸入32位數據,取低12位數據進行運算;

s_axis_data_tlast:輸入2048個數據后拉高,停止數據輸入;

做fft需要耗費的時鍾周期計算如下s_axis_data_tlast- s_axis_data_tvalid

,在ip核中可看到:

 

m_axis_data_tdata:高位為實部,低位為虛部,由於本程序在always內將值給fft_real端口,所以會延遲一個時鍾周期,實際為41,fft_real為42;

m_axis_data_tvalid:當fft結果輸出時拉高,輸出2048個點的數據后拉低;

m_axis_data_tuser:輸出fft的地址值,輸出值*fs/N為對應頻點;

m_axis_data_tready:完成2048個點的fft后拉高一個時鍾周期表示完成fft;

event_frame_started:輸入信號數據時拉高一個時鍾周期;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM