FPGA開發之呼叫FFT IP核

2021-06-23 09:47:38 字數 3503 閱讀 2563

有三種fft:

(1) 流水線,streaming i/o 結構 :允許連續的資料處理 ;

(2) 基 4,burst i/o 結構:提供資料匯入/匯出階段和處理階段。此結構擁有較小的結構,但轉換時間較長;

(3) 基 2,burst i/o 結構:使用最少的邏輯資源,同 radix-4 相同,提供兩階段的過程。

第一種結構,即流水線 streaming i/o結構,以進行連續的資料處理。在進行當前幀的n點資料時,可載入下一幀的n點資料,同時輸出前一幀的n點資料。此結構由多個基 2 的蝶形處理單元構成,每個單元都有自己的儲存單元來儲存輸入和中間處理的資料,

其結構如圖 5-58 所示。

fft 的計算單元具有豐富的控制訊號,其詳細說明見下文。

xn_re、xn_im :輸入運算元,分別為實部和虛部,以 2 的補碼輸入。在使用時應當確定其位寬。

start :fft 開始訊號,高有效。當此訊號變高時,開始輸入資料,隨後直接進行 fft 轉換操作和資料輸出。乙個 start 脈衝,允許對一幀進行 fft 轉換。如果每 n 個時鐘有乙個 start 脈衝或者 start 始終為高,,則都可以連續進行 fft。如果在最初的 start 前,還沒有 nfft_we,fwd_inv_we,scale_sch_we訊號,則 start 變高後就使用這些訊號的預設值。由於此 ip core 支援非連續的資料流,因此在任何時間輸入start,即可開始資料的載入。當載入 n 個資料結束後,就開始 fft 轉換運算。

unload :對於 burst i/o 結構,此訊號將開始輸出處理的結果。對於流水線結構和位元逆序輸出的情況,此埠不是必要的。

nfft :此埠只對實時可配置應用時有用。

nfft_we :此埠是 nfft 埠的使能訊號。

fwd_inv :用以指示 ip core 為 fft 還是 ifft,其等於 1 時 ip core 進行 fft 運算,否則進行 ifft 運算。至於採用哪種轉換運算是可以逐幀變化的。這一埠給 fft 的使用提供了很大的方便。

fwd_inv_we :作為 fwd_inv 埠的使能訊號。

scale_sch:(1) 在 ip core 設計時,如果選擇在計算過程中進行中間資料的縮減,那麼此訊號才可起作用;(2) 輸入的位寬等於 2*ceil(nfft/2),其中 nfft = log2(point size)。(3) 流水線結構中,將每個基 2 的蝶形處理單元視為乙個階段,每個階段進行一次資料的縮減,縮減的比例以此輸入中對應階段的兩位元表示。(4) 每階段的兩位元數可以是 3,2,1 或 0 :它們表示了資料所需要移動的位元數。

scale_sch_we :作為 scale_sch 的使能訊號。

sclr :可選埠。

reset :重置訊號埠。reset=1 時,所有工作都停止且初始化。但內部的幀快取保留其內容。

ce :可選埠。

clk :輸入時鐘。

xk_re,xk_im :輸出資料匯流排,以 2 的補碼輸出。scale_sch_we 有效時,輸出位寬等於輸入 ;否則,輸出位寬 = 輸入位寬 +nfft+1。

xn_index :位寬等於 log2(point size),輸入資料的下標。

xk_index :位寬等於 log2(point size),輸出資料的下標。

rfd :資料有效訊號,高有效,在載入資料時為高電平。

busy :ip core 工作狀態的指示訊號,在計算 fft 轉換時為高電平。

dv :資料有效指示訊號,當輸出埠存在有效資料時變高。

edone :高有效。在 done 訊號變高的前乙個時鐘變為高電平。

done :高有效。在 fft 完成後變高,且只存在乙個時鐘。在 done 變高後,ip core 開始輸出計算結果。

blk_exp :當使用 burst i/o 結構時可用,若選擇流水線,則此埠無效

ovflo :演算法溢位指示。在資料輸出時,如每幀有溢位,此訊號變高。在每幀開始處,此訊號重置。 

例 5.7.1 使用 ip core 例項化乙個 16 點、位寬為 16 位的 fft 模組。

ip core 直接生成的乘法器的 verilog 模組介面為 :

module fft16(sclr, fwd_inv_we, rfd, start, fwd_inv, dv, scale_sch_we, done, clk, busy, edone, scale_sch, xn_re, xk_im, xn_index, xk_re, xn_im, xk_index);

input   sclr , fwd_inv_we, start, fwd_inv, scale_sch_we, clk;

input   [3 : 0] scale_sch;

input   [15 : 0] xn_re;

output rfd, dv, done, busy, edone;

output [15 : 0] xk_im;

output [3 : 0] xn_index;

output [15 : 0] xk_re;

input    [15 : 0] xn_im;

output [3 : 0] xk_index;

……endmodule

在使用時,直接呼叫 multiply 模組即可,如

module fft16(sclr, fwd_inv_we, rfd, start, fwd_inv, dv, scale_sch_we, done, clk, busy, edone, scale_sch, xn_re, xk_im, xn_index, xk_re, xn_im, xk_index);

input sclr , fwd_inv_we, start, fwd_inv, scale_sch_we, clk;

input [3 : 0] scale_sch;

input [15 : 0] xn_re;

output rfd, dv, done, busy, edone;

output [15 : 0] xk_im;

output [3 : 0] xn_index;

output [15 : 0] xk_re;

input [15 : 0] xn_im;

output [3 : 0] xk_index;

fft fft1( // 呼叫 fft 的 ipcore

.sclr(sclr), .fwd_inv_we(fwd_inv_we),   .rfd(rfd), .start(start), .fwd_inv(fwd_inv),

.dv(dv), .scale_sch_we(scale_sch_we), .done(done), .clk(clk), .busy(busy),

.edone(edone), .scale_sch(scale_sch), .xn_re(xn_re), .xk_im(xk_im),

.xn_index(xn_index), .xk_re(xk_re), .xn_im(xn_im), .xk_index(xk_index));

endmodule

FPGA開發之IP核

從ip 核的提供方式上,通常將其分為軟核 硬核和固核這3 類。從完成ip 核所花費的成本來講,硬核代價最大 從使用靈活性來講,軟核的可復用使用性最高。軟核 soft ip core 軟核在 eda 設計領域指的是綜合之前的暫存器傳輸級 rtl 模型 具體在 fpga 設計中指的是對電路的硬體語言描述...

FPGA開發之FPGA開發流程簡介

我以前一直很疑惑晶元設計這一塊在實際中是怎麼做的呢?今天了解了一下,現在設計晶元一般採用fpga開發,大概流程如下 1 功能定義 器件選型 設計晶元之前當然你要知道你設計的晶元有什麼功能,然後就模組化,寫清楚誰誰誰幹什麼,這當然就是從上至下的方法,你試試從下到上給我看看。2 設計輸入 這一步就是說我...

iOS 開發之 Web Service 呼叫

以下變更在 h 檔案中宣告 nsmutabledata webdata nsmutablestring soapreply nsurlconnection conn nsxmlparser xmlparser bool elementfound 以下在 m 中實現 validate user id ...