FPGA基礎學習(1) -- FFT IP核(Quartus)


為了突出重點,僅對I/O數據流為steaming的情況作簡要說明,以便快速上手,有關FFT ip核模型及每種設置詳細介紹請參考官方手冊FFT MegaCore Function User Guide。

1 配置

在FFT Megacore Function中選擇“parameterize”,彈出對話框。
“Parameters”欄中,選擇器件、轉換數據的長度、數據精度已經旋轉因子的精度。注意旋轉因子精度必須小於等於數據精度。

“Architecture”欄中,有FFT引擎選擇,在I/O數據流選擇Streanming(流水線)的時候,引擎默認為1個四輸出引擎。
img

“Implementation Options”欄中,Structure中選擇乘法器和加法器組合,有4 Mults/2 Adders和3 Mults/5 Adders兩種,本例選擇前者。Implement Multiplier in代表實現FFT的邏輯資源分配形式,有DSP Blocks/Logic cells、DSP Blocks ONLY和Logic Cells ONLY三種,Logic cells顧名思義就是消耗FPGA的邏輯資源,而DSP Blocks則將一部分邏輯資源用Embedded Multiplier 9-bit elements表示。本例選擇DSP Blocks/Logic cells混合模式。全局時鍾和存儲器選擇采用默認方式。

FFT Megacore Function中“step 2”為跟仿真有關的選項,根據需求選擇即可。

“step 3”生成IP核。注意,在生成IP核的過程中,進度條可能會卡主不動,可能是破解的問題(版本13.1)。遇到該問題時,多試幾次,或者改動設計參數,可能會順利生成。

2 信號

生成的FFT IP核,其端口列表如下,相關的詳細說明可以在官方手冊中查到:

端口說明

端口 端口類型 說明
Inverse / 改變FFT變換方向,置1時為FFI的你變換。
Sink_valid I 拉高表示通知FFT即將有N個數據輸入
Sink_sop I 輸入數據起始標記脈沖(維持一個時鍾的高電平),與第一個數據同步
Sink_eop I 輸入數據結束標記脈沖(維持一個時鍾的高電平),與最后一個數據同步
Sink_real I 輸入數據的實部
Sink_imag I 輸入數據的虛部
sink_error I 指示數據流的錯誤信息:00——沒有錯誤;01——丟失SOP;10——丟失EOP;11——多余的EOP;
sink_ready O FFT模塊准備就緒,可以接收數據
source_ready I 表明downstream模塊(理解為FFT的后續接收數據模塊)可以接收數據
source_error O 表明upstream模塊或者FFT模塊出了問題,錯誤信息提示與sink_error一樣
source_sop O 輸出數據起始標記
source_eop O 輸出數據結束標記
source_valid O 置高,准備輸出結果
source_exp O 結果數據縮放因子:這個指數位的意思打個比方說吧,比如它是3,就是說這時輸出的虛部和實部的數值要除以2的3次方,如果是10,就要除以2的10次方,如果對結果精度要求不高的話,可以直接截去相應的長度,比如指數是3,實部輸出101101110111,那么此刻實際的值應該為101101110.111;取整就是101101110
source_real O 變換后輸出數據的實部
source_imag O 變換后輸出數據的虛部

3 仿真結果


sink_ready由FFT模塊發出,代表其准備就緒。復位至少數個周期。當復位失效,FFT准備就緒后,sink_ready被置高。將Sink_valid拉高,通知FFT准備接收發來的數據。Sink_sop代表流水線輸入數據的開始,在Sink_sop拉高的同時,第一個數據已經發送。

當一幀的數據(FFT處理的點數)輸出完成后,將sink_eop拉高,代表一幀數據的結束,注意最后一個數據在sink_eop拉高的同時傳輸。注意:如果多幀數據連續輸入,為了簡化程序設計,將兩幀數據中間放置一個時鍾的周期的間隔,此時必須將Sink_valid拉低一個時鍾周期,否則FFT的sourse_error會報01的錯誤,即缺少數據開始標志Sink_sop。當然,在程序設計上讓Sink_sop和sink_eop首尾相連,則不需要拉低一個周期的Sink_valid。

在數個時鍾周期之后,FFT模塊開始輸出轉換完成的數據。與輸入相似,當完成時,FFT模塊會拉高轉換完成信號source_valid和輸出起始標志信號source_sop,與此同時,第一個數據輸出。

當一幀數據轉換完成后,FFT模塊會將source_eop拉高,同時輸出最后一個轉換完成的數據。


免責聲明!

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



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