• 沒有找到結果。

以FPGA實現浮點FFT 及其在DHM硬體電路設計之應用

N/A
N/A
Protected

Academic year: 2021

Share "以FPGA實現浮點FFT 及其在DHM硬體電路設計之應用"

Copied!
99
0
0

加載中.... (立即查看全文)

全文

(1)國立臺灣師範大學 資訊工程研究所碩士論文. 指導教授: 黃 文 吉 博士. 以 FPGA 實現浮點 FFT 及其在 DHM 硬體電路設計之應用. The Implementation of Floating Point FFT Circuit By FPGA for DHM Hardware Circuit Design. 研究生: 中華民國. 邱 清 志. 一百零二. 年. 撰 八. 月.

(2) 中文摘要. 中文摘要 本論文主要是將浮點數快速傅立葉轉換應用在數位全像顯微鏡系統統的菲 涅耳轉換上,透過本論文的硬體架構可還原全相片的相位值,接著再透過軟體 Matlab 來進行相位展開法則計算,在硬體的正確性上我們也使用 Matlab 軟體所 得知答案來相互驗證其正確性。本論文將菲涅耳轉換當中的前轉換單元、快速傅 立葉轉換單元以及後轉換單元使用 IEEE 754 浮點數的格式來進行運算,可達到 提高精確度的目的。. 本論文接著透過菲涅耳轉換當中傅立葉轉換模組的格式互相做精確度之比 較,在使用定點數 FFT 與浮點數 FFT 之精確度差異並不會太大,但是在浮點數 FFT 的使用方便性上比定點數 FFT 來的便利許多。. 關鍵字:FPGA、浮點數 FFT、菲涅耳轉換、MSE. i.

(3) 誌謝. 誌謝 首先,要非常感謝我的指導教授 黃文吉 教授,在這兩年碩士班求學期間對 學生不厭其煩地指導,讓我有機會去學習研究的方法以及待人處世的態度,當我 遇到瓶頸時與我討論並引導我往正確方向思考,使得我在這段求學期間獲得了許 多的成長與寶貴的知識與經驗,在此獻上最誠摯的謝意。同時也感謝清華大學及 亞洲大學的 黃仲陵 教授與國立台灣師範大學 吳榮根 教授在繁忙的日子撥冗 來參加我的碩士論文口試,並給予論文上的評閱與建議。 很榮幸能夠來到國立臺灣師範大學資訊工程研究所就讀,並在黃文吉老師的 多媒體通訊暨系統晶片實驗室這個大家庭和大家一起學習成長。要感謝已畢業的 學長姐:偉豪、哲誠、浩聲、子昕、嘉翎,還有博士班的學長姐們,謝謝你們的 發展出出完善的硬體介面,讓本論文在電路架構開發時得以快速且順利進行,同 時感謝臺灣師範大學光電科技研究所鄭超仁教授以及博士班學長,給予研究上許 多協助。同時也感謝在我碩士求學生涯與我一起奮鬥的同窗好友:建廷、聖穎、 國璿、任軒、瀚逸,另外要感謝學弟妹:思淮、奇恩、光耀、煥元、皓棠、一修、 雅姿、烝祺在研究上給予多方面的協助,特別是建廷,在我遇到困難時他總是可 以給我意見並且給予最大的幫助,在此一併致謝。 最後,更要感謝家人與所有關心我的朋友,在我重考及攻讀碩士這幾年全力 的支持,有了你們的支持、關懷與鼓勵,讓我有更勇氣去面對各種前方所遇到的 挫折與壓力,並順利地完成學業。將此論文之成果獻給所有一路上給予幫助的人, 並且希望大家與我分享這份喜悅與榮耀。. ii.

(4) 目錄. 目錄 中文摘要............................................................i 誌謝...............................................................ii 目錄..............................................................iii 附表目錄............................................................v 附圖目錄...........................................................vi 第一章. 緒論 ...................................................... 1. 1.1 研究背景與動機目的 ............................................. 1 1.2 全文架構 ....................................................... 3 第二章. 基礎理論及技術背景介紹 .................................... 4. 2.1 Altera 浮點數 FFT IP Core 介紹 .................................. 4 2.1.1 浮點數表示法...................................................4 2.1.2 Floating Point FFT 產生過程......................................5 2.1.3 2.2. Floating Point FFT 電路運作流程...............................9 1D FFT 電路之 testbench 設計及驗證...............................12. 2.3 浮點 FFT 電路實測實例及討論 ................................... 17 2.4. 1D 浮點 FFT 資源消耗............................................32. 第三章 3.1. 2D FFT 電路設計 ........................................ ..34. 2D FFT 電路運作流程.............................................34. 3.2 Interface 設計概念..............................................41 3.3. 2D FFT 電路之 testbench 設計....................................46. iii.

(5) 目錄 3.3.1 address 的配置及使用…........................................46 3.3.2. testbench 設計...............................................49. 3.4 二維 FFT 電路實測實例及討論......................................54 3.5. 2D 浮點 FFT 資源消耗............................................58. 第四章 浮點快速傅立葉轉換之應用.................................... 60 4.1 菲涅耳轉換運算流程............................................. 60 4.2 相位展開法則介紹............................................... 63 4.3 菲涅耳轉換基本架構及驗證....................................... 64 4.4 浮點快速傅立葉轉換與定點快速傅立葉轉換資源消耗................. 79 4.5 定點數 FFT 與浮點數 FFT 精確度比較............................... 83 第五章 結論........................................................ 87 參考著作........................................................... 88. iv.

(6) 附表目錄. 附表目錄 表 2.1 FFT 之輸入訊號.................................................9 表 2.2 FFT 之輸出訊號................................................10 表 2.3 FFT 之輸出結果之錯誤狀況......................................11 表 2.4 各長度浮點 FFT 資源消耗表......................................32 表 3.1 address 之 LSB:address[20:10]設定之描述......................47 表 3.2 運算功能表之設定.............................................47 表 3.3 2D FFT 模組各維度之資源消耗表..................................58 表 3.4 On-chip RAM 模組各維度之資源消耗表.............................58 表 4.1 On-chip RAM 模組各維度之資源消耗表.............................79 表 4.2 各維度未經過數值校準之 FFT 輸入範圍表..........................81 表 4.3 各維度經過數值校準之 FFT 輸入範圍表(1).........................81 表 4.4 各維度經過數值校準之 FFT 輸入範圍表(2).........................82 表 4.5 各維度定點數與浮點數 MSE 比較表...............................83 表 4.6 菲涅耳轉換電路在不同維度之資源消耗(定點數)...................84 表 4.7 菲涅耳轉換電路在不同維度之資源消耗(浮點數)...................85. v.

(7) 附圖目錄. 附圖目錄 圖 2.1 FFT 產生介面...................................................6 圖 2.2 FFT 參數設定(1)................................................7 圖 2.3 FFT 參數設定(2)................................................8 圖 2.4 FFT 參數設定(3)................................................8 圖 2.5 1D FFT testbench 程式碼(1).....................................13 圖 2.6 1D FFT testbench 程式碼(2).....................................14 圖 2.7 1D FFT testbench 程式碼(3).....................................15 圖 2.8 1D FFT testbench 程式碼(4).....................................16 圖 2.9 Matlab 與硬體電路驗證流程圖...................................17 圖 2.10 利用 Matlab 將軟體 FFT 之結果繪圖..............................18 圖 2.11 利用 Matlab 將硬體 FFT 之結果繪圖..............................19 圖 2.12 脈衝之起始輸入..............................................21 圖 2.13 脈衝之最終輸入..............................................21 圖 2.14 脈衝之起始輸出..............................................22 圖 2.15 脈衝之最終輸出..............................................22 圖 2.16 脈衝經 Matlab 所繪之 Time-domain 之圖..........................23 圖 2.17 脈衝經由軟體 FFT 結果透過 Matlab 所繪之圖......................23 圖 2.18 脈衝經由硬體電路結果透過 Matlab 所繪之圖......................24 圖 2.19 常數之起始輸入..............................................25 圖 2.20 常數之最終輸入..............................................25. vi.

(8) 附圖目錄 圖 2.21 常數之起始輸出..............................................26 圖 2.22 常數之最終輸出..............................................26 圖 2.23 常數經 Matlab 所繪之 Time-domain 之圖..........................27 圖 2.24 常數經由軟體 FFT 結果透過 Matlab 所繪之圖......................27 圖 2.25 常數經由硬體電路結果透過 Matlab 所繪之圖......................28 圖 2.26 腦波之起始輸入..............................................29 圖 2.27 腦波之最終輸入..............................................29 圖 2.28 腦波之起始輸出..............................................30 圖 2.29 腦波之最終輸出..............................................30 圖 2.30 腦波經 Matlab 所繪之 Time-domain 之圖..........................31 圖 2.31 腦波經由軟體 FFT 結果透過 Matlab 所繪之圖......................31 圖 2.32 腦波經由硬體電路結果透過 Matlab 所繪之圖......................32 圖 3.1 1D FFT 電路基本架構...........................................35 圖 3.2 1D FFT 運作圖(1)..............................................36 圖 3.3 1D FFT 運作圖(2)..............................................36 圖 3.4 1D FFT 運作圖(3)..............................................37 圖 3.5 1D FFT 運作圖(4)..............................................37 圖 3.6 2D FFT 電路流程圖.............................................38 圖 3.7 2D FFT 電路流程圖.............................................39 圖 3.8 2D FFT 電路流程圖.............................................40 圖 3.9 2D FFT 電路流程圖.............................................40 圖 3.10 2D FFT 待測電路程式碼(1).....................................42 vii.

(9) 附圖目錄 圖 3.11 2D FFT 待測電路程式碼(2)......................................43 圖 3.12 2D FFT 待測電路程式碼(3)......................................43 圖 3.13 2D FFT 待測電路程式碼(4)......................................44 圖 3.14 2D FFT 待測電路程式碼(5)..................................... 44 圖 3.15 2D FFT 待測電路程式碼(6).....................................45 圖 3.16 2D FFT 待測電路程式碼(7).....................................45 圖 3.17 RAM_real 與 RAM_imag 所能存取 address 範圍......................48 圖 3.18 2D FFT testbench 程式(1).....................................50 圖 3.19 2D FFT testbench 程式(2).....................................51 圖 3.20 2D FFT testbench 程式(3).....................................52 圖 3.21 2D FFT testbench 程式(4).....................................53 圖 3.22 2D FFT testbench 程式(5).....................................53 圖 3.23 Lena 數位圖像................................................54 圖 3.24 Lena 數位圖像經由軟體 FFT 運算及透過 Matlab 繪圖................55 圖 3.25 Lena 數位圖像經由硬體電路運算算及透過 Matlab 繪圖..............56 圖 3.26 Lena 數位圖像經由軟體 FFT 運算及透過 Matlab 所繪之圖...........57 圖 3.27 Lena 數位圖像經由硬體電路運算算及透過 Matlab 所繪之圖..........57 圖 4.1 菲涅耳轉換法則硬體基本電路架構...............................65 圖4.2 前轉換結果. 送到FFT電路運算................................ 66. 圖4.3. FFT電路運算結果存回記憶體................................... 66. 圖4.4. FFT列方向運算結果送到FFT電路運算............................ 67. 圖4.5 行方向FFT運算結果存回記憶體.................................. 67 viii.

(10) 附圖目錄 圖 4.6 相角還原圖(microlens 128X128).................................69 圖 4.7 相角還原圖(microlens 256X256)................................. 71 圖 4.8 相角還原圖(microlens 512X512)................................. 72 圖 4.9 相角還原圖(Neural Cell 512X512)................................75 圖 4.10 實際物體還原圖..............................................77. ix.

(11) 第一章 緒論. 第一章 緒論 本章節主要在探討本論文的研究背景與動機、研究目的與方法,並大略說明 各章節的主要內容與重要特性。. 1.1 研究背景與動機目的 在數值的計算上,分為定點數的計算及浮點數的計算,而定點數與浮點數各 有其優缺點,定點數在硬體設計上比較簡單,且有 Area cost 低及速度較快之優點, 但是由於定點數所能表達的數值大小有其範圍限制,在數值超過其所能表達範圍 時會造成 Underflow 以及 Overflow,所以僅適合於所要表達的數值範圍小之應用 上。 而浮點數之計算則可以有效解決 Underflow 以及 Overflow 之問題,但在 Area cost 及速度上就不及定點數之計算,而且在執行數學運算上浮點數會比定點數來 的複雜,造成設計上的不容易,因此現有以浮點運算為基礎之電路較定點計算不 普及。 FFT 的設計上,由於 FFT 轉換後的數值範圍很大,如果使用定點數反而容易 造成 Underflow 以及 Overflow 之問題產生,而浮點數的計算剛好符合 FFT 轉換後 數值範圍很大之特性,所以浮點數的使用在 FFT 計算上是有其必要性的。 FFT 的使用在數位全像顯微鏡系統(DHM)的設計上扮演著關鍵的腳色,DHM 系統是由菲涅耳轉換法則及相位展開法則所組成,而在這兩個法則的運算中,都 必須透過 FFT 的計算將全像圖之相角還原及做相位展開之動作。 目前大多數的數位全像顯微鏡系統由於是用於軟體實現,通常都會設置在實 1.

(12) 第一章 緒論 驗室裡,在進行戶外研究時不容易將整個電腦系統隨時帶在身邊,如果將 DHM 系統硬體化則可增加其可攜性,當研究人員在戶外進行樣本採集時,在樣本的保 存上容易遭受到周遭環境破壞,所以可直接透過可攜性的 DHM 系統將所採集到 的樣本即時傳送回實驗室進行分析。而將浮點 FFT 硬體應用於 DHM 硬體上,則 可增加其計算的精確度及速度。 然而在浮點 FFT 硬體的設計上所會遭受的問題為浮點 FFT 的設計困難而複雜, 且在浮點 FFT 運算完成後不容易驗證結果之正確性,所以必須透過軟體輔助的方 式來驗證,Matlab 即是一個可用來與硬體作相互驗證的工具,在本論文中將利用 Matlab 所得之結果與硬體運算完之結果作比較,相互驗證其正確性。 本論文的目的為提出浮點 FFT 硬體設計之電路及驗證的方法並將其應用於 DHM 系統中,首先針對 1D FFT 做詳細之討論,包括 Altera Quartus II 浮點 FFT 產生方法、輸入輸出訊號功能以及運作流程,並且利用簡單的例子與 matlab 運算 完之結果驗證 1D FFT 之正確性。接著將 1D FFT 延伸到 2D FFT 上,2D FFT 的 主要電路也是經由 1D FFT 所構成,差別只在於 controller 之設計,此 controller 必須將 2D FFT 所存之矩陣分別依序做列與行的 1D FFT 運算。 接著將我們設計之 2D FFT 應用於數位全像顯微鏡系統上,在數位全像顯微 鏡系統裡的菲涅耳轉換及相位展開皆使用到 2D FFT 之運算,本論文主要討論 2D FFT 在菲涅耳轉換之應用上。菲涅耳轉換在數位全像顯微鏡系統中用來求出全像 圖之相角值,其轉換過程中需經過前轉換單元、快速傅立葉轉換單元以及後轉換 單元,我們所設計之 2D FFT 即是應用在快速傅立葉轉換單元中。由於在菲涅耳 轉換並不是直接將圖像資訊做 FFT 之轉換,而是必須先將全像圖資訊先經過前轉 換單元之運算,轉換後其數值範圍可能會有大幅度的變動,此時再利用浮點數 FFT 2.

(13) 第一章 緒論 來做運算可發揮其運算數值範圍很大之優點,在轉換的過程中利用撰寫 testbench 以及 ModelSim 模擬其結果,經過以上三大單元之計算,即可以求出全像圖之相 角值,最後可以利用 Matlab 軟體輔助將所求出的相角值繪成圖並且比較其精確 度。. 1.2 全文架構 本篇論文共分為五個章節,以下為各章節內容概述: 【第一章】緒論 說明本論文的研究背景、動機、目的、方法及本文架構。. 【第二章】基礎理論及技術背景介紹 說明浮點數表示法、Floating Point FFT 產生過程、Floating Point FFT 電路運 作流程、1D FFT 電路之 testbench 設計及驗證、浮點 FFT 電路實測實例及討論、 1D 浮點 FFT 資源消耗。 【第三章】 2D FFT 電路設計 說明 2D FFT 電路運作流程、Interface 設計概念、address 的配置及使用、 testbench 設計、電路實測實例及討論以及資源消耗。 【第四章】浮點快速傅立葉轉換之應用 說明菲涅耳轉換運算流程、相位展開法則介紹、菲涅耳轉換基本架構及驗證、 浮點快速傅立葉轉換與定點快速傅立葉轉換資源消耗以及精確度比較。 【第五章】結論 對於以上所介紹硬體架構及應用結果進行總結。 3.

(14) 第二章 基礎理論與技術背景介紹. 第二章 基礎理論及技術背景介紹 本章節將介紹本論文所使用的到基本技術背景,第一節將詳細介紹浮點數之 FFT( Fast Fourier Transform ),本研究使用的為 Altera Quartus II 13.0 Megawizard Plug-In Manager 所產生的 Megafunction IP Core,Quartus II 提供許多內建的 IP Core 供使用者使用,我們將重點放在 FFT 的產生方面。第二節詳細介紹 1D FFT 電路 之 testbench 設計及驗證。第三節則使用例子來驗證其正確性。. 2.1 Altera 浮點數 FFT IP Core 介紹 本小節要討論的是如何產生一個可用的浮點數 FFT 電路,產生的 FFT 該如何 使用,如何運作,在討論浮點數 FFT 之前,會先簡單的介紹一下此 FFT 浮點數的 表示方法及其原理,接著再討論浮點 FFT 電路的運作。. 2.1.1 浮點數表示法 數值資料再存放在儲存區塊中,其表示數值的內容可以分為「定點數表示法 與浮點數表示法」兩種。 定點數表示法是在儲存區塊中,明確的規範哪些位元數是用來表示整數值的 大小,那些位元數是用來表示小數值的大小,他們之間有一個無形但很固定的小 數位置,可以自行決定小數的位置,而這個位置關係到整個數值的精確度,所以 是很重要的。 浮點數表示法的基礎是「科學符號法 ( scientific notation )」,所謂科學符號法. 4.

(15) 第二章 基礎理論與技術背景介紹 是指:任一進位制下的數值,均可藉著乘以其基底的次方數來調整其數字內小數 點的位置。浮點數表示法是一種嚴格的科學符號法,它的組成有三個部分,符號、 指數以及小數。. 1.符號 (sign):通常只是一個位元,用來表示正負符號。. 2.指數 (exponent):有若干位元,用來表示基底的次方數。. 3.小數 (fraction):有最多的位元,用來表示數值中真正有效的數字。. 由於浮點數不用自行定義小數的位數,所以在與定點數比較方面擁有比較高 的精確度,可是在運算速度與資源消耗方面可能就略遜於定點數。. 2.1.2 Floating Point FFT 產生過程 開啟 Quartus II 13.0 -> Tools -> Megawizard Plug-In Manager -> Create a new custom megafunction variation -> DSP -> Transforms -> FFT v13.0 依循以上之步驟 就完成了 FFT 之建立。接著詳述 FFT 內部參數的設定,圖 2.1 為參數設定的介面: 在內部參數設定分為三個步驟,Step1:Parameterize、Step2:Set Up Simulation 以及 Step3:Generate。. 5.

(16) 第二章 基礎理論與技術背景介紹. 圖 2.1 FFT 產生介面 Step1: 使用 FFT 之前,必須事先經過模式的選擇,在圖 2.2 Architecture I/O Data Flow 裡有四種模式可供選擇,Streaming、Buffered Burst、Variable Streaming 以及 Burst, 其中 Streaming、Buffered Burst 以及 Burst 並沒有提供 Floating FFT 之功能,因此 本論文使用 Variable Streaming 模式,這個模式不僅是四個模式當中唯一提供 Floating FFT 之功能者,且為單精度的浮點數格式,在資料的傳輸方面,他可以 將一段資料連續的輸入,直到 FFT 做完運算後再將她連續的輸出,並且可以動態 的更改所需 FFT 之長度。在 I/O Order 方面 Input order 與 Output Order 皆選擇 Natural Order,Data Representation 則選擇 Floating Point,Direction 選擇 Bi-directional 可以用來實作 FFT 與 IFFT。. 6.

(17) 第二章 基礎理論與技術背景介紹 圖 2.3 Parameters 欄位之 Target Device Family 可以選擇我們所要使用的晶片 類型,Transform Length 可以選擇 FFT 的長度,Data Input Precision、Twiddle Precision 以及 Data Output Precision 由於為浮點數所以為固定的 32bits,由圖 2.3 中觀察到 Data Output Precision 為 29 bits 為錯誤的,實際上產生之 Data Output Precision 為 32 bits,這邊的 29 bits 可忽略不看。. 圖 2.2 FFT 參數設定(1). Step2: 圖 2.4Generate Simulation Model 及 Generate netlist 皆須打勾,以便我們做 RTL 模擬。 Step3: Generate 後就可以產生所需之 Floating FFT。 7.

(18) 第二章 基礎理論與技術背景介紹. 圖 2.3 FFT 參數設定(2). 圖 2.4 FFT 參數設定(3) 8.

(19) 第二章 基礎理論與技術背景介紹. 2.1.3. Floating Point FFT 電路運作流程. 產生完本論文所需要的 FFT IP Core 之後,接著介紹此 FFT 所使用到之角位及 其溝通方式。表 2.1 與表 2.2 介紹了 FFT 的輸入及輸出腳位。. 表 2.1 FFT 之輸入訊號 Signal Name. Size. Description. clk. 1. clock. reset_n. 1. reset. fftpts_in. FFT 長度. 可變長度 FFT,可自行動態調整. inverse. 1. 0:FFT、1:IFFT. sink_valid. 1. 有效資料已準備好等待接收. sink_sop. 1. 表示輸入資料的開始. sink_eop. 1. 表示輸入資料的結尾. sink_real. 32. Input data 實部. sink_imag. 32. Input data 虛部. sink_error. 2. upstream module 是否有錯誤發生 (Set 0 if it’s not use). source_ready. 準備好開始接收資料. 1. 9.

(20) 第二章 基礎理論與技術背景介紹. 表 2.2 FFT 之輸出訊號 Signal Name. Size. Description. fftpts_out. FFT 長度. 可變長度 FFT,根據 fftpts_in 改變. sink_ready. 1. FFT 本身準備好接受資料. source_sop. 1. 表示第一個有效數據的输出. source_eop. 1. 表示最後一個有效數據的輸出. source_valid. 1. 表示已將有效資料準備好. source_real. 32. Output. data 實部. source_imag. 32. Output. data 虛部. source_error. 2. FFT 是否有 error 發生. 接下來討論的為此 FFT 的運作流程,當外部電路準備將資料送給 FFT 運算時, 會發出 sink_valid 訊號給 FFT 表示有效資料已準備就緒,FFT 電路則將 sink_ready 此訊號線設定為 1,表明有能力接收這些輸入資料,當 sink_valid 與 sink_ready 同 時為 1 時,資料則開始傳輸,外部電路將第一筆資料傳輸到 FFT 電路中,同時將 sink_sop 訊號設定為 1,表示輸入資料的開始,在下一個 clock 之後 sink_sop 則會 被恢復為 0,當最後一筆資料輸入後,sink_eop 被設定為 1,表示輸入資料的結尾, 完成這一段 FFT 數據的傳輸,如果在連續資料來到,則重複上述之過程。 當 FFT 完成轉換後,FFT 電路將 source_valid 設定為 1,表示電路已經運算完 10.

(21) 第二章 基礎理論與技術背景介紹 畢且為有效資料可被接收,外部電路則回傳 sink_ready 告訴 FFT 已經可以準備接 收運算完成的資料,當 FFT 運算完成的第一筆資料被輸出,FFT 電路會將 source_sop 此訊號設定為 1,表示第一筆有效數據的輸出,當最後一筆有效資料 被輸出,FFT 電路將 source_eop 設定為 1,即完成了 FFT 資料的接收、運算以及 輸出。 在 FFT 的運算當中,可能會遭遇到幾種錯誤情況,分別就 sink_error 與 source_error 來做討論 。sink_error 會發生的情況為如果此 FFT 電路所要接收的 upstream module 發生錯誤,此訊號會被設定為 1,即不再往下繼續運作,以免造 成更多錯誤的情況發生。source_error 會發生的情況為 FFT 內部運作時的錯誤或 者是 upstream module 發生錯誤,錯誤的方式又可以分為表 2.3 以下三種, SOP 的遺失、EOP 的遺失以及不可預期的 EOP 發生以下表格將一一做說明。. 表 2.3 FFT 輸出結果之錯誤情況 Error. Source_error. Description. Missing SOP. 01. 當 source_valid 被設定,但 source_sop 卻沒被 設定為 1. Missing EOP. 10. 當 FFT 已接收了 N 個資料,但 source_eop 卻 沒被設定為 1. Unexpected. 11. 在接收到 N 個資料以前,source_eop 卻已被設. EOP. 定為 1. 11.

(22) 第二章 基礎理論與技術背景介紹. 2.2 1D FFT 電路之 testbench 設計及驗證 當我們利用 Quartus II 13.0 Megawizard Plug-In Manager 產生完 FFT 之後,要如 何測試其正確性,需利用一個測試平台配合測試資料才能驗證電路的功能是否正 確,在這裡我們使用的為 test bench,此平台包含待測電路,並可產生測試時序, 針對待測電路進行功能測試,如此才能確認電路的功能是否合於所求。 為什麼要使用 test bench 呢?如果資料為一個簡單訊號之輸入,我們可以直接 透過波形圖來觀察其正確性,但是如果輸入為一個複雜的訊號,透過波形圖會很 難觀察其正確性,所以必須透過 testbench 之撰寫,將輸出記錄到 txt 檔,再配合 matlab 軟體驗證其正確性。 接下來會詳細的討論其 testbench 寫法,以下為 testbench 程式之撰寫方法。由 於 testbench 程式碼過長,利用圖 2.5~圖 2.8 分別做討論。我們 testbench 所要測試 的待測電路名稱為 fft_floating,輸入資料會存放在 test_input_real.txt 及 test_input_imag.txt 檔中,輸出資料會被記錄在 test_output_real.txt 及及 test_output_imag.txt。接下來由圖 2.5,程式的第 1 行`timescale 1ns(訊號顯示時間 刻度)/1ns(電路模擬時間精度)指示當電路模擬器再進行電路模擬時以 1ns 做為訊 號顯示的時間刻度,並以 1ns 為時間精度進行電路訊號之模擬分析。 程式第 3 行為此 testbench 名稱 fft_floating,由於測試平台的主要功能為提供 測試時序,所以不需要有自身的輸入及輸出腳位;程式 4 到 21 行為與待測電路 相連之輸入與輸出腳位,與待測電路輸入相連的腳位必須具有記憶的功能才能描 述其訊號接收的過程,所以必須宣告為 reg,在與待測電路相連的腳位上,由於 只需要接受輸出之訊號,所以只要宣告為 wire;程式 24 到 43 行描述將待測電路 fft_floating 叫入至 testbench 模組內,模組的呼叫方式為先描述待測電路之本名, 12.

(23) 第二章 基礎理論與技術背景介紹 之後再給予一個別名,在腳位與連線方面使用 port map by name 的方式,在 25 到 42 行的敘述不用按照其順序,也可增加其可讀性,在這邊特別注意的是 42 行 .source_imag(source_imag)之後不必加上逗號。. 圖 2.5 testbench 程式碼(1) 由圖 2.6,程式 44 到 53 行為一些我們須用到的參數設定,44 行為我們需要使 用的 FFT 長度,這邊我們使用的為 256 點的 FFT,45 行為每個 clock 週期,在此 我們設定每一個 clock 為 20ns,47 到 50 行為我們所要讀檔寫檔的參數設定,52. 13.

(24) 第二章 基礎理論與技術背景介紹 與 53 行為將實部與虛部輸入資料存放的陣列;56 到 59 為 clock 的跳動,由於我 們 clkper 為 20ns,在 58 行的描述中每隔 10ns clock 會被反轉一次,呈現一個連續 固定週期性的訊號;程式 61 到 73 行透過 always,在 clk 正緣觸發且 FFT 結果 source_valid 被設定時,將結果寫入 test_output_real.txt 與 test_output_imag.txt 檔 中。. 圖 2.6 testbench 程式碼(2) 圖 2.7,initial begin 開始即自時間 0 開始,每當遇到#time 即表示當時間經過 #time 時訊號的改變,程式在時間 0 的時候,做開檔的動作,77 到 80 為讀寫檔案, 程式 82 到 88 行將 test_output_real.txt 與 test_output_imag.txt 檔裡所要輸入 FFT 之 實部與虛部資料先存到暫存的陣列裡;程式 89 到 98 行將輸入之訊號做初始化設 14.

(25) 第二章 基礎理論與技術背景介紹 定,其中 98 行的 source_ready 被設定為 1,表示 FFT 已準備好接收資料;程式 101 行為將 reset_n 設定為 1,否則在 reset_n 為 0 時電路會被從置,無法運作。. 圖 2.7 testbench 程式碼(3). 圖 2.8,程式 104 到 109 行表示 FFT 收到的第一筆資料且資料是 valid,所以 sink_valid 與 sink_sop 被設定為 1,在第一筆資料接收時會順便設定此 FFT 之長度, 所以 fftpts_in 被設定為 256,表示做 256 點之 FFT,接著將 flash_real[0]與 flash_imag[0]分別輸入到 FFT 之 sink_real 與 sink_imag 裡;程式 111 到 118 為一 個 for 迴圈,此時將 flash_real[1~254]與 flash_imag[1~254]也就是第 2 筆到第 255 筆資料連續輸入到 sink_real 與 sink_imag;最後程式 120 到 125 行為 FFT 接收到 15.

(26) 第二章 基礎理論與技術背景介紹 最後一筆資料,sink_eop 會被設定為 1,flash_real[255]與 flash_imag[255]也就是 第 256 筆資料會被輸入到 sink_real 與 sink_imag。當連續 256 筆資料被送入 FFT 當中,即開始做 FFT 運算,以上即為控制 FFT 訊號之基本設定。 這邊還有一個必須注意的是,由於我們使用的為浮點數 FFT,在輸入資料格 式上應為浮點數之格式,以十進位 100 來說,浮點 FFT 是無法知道其值為 100, 所以必須將 100 轉為浮點數的格式即為十六進位 42c80000 或十進位 1120403456, 輸出亦為浮點數十六進位或十進位的格式,浮點數之格式在 2.1.1 節有做簡單之 介紹。 當我們所需之 testbench 設計完成之後,如何進行電路的模擬,我們將以 ModelSim ALTERA 10.1d 此電路模擬器進行模擬,模擬結果與軟體 Matlab 相互 驗證其結果,如何將硬體電路與 Matlab 結果比較,下一節將有更詳細之介紹。. 圖 2.8 testbench 程式碼(4) 16.

(27) 第二章 基礎理論與技術背景介紹. 2.3 浮點 FFT 電路實測實例及討論 此節我們使用了幾個簡單的例子,分別利用硬體描述語言以及軟體 matlab 來 驗證其我們所建立的浮點數 FFT 之正確性,分別以在 Time domain 下的值與做完 FFT 之後 Frequency domain 的值來觀察驗證其正確性。圖 2.9 為 Matlab 與硬體相 互驗證之流程圖。. Input data. 軟體. 硬體. FFT軟體程式 (透過Matlab). FFT硬體電路 (透過ModelSim及 Quartus II) 繪圖及資料分析 (透過Matlab). 繪圖及資料分析 (透過Matlab) 比較及驗證. 圖 2.9 Matlab 與硬體電路驗證流程圖. Matlab軟體方面如何與硬體做比較,接下來我們會先介紹matlab的運作流程, 在比較軟體與硬體前需要兩個相同之輸入,圖2.10為將輸入資料之Time domain繪. 17.

(28) 第二章 基礎理論與技術背景介紹. 圖2.10 利用matlab將matlab執行 FFT之結果及Time domain繪圖. 圖及matlab做完FFT後所繪之Frequency domain圖,程式第4第5行為將輸入資料利 用讀檔讀出分別為實部與虛部,此輸入資料為與硬體相同之浮點數十六進位數值, 程式6到12行為將txt讀出資料寫入陣列中,由於matlab所接受之值為十進位定點數 格式,所以在程式第14及15行及為將十六進位浮點數轉為十進位定點數,其指令 18.

(29) 第二章 基礎理論與技術背景介紹 為 hexsingle2num,程式17到19行為將實部與虛部合併為一複數,程式21到27行 為將Time domain之圖繪出,所使用到的為plot畫圖指令,程式29到31行分別為將 此輸入做快速傅立葉轉換、將結果做絕對值以及將最終結果頻率壓縮為(-π, π]之 間,最後同樣以plot將Frequency domain的圖畫繪出。 FFT電路所計算完成的結果, 也可透過matlab將其Frequency domain的圖畫繪出,由圖2.11,其使用方法與圖2.10 相同,即不再多做介紹。. 圖2.11 利用matlab將FFT運算完之結果畫圖. 19.

(30) 第二章 基礎理論與技術背景介紹 硬體描述語言方面,由於本論文使用的為 Quartus II 13.0,所以必須配合 ModelSim 並利用撰寫 testbench 來給定需設定的訊號,透過模擬波型圖來進行時 序的分析,透過上節所討論之 testbench 撰寫方法,我們使用了三個簡單的例子來 進行驗證,首先為輸入資料為一個脈衝,其次為輸入資料為一個整數,最後輸入 資料為一個腦波資料,這三個例子我們都使用了 256 點的 FFT 來做測試。 Example 1:輸入為一個脈衝 x[n]=(100,0,0,…,0)共 256 個點,使用此資料作為輸 入的目的為簡單且可以直接在波形圖當中觀察其結果,當我們輸入為一個脈衝時, 我們預期的結果應該為一個常數,也就是當輸入資料為(100,0,0,0,…,0)輸出資料應 為(100,100,100,…,100),接下來我們就利用硬體來驗證是否與我們預期符合。 Verilog:由於硬體所接收的為浮點數格式,所以必須將 x[n]轉為浮點數之格式, x[n]=(42C80000,0,0…,0 )共 256 個點, 根據 ModelSim 輸出的波形可以上節中 testbench 的轉寫相互對照,由圖 2.12 可以觀察到,當 reset_n 由 0 轉為 1,FFT 即 開始接收資料,fftpts_in 為我們所需要的 FFT 長度,此例我們使用的為 256 點之 FFT,sink_valid 與 source_ready 被拉起表示已經準備開始接收資料且資料也已準 備好,當收到的第 1 筆資料被送入 FFT 電路時,外部電路會將 sink_sop 拉起,第 1 筆資料 42c80000 被送到 sink_real,00000000 被送到 sink_imag,之後的第 2 筆 到 256 筆皆為 00000000,其中在圖 2.13 中可看到當輸入資料為此 FFT 之最後一 筆時也就是第 256 筆時,外部電路會將 sink_eop 拉起,所需之脈衝被輸入到 FFT 當中,開始做 256 點之 FFT 運算。. 20.

(31) 第二章 基礎理論與技術背景介紹. 圖 2.12. 脈衝之起始輸入. 圖 2.13. 脈衝之最終輸入. 接著看到輸出的部分,圖 2.14 可以看到當計算完的 FFT 結果準備輸出時 source_valid 以及 sink_ready 會被拉起,表示 FFT 輸出已經準備好且外部電路也 可以準備開始接收,當第 1 筆輸出資料 42c80000 由實部 source_real 被輸出,FFT 會將 source_sop 被拉起,虛部 source_imag 輸出則為 00000000,接著第 2 到 256 筆資料陸續被輸出,由圖 2.15 可看到,最後一筆資料被輸出,FFT 則將 source_eop 拉起,完成了 FFT 之運算。由於輸入資料為一個脈衝,所以在輸入及輸出方面透 過波形圖就可以看出其輸出為(42c80000,42c80000,42c80000,...,42c80000),經過轉 換後與我們預期為一致的,我們也可透過 matlab 更進一步與之做比較。. 21.

(32) 第二章 基礎理論與技術背景介紹. 圖 2.14. 脈衝之起始輸出. 圖 2.15. 脈衝之最終輸出. Matlab:首先使用 matlab 將 x[n]在 Time-domaim 之下的圖形畫出,由圖 2.16 可見, 輸入的第一個點數為 100 其餘皆為 0。接著利用 matlab 之’ fft ’指令將 x[n]從 Time-domaim 轉為 Frequency-domain,並將其頻率壓縮在(-π, π]之間,硬體輸出結 果也透過 matlab 軟體將其頻率壓縮在(-π, π]之間,由’ plot ‘指令將圖繪出,如圖 2.17、圖 2.18,由於我們所輸入的為一個脈衝,經過 FFT 之輸出應為一個整數, 由圖 2.17 及圖 2.18 可以觀察到其輸出值皆為 100 整數,由此可驗證 matlab 與硬 體所輸出之結果是一致的。. 22.

(33) 第二章 基礎理論與技術背景介紹. 圖 2.16. 圖 2.17. 脈衝經 matlab 所繪 Time-domain 之圖. 脈衝經由軟體 FFT 結果透過 Matlab 所繪之圖. 23.

(34) 第二章 基礎理論與技術背景介紹. 圖 2.18. 脈衝經由硬體電路 FFT 結果透過 Matlab 所繪之圖. Example 2:輸入資料為一個常數 x[n]=(100 100 100 …100),使用此資料作為輸 入的目的與上例相同,亦於在波形圖當中直接觀察其結果,當我們輸入為一個常 數時,我們預期的結果應該為一個脈衝,也就是當輸入資料為(100,100,100,…,100) 輸出資料應為(25600,0,0,…,0),接下來我們就利用硬體來驗證是否與我們預期符 合。 Verilog:硬體所接收的資料為浮點數格式,將 x[n]轉為浮點數之格式, x[n]=(42c80000,42c80000,42c80000…,42c80000)共 256 個點,根據圖 2.19 當 reset_n 由 0 轉為 1,FFT 即開始接收資料,fftpts_in 為我們所需要的 FFT 長度,sink_valid 與 source_ready 被拉起表示已經準備開始接收資料且資料也已準備好,當收到第 1 筆資料時 sink_sop 會被外部電路拉起,第 1 筆資料 42c80000 被送到實部 sink_real, 虛部 sink_imag 皆為 00000000,之後的第 2 筆到 256 筆實部皆為 42c80000,其中 在圖 2.20 中可看到當輸入資料為此 FFT 之最後一筆時也就是第 256 筆時,外部 24.

(35) 第二章 基礎理論與技術背景介紹 電路會將 sink_eop 設定為 1,開始做 256 點之 FFT 運算。. 圖 2.19 常數之起始輸入. 圖 2.20 整數之最終輸入 接著看到輸出的部分,圖 2.21 可以看到當計算完的 FFT 結果準備輸出時 source_valid 以及 sink_ready 會被拉起,表示 FFT 輸出資料已經準備好且外部電 路也可以準備開始接收,當 source_sop 被 FFT 電路拉起時代表此為第 1 筆輸出資 料,46c80000 由實部 source_real 被輸出,虛部 source_imag 輸出則為 00000000, 接著第 2 到 256 筆資料陸續被輸出。由圖 2.22 可看到,最後一筆資料被輸出,FFT 電路將 source_eop 設定為 1,完成了 FFT 之運算。由輸入皆為常數的情況下我們 預期在第一個輸出應為常數之加總,其餘應皆為 0,從圖 2.21、圖 2.22 波形圖中 觀察到第一筆輸出的確為常數加總,雖然其餘不皆為 0,但經過轉換後其值為趨 25.

(36) 第二章 基礎理論與技術背景介紹 近於 0 之小數,也可符合我們之預期。. 圖 2.21 整數之起始輸出. 圖 2.22 整數之最終輸出 Matlab:首先使用 matlab 將 x[n]在 Time-domaim 之下的圖形畫出,由圖 2.23 可見, 輸入的點皆為 100。接著利用 matlab 之’ fft ’指令將 x[n]從 Time-domaim 轉為 Frequency-domain,並將其頻率壓縮在(-π, π]之間,硬體輸出結果也透過 matlab 軟 體將其頻率壓縮在(-π, π]之間,由’ plot ‘指令將圖繪出,如圖 2.24、圖 2.25,當輸 入的為一個常數,經過 FFT 之輸出應為一個脈衝,由圖 2.24 及圖 2.25 可以觀察 到其輸出值為一脈衝,且與我們預期相同為常數之加總,由此可驗證 matlab 與硬 體所輸出之結果是一致的。. 26.

(37) 第二章 基礎理論與技術背景介紹. 圖 2.23. 圖 2.24. 常數經由 matlab 所繪 Time-domain 之圖. 常數經由軟體 FFT 結果透過 Matlab 所繪之圖. 27.

(38) 第二章 基礎理論與技術背景介紹. 圖 2.25. 常數脈衝經由軟體 FFT 結果透過 Matlab 所繪之圖. Example 3:輸入為一個腦波資料,此資料是透過腦波儀器紀錄所得,我們所 擷取到的腦波資料為一隨機資料,且無固定規則,我們無法輕易的從波形圖當中 去觀察其輸入及輸出資料,也很難由肉眼直接觀察其正確性,所以在一組複雜數 子之下,我們勢必得配合 matlab 軟體工具,透過畫圖將硬體與軟體所做之 FFT 進行比較,並且驗證其正確性。 Verilog:硬體所接收的資料為浮點數格式,將 x[n]轉為浮點數之格式,根據圖 2.26 當 reset_n 由 0 轉為 1,FFT 即開始接收資料,fftpts_in 為我們所需要的 FFT 長度, sink_valid 與 source_ready 被拉起表示已經準備開始接收資料且資料也已準備好, 當收到的第 1 筆資料時外部電路會將 sink_sop 拉起,第 1 筆資料被送到實部 sink_real,與虛部 sink_imag,之後的第 2 筆到 256 筆資料陸續被輸入,在圖 2.27 中可看到當輸入資料為此 FFT 之最後一筆時也就是第 256 筆時,外部電路會將 28.

(39) 第二章 基礎理論與技術背景介紹 sink_eop 拉起,開始做 256 點之 FFT 運算。. 圖 2.26 腦波之起始輸入. 圖 2.27 腦波之最終輸入. 接著看到輸出的部分,圖 2.28 可以看到當計算完的 FFT 結果準備輸出時 source_valid 以及 sink_ready 會被拉起,表示 FFT 輸出資料已經準備好且外部電 路也可以準備開始接收,當 FFT 將 source_sop 設定為 1 時代表此為第 1 筆輸出資 料,接著第 2 到 256 筆資料陸續被輸出,由圖 2.29 可看到,最後一筆資料被輸出, source_eop 則被拉起,完成了 FFT 之運算。由於輸入之資料為腦波資訊,無法直 接觀察之正確性,所以必須透過 Matlab 軟體來驗證。. 29.

(40) 第二章 基礎理論與技術背景介紹. 圖 2.28 腦波之起始輸出. 圖 2.29 腦波之最終輸出. Matlab:首先使用 matlab 將腦波訊號在 Time-domaim 之下的圖形畫出,由圖 2.30 見,為一個上下震動之波形。接著利用 matlab 之’ fft ’指令將腦波訊號從 Time-domaim 轉為 Frequency-domain,並將其頻率壓縮在(-π, π]之間,硬體輸出結 果也透過 matlab 軟體將其頻率壓縮在(-π, π]之間,由’ plot ‘指令將圖繪出,如圖 2.31 圖 2.32,由於我們所輸入的為一個複雜的數,經過 FFT 之輸出亦為一個上下 震動之波形,由圖 2.31 及圖 2.32 可以觀察到 matlab 與硬體所輸出之結果是一致 的。 根據以上三個例子,從產生、運作流程以及最後驗證其正確性將可看出,由 Quartus 所產生的的浮點數 FFT 將可被我們應用在接下來的整個電路架構中。. 30.

(41) 第二章 基礎理論與技術背景介紹. 圖 2.30 腦波資訊經由 Matlab 所繪 Time-domain 之圖. 圖 2.31 腦波資訊經由軟體 FFT 結果透過 Matlab 所繪之圖. 31.

(42) 第二章 基礎理論與技術背景介紹. 圖 2.32 腦波資訊經由硬體電路 FFT 結果透過 Matlab 所繪之圖. 2.4 1D 浮點 FFT 資源消耗 最後我們將個點數之浮點 FFT 所使用的資源消耗做比較,我們分別就硬體的 主要要三大部分做比較,分別為 ALMs、Memory Block Bits 以及 DSP Block。ALMs 被用於實現暫存器及運算單元;Memory Block Bits 主要用於實現暫存器或記憶體 元件;DSP Block 則是被用來實現數值運算中除法器與乘法器等元件。. 表 2.4 各長度浮點 FFT 資源消耗表 Size. ALMs. Memory Block Bits. DSP Block. 128. 12391. 39708. 48. 256. 12482. 47900. 48. 512. 15779. 170008. 48. 32.

(43) 第二章 基礎理論與技術背景介紹 由表 2.4 中可知由於 ALMs 與暫存器之多寡有關,因為在不同長度時需要不同 大小之暫存器空間,所以 ALMs 會隨著 FFT 之長度增加而增加。由於 FFT 在不 同長度時需要不同大小之資料暫存空間,Memory Block Bits 即是用來組成 FFT 模組之暫存器,所以在 Memory Block Bits 之消耗方面會隨著 FFT 之長度不同而 有所改變。DSP Block 主要用來實現 FFT 模組中乘法器設計,乘法器的數量在不 同長度時皆為定值,在此 FFT 模組中消耗之 DSP Block 皆為 48。. 33.

(44) 第三章 2D FFT 電路設計. 第三章 2D FFT 電路設計 本章節所要討論的為二維的快速傅立葉轉換,其運作原理與我們上一章節所 討論的一維快速傅立葉轉換一樣,其不同的地方在於 controller 之設計,假定 1D FFT 為一個 N 點的 FFT,在運算時只需要經過一次的 FFT 運算即可完成,但在 2D FFT 來說為一個 N 乘 N 的矩陣,雖然運作方式與 1D FFT 相同,但 2D FFT 必 須將列與行分別做快速傅立葉轉換,也就是必須做 2N 次的 FFT 運算才能得到最 終結果。 在第二章的介紹中,一維快速傅立葉轉換時我們直接控制其輸入腳位,但是 在信號的控制上由於腳位複雜,導致我們在給定訊號時的不方便,而且在資料的 存取方面,並不容易。如果要延伸為 2D FFT,我們必須考慮到其運作 FFT 次數, 資料存放等問題,所以我們希望設計一個系統,可以直接利用外部電路來控制 FFT 內部之訊號,並且可直接存取資料。. 3.1 2D FFT 電路運作流程 接下來我們透過 controller 的設計,並且利用 on-chip RAM 的存取來設計一個 完整的 FFT 系統,可應用在 1D 與 2D FFT 運算之上。在主要的 FFT 電路上,1D 與 2D 皆使用相同電路,主要差別在於 controller 的設計上,在此章節主要把焦點 放在二維快速傅立葉轉換的設計上。 圖 3.1 為 1D FFT 電路基本架構,由圖我們可以看到,整個 1D FFT 電路架構 是由 controller、on-chip RAM 以及 FFT 所構成。controller 之實現為 FSM,利用 狀態的轉換來控制 FFT 所需之訊號,其中又將 controller 分為 controller_in 以及 controller_out。controller_in 用來開啟 FFT 之計算,計算記憶體位址並將相對應的 34.

(45) 第三章 2D FFT 電路設計 資料讀取出來。controller_out 用來計算記憶體位址將 FFT 運算完的結果存回相對 應的地址中,並且送出 FFT 運算結束之訊號。on-chip RAM 在這邊有主要三個功 能,第一為儲存運算單元的資料輸入來源,其次為儲存計算過程中暫時性資料, 最後則是儲存計算完成的最終結果。. 圖 3.1 1D FFT 電路基本架構. 接下來會詳細介紹 2D FFT 電路運作流程,假定我們所要計算的為 N 乘 N 的 2D FFT,總共需要兩個 controller、兩個 on-chip RAM、一個 N 點的 1D FFT。 圖 3.2 到圖 3.4 為將輸入資料送入 FFT 運算之運作圖。由圖 3.2,當 fft_cntrl_en 被設定,controller_in 即開始做動,controller_in 將 sink_sop 與 sink_valid 送到 FFT, 表示收到第一筆有效資料,同一時間計算記憶體位置將 fft_rd 及 fft_add_rd 送入 RAM 中,將第一筆資料 ram_out_real 及 ram_out_imag 從 RAM_real 及 RAM_imag 中取出輸入到 FFT 等待做運算。圖 3.3 依序將 2 到 255 筆資料送入 FFT 計算。圖 3.4, controller_in 將 sink_eop 送入 FFT,表示最後一筆有效資料被接收。. 35.

(46) 第三章 2D FFT 電路設計. 圖 3.2 1D FFT 運作圖(1):將第 1 筆有效資料送入 FFT 等待運算. 圖 3.3. 1D FFT 運作圖(2):將第 2 筆到第 255 筆有效資料送入 FFT 等待運算. 36.

(47) 第三章 2D FFT 電路設計. 圖 3.4 1D FFT 運作圖(3):將最一筆有效資料送入 FFT 等待運算. 圖 3.5 1D FFT 運作圖(4):FFT 運算完畢通知 controller_out. 此時 FFT 電路開始運算,由圖 3.5,當 fft_floating 計算之結果輸出時, source_valid 訊號會送入 controller_out,controller_out 計算記憶體位置將 fft_wr 及 fft_addr_wr 送到 RAM 中,計算完畢的資料 source_real 及 source_imag 則被存到 RAM_real 及 RAM_imag 中。經過圖 3.3 到圖 3.5 流程圖及完成 1D FFT 之運算。. 37.

(48) 第三章 2D FFT 電路設計. 圖 3.6 2D FFT 電路流程圖 2D FFT 之運算是以 1D FFT 為基礎,圖 3.6 即為 2D FFT 之流程圖,根據以 上的假設,輸入的影像為 N 乘 N,i,j 分別為輸入影像資料所存矩陣之列與行。其 運作流程為,依序由圖 3.3、圖 3.4 以及圖 3.5 將第 i-th 列資料做 1D FFT 運算, 每做完一列,i 則加 1,當 i>N 時,表示 N 列之 1D FFT 皆完成運算。接著同樣依 38.

(49) 第三章 2D FFT 電路設計 序圖 3.3、圖 3.4 以及圖 3.5 將第 j-th 行資料做 1D FFT 運算,每做完一行,j 加 1, 直到 j>N,即表示完成 N 行 1D FFT 之運算,當列與行皆完成 FFT 之運算,即為 2D FFT 所需之結果。 以上是將 1D FFT 延伸到 2D FFT 的運作流程,由於我們所使用的 FFT IP Core 為 variable streaming 模式,streaming 模式之特點為資料是以連續的方式輸入,等待 計算完畢後資料也連續的輸出,也就是說在讀寫資料時同時也可以做 FFT 之運算, 由圖 3.7,在 1D FFT 的運算過程中包含了 Loading phase、FFT computation 以及 Writing phase 三個部分,Loading phase 與 Writing phase 為資料的長度 N,FFT computation 則為 FFT 的計算時間 L。由圖可知 1D FFT 的 Latency 為第 i 列/行 FFT 之第 1 筆輸入到第 i 列/行之第 1 筆輸出,即為 N+L。圖 3.8 及圖 3.9 為 2D FFT 運作的 Timing 圖,2D FFT 的運作流程為先做列方向之 FFT 再做行方向的 FFT, 由圖可以看到所要計算資料是以連續的方式輸入,等待資料輸入完畢後即開始做 FFT 之運算,運算完畢後也將資料連續的輸出,中間並不需要經過等待的時間, 當作完圖 3.8 N 列的 FFT 運算後也是緊接著做圖 3.9 N 行 FFT 之運算,在列方向 及行方向的 FFT 所花的時間皆為. ,總共所花的時間為 2(. 圖 3.7 1D FFT Streaming Timing 圖 39. )。.

(50) 第三章 2D FFT 電路設計. 圖 3.8 2D FFT Streaming Timing 圖(1). 圖 3.9 2D FFT Streaming Timing 圖(2). 40.

(51) 第三章 2D FFT 電路設計. 3.2 Interface 設計概念 一般而言根據法則設計出來的硬體電路架構視為我們的客製化電路,如果要 應用在 FPGA 板子上,是無法直接溝通的,為了使我們所設計的硬體電路,在未 來可以應用在 FPGA 板子上,我們要設計一個 interface,用來使 cpu 可與客製化 電路做溝通。interface 的設計最主要的部分為 decoder,decoder 最主要的功能為 將從 cpu 而來的資料經過 decoder 解碼分析,將所分析出的訊號,傳送到所要運 算之單元。 接下來我們將設計完的 interface、controller、on-chip RAM 以及 FFT 電路做 整合,其中我們藉由多工器的控制來決定資料由 cpu 直接從記憶體中做讀取亦或 是要將資料從記憶體當中取出交由 FFT 計算,並且將計算完之結果存回記憶體當 中。將以上每個 module 整合後即為整體之待測電路,我們做整合的方法為使用 Verilog 之結構模式將所有的小 module 透過接線的方式做溝通,以下即為我們整 合後之程式碼。 圖 3.10 到圖 3.16 為將 interface、controller、on-chip RAM、FFT 電路以及多 工器整合後的程式碼,由圖 3.10,程式 2 到 10 行為待測電路角位,待測電路名 稱為 FFT_2D_top,程式 13 到 20 行為待測電路之輸出及輸入宣告,程式 23 到 36 行為待測電路與 on-chip RAM 相連之接線。. 41.

(52) 第三章 2D FFT 電路設計. 圖 3.10 測電路程式碼(1). 圖 3.11 為待測電路與 interface 及 FFT 之接線。圖 3.12 為 interface,其名稱 命名為 regfile,此 interface 的主要功能為將 cpu 所發出之訊號,透過 decoder 的 分析將即將運作的電路所需之訊號送入。. 42.

(53) 第三章 2D FFT 電路設計. 圖 3.11 電路程式碼(2). 圖 3.12 電路程式碼(3). 43.

(54) 第三章 2D FFT 電路設計. 圖 3.13 測電路程式碼(4). 圖 3.14 測電路程式碼(5) 44.

(55) 第三章 2D FFT 電路設計. 圖 3.15 電路程式碼(6). 圖 3.16 電路程式碼(7). 45.

(56) 第三章 2D FFT 電路設計 圖 3.13 及圖 3.14 為記憶體實部與虛部部分,在每個記憶體之前都有三個多 工器,其功能分別為選擇資料來源以及讀寫之記憶體位址。多工器也是透過 regfile 所控制,控制其資料直接從記憶體中讀取資料亦或是將 FFT 做所需之資料讀出做 運算,並且接收 FFT 計算之結果。 圖 3.15 為 controller,透過 regfile 的分析,給定 controller 訊號,當 controller_in 收到 fft_cntrl_en,controller_in 則會透過狀態的轉換,並計算記憶體位址將 on-chip RAM 中的資料取出交給圖 3.16 的 FFT 電路做運算,當 FFT 運算完透過 controller_out 所計算之記憶體位址,將運算完之結果存回 on-chip RAM 當中。. 3.3 2D FFT 電路之 testbench 設計 本節所要介紹的為 2D FFT 電路之 testbench 設計,根據我們上節所介紹之待 測電路撰寫所需之 testbench,上節所介紹之待測電路包含了 interface 與客製化電 路。為什麼要以整體的電路去撰寫 testbench 呢?為什麼不直接對客製化電路做控 制?最主要的原因為透過撰寫整體電路之 testbench 可以使我們的電路直接模擬 cpu 的運作行為,如果可以透過此 testbench 模擬成功,在未來如果要應用到 FPGA 晶片上,成功的機率將會大大提升。. 3.3.1 address 的配置及使用 在介紹 testbench 之設計前,我們先將焦點放在 address 的配置及使用上,在 我們整體帶測電路上,宣告 address 為 21bits:address[20:0],其中 MSB 的 3bits: address[20:18]設計成為一個 decoder,由表 3.1 知,此 decoder 有兩個主要之功能, 一為打開運算功能,二為記憶體之存取。. 46.

(57) 第三章 2D FFT 電路設計 表 3.1 address 之 LSB:address[20:18]設定之描述 address[20:18]. Description. 000. 打開運算功能. 001. 打開實部記憶體的存取. 011. 打開虛部記憶體的存取. 當 address[20:18]為 000 時,會開啟運算之功能,此時 LSB address[17:0]亦為 一個 decoder,用來指定運算之功能,其功能為表 3.2 所示,當 address 為 4,write_data 為 0 時會藉由多工器的設定使 cpu 可以直接從 on-chip RAM 中讀寫。當 address 為 5,write_data 為 0 時將電路做 reset 之動作。當 address 為 7,write_data 為 18 時會透過多工器之設定將 FFT 的 enable 設定為 1,開始 FFT 之運算。. 表 3.2 運算功能之設定 address[17:0]. write_data. Description. 4. 0. 藉由多工器設定使 cpu 可直接從 on-chip RAM 中讀寫. 5. 0. 將電路做 reset. 7. 18. 藉由多工器之設定將 FFT 之 enable 設定為 1. 當 address[20:18]為 001 或 011 時我們將分別開啟實部記憶體及虛部記憶體之 讀寫,此時 address 之 LSB:address[17:0]即用來表示實部記憶體及虛部記憶體所 存取的位址,當 address[20:18]為 001 時,表示用來打開實部記憶體之存取,所以 在資料讀寫 address 之前必須加上一個 bsee address [00100…0]=262144。當. 47.

(58) 第三章 2D FFT 電路設計 address[20:18]為 011 時,表示虛部記憶體被存取,所以在資料讀寫時也必須加上 一個 base address [01100...0]=786432。 經由圖 3.17 與以上討論互相對照,在實部存取時必須加上一個 base address 262144,依序將我們所要的資料以每一 row 的順序存到 address 當中,實部所能 使用的 address 範圍為 262144 ~ 262144+. -1。虛部亦相同,必須加上一個 base. address 786432 依序將我們所要的資料以每一 row 的順序存到 address 當中,虛部 所能使用的 address 範圍為 786432 ~ 786432+. -1。透過以上之介紹,接下來我們. 會將此節所討論的記憶體配置方式應用在下一小節 testbench 的撰寫上。. 圖 3.17 RAM_real 與 RAM_imag 所能存取的 address 範圍 48.

(59) 第三章 2D FFT 電路設計. 3.3.2. testbench 設計. 此節我們將討論經過整合後完整帶測電路的 testbench 撰寫方法,圖 3.18 程 式的第 1 行`timescale 1ns(訊號顯示時間刻度)/1ns(電路模擬時間精度)指示當電路 模擬器在進行電路模擬時以 1ns 做為訊號顯示的時間刻度,並以 1ns 為時間精度 進行電路訊號之模擬分析。 程式第 3 行為此 testbench 名稱,將此命名為 FFT_2D_tb;程式 3 到 10 行為 與待測電路相連之輸入與輸出腳位,與待測電路輸入相連的腳位必須具有記憶的 功能才能描述其訊號接收的過程,所以宣告為 reg,在與待測電路輸出相連的腳 位上,由於只需要接受輸出之訊號,所以宣告為 wire;程式 13 到 22 行為待測電 路之腳位,此處待測電路是由 interface:regfile、controller: controller_in,controller_out、on-chip RAM:RAM_real,RAM_imag、多工器:ram_mux 以及主要的運算單元 FFT:fft_floating。我們將這些單元整合為一個 module,叫 入至 testbench 模組內,FFT_2D_top 為待測電路之本名,之後再給予一個別名, 在腳位與連線方面使用 port map by name 的方式,由待測電路的腳位可看到,我 們只需要控制的腳位有 clk,reset_n、avalon_chip_select、address、write、write_data 以及 read,輸出的部分則為 read_data。 在介紹以下之 testbench 之前,根據 3.3.1 節所描述可知,當 cpu 送出訊號時, 會先經過 interface 且透過 decoder 的解碼,將電路所要進行的動作做設定,cpu 會透過不斷的更改 address 及寫入的 write_data 來設定電路所需執行的部分。 程式 24 到 30 為程式需用到的一些參數設定,我們輸入圖像大小為 256x256, 在程式第 24 行為我們使用的 FFT 長度,第 25 行為實部資料與虛部資料個數總和, 此處為 256x256x2。第 26 及第 27 行為實部與虛部輸入資料存放的矩陣。 49.

(60) 第三章 2D FFT 電路設計 程式 30 行為每個 clock 週期,在此我們設定每一個 clock 為 20ns。33 到 35 為 clock 的運作,由於我們 clkper 為 20ns,在 34 行的描述中每隔 10ns clock 會被反 轉一次,呈現一個連續固定週期性的訊號。. 圖 3.18 testbench 程式(1). 圖 3.19 開始為整個 testbench 主程式,由時間 0 開始,程式 39 到 48 行為讀 檔、寫檔以及將檔案中的資料寫到暫存矩陣裡,輸入的資料會存放在名為 lena_in.txt 檔內,輸出資料則記錄到名為 lena_out.txt 檔裡。50 到 56 行做初始設 定;59 行將 reset_n 設定為 1,否則在 reset_n 為 0 時電路會被從置,無法運作。. 50.

(61) 第三章 2D FFT 電路設計. 圖 3.19 testbench 程式(2). 圖 3.20,程式 62 到 65 行,當我們要做記憶體讀寫之前都必須先設定此訊號, 藉由多工器的設定使 cpu 可以在 on-chip RAM 上做讀寫;程式 68 到 90 行為將輸 入資料從 lena_in.txt 寫入 on-chip RAM 當中,這邊需要注意的為 address 的部分, 根據 3.3.1 節的討論,在將資料存入 address 時我們必須加上一個 base address,由 圖 3.20 可知我們將實部資料與虛部資料分別存放在一個特定範圍內,所以在實部 必須加上一個 base address 262144,虛部加上一個 base address 786432。由圖 3.20 程式 75 行與 87 行可知,在實部部份加上一個 base address 262144,虛部部分則 加上 786432。. 51.

(62) 第三章 2D FFT 電路設計. 圖 3.20 testbench 程式(3). 圖 3.21 為整個電路的核心部分,執行 FFT 的運算,根據 3.3.1 節之介紹, 要執行 FFT 運算之前,程式 94 到 98 行會先將電路做 reset,把之前的設定 reset 掉。程式 101 到 105 行為打開 FFT 之控制訊號,這些訊號會透過 interface,經由 decoder 的分析,將 FFT 之運作打開,等待 FFT 運算完畢,程式 108 到 112 行隨 即將 FFT 訊號關閉,這當中程式 106 行的等待時間會根據所做的 FFT 長度改變。 最後,圖 3.22 為將計算完的資料讀出,並且寫入到 lena_out.txt 檔中以便接 下來的電路使用,程式 128 與 140 行 address 部分同上述寫入記憶體方式相同。. 52.

(63) 第三章 2D FFT 電路設計. 圖 3.21 testbench 程式(4). 圖 3.22 testbench 程式(5). 53.

(64) 第三章 2D FFT 電路設計. 3.4 二維 FFT 電路實測實例及討論 此章節我們使用一個例子來做驗證,我們找了一個廣為人知的圖檔 Lena,圖 3.23,Lena 為一張數位圖像,此張圖像長久以來被廣泛地使用在影像壓縮成果測 試上,研究影像壓縮理論的學者們都以此張圖檔作為樣本來比較他們研究成果的 優異。本節也透過將 Lena 圖像當作輸入進行快速傅立葉轉換,分別利用硬體電 路以及 Matlab 軟體做運算,將執行完的結果相互比較。首先我們使用的與上一章 節相同為 256 點之 FFT,所以我們必須先將 Lena 的大小調整為 256X256 大小當. 圖 3.23 Lena 數位圖像 作硬體與軟體之輸入。軟體部分直接使用 matlab 內建 FFT 指令做 2D FFT,並且 將頻率壓縮在(-π, π]之間,將執行完畢結果繪成圖片。 圖 3.24 為 Matlab 之程式碼,這裡我們使用到的指令有程式第 3 行 imread:將一 個圖像讀入並利用矩陣方式儲存,我們所讀入的圖像為’Lena_512.bmp’。程式第 4 54.

(65) 第三章 2D FFT 電路設計 行 imresize:改變圖片大小,在此我們使用 256X256 之大小。程式第 6 行,存為 一個’to_fft_lena256.txt’,此為軟體與硬體之輸入資料。程式第 8 與第 9 行依序透 過程式 16 到 21 此 function 做 FFT 列與行之運算。程式 12 及 13 行為將其結果做 平方相加取 log 值,並且將頻率壓縮在(-π, π]之間。14 行指令 imshow:為將矩陣 繪畫成圖。mat2gray 為將數值做規一化的處理,由於 Lena 圖為灰階 uint8 之類型, 所以必須經過 mat2gray 將值依比例處理為 0~255 之間的 double 值。圖 3.26 為 Lena 圖經過 Matlab FFT 完成後 Frequency domain 之圖。. 圖 3.24 Lena 數位圖像經過 Matlab FFT 運算及繪圖 將相同輸入資料透過我們所設計之電路,不容易利用波形圖直接觀察,所以 我們利用撰寫 testbench 之方法,將結果存到 Lena_out.txt 檔中,最後再透過 Matlab 55.

(66) 第三章 2D FFT 電路設計 讀出,將資料壓縮在(-π, π],繪成其 Frequency domain 之圖,圖 3.25 為硬體執行 完結果透過 Matlab 處理之程式碼。. 圖 3.25. Lena 數位圖像經過電路運算之結果利用 Matlab 及繪圖. 圖 3.27 為硬體結果所繪之 Frequency domain 之圖。由圖 3.26 與圖 3.27 可看出, Lena 圖像由 Matlab 與硬體分別做 2D FFT 並將頻率壓縮在(-π, π],低頻的部分會 被集中在中間的地方,所以可以驗證其我們所設計的 2D FFT 之正確性。. 56.

(67) 第三章 2D FFT 電路設計. 圖 3.26 Lena 圖經過軟體 FFT 結果透過 Matlab 所繪之圖. 圖 3.27 Lena 圖經過硬體電路 FFT 結果透過 Matlab 所繪之圖. 57.

(68) 第三章 2D FFT 電路設計. 3.5 2D 浮點 FFT 資源消耗 在 2D 浮點 FFT 設計中比 1D FFT 多使用到 controller 及 On-chip RAM,我們 就 2D FFT 模組及 On-Chip RAM 之資源消耗做討論,與 2.4 節相同,ALMs 被用 於實現暫存器及運算單元;Memory Block Bits 主要用於實現暫存器或記憶體元件; DSP Block 則是被用來實現數值運算中除法器與乘法器等元件。. 表 3.3. 2D FFT 模組在各維度之資源消耗表. Size. ALMs. Memory Block Bits. DSP Block. 128x128. 12222. 39708. 48. 256x256. 12651. 47904. 48. 512x512. 14443. 170008. 48. 表 3. 4. On-chip RAM 模組在各維度之資源消耗表. Size. ALMs. Memory Block Bits. DSP Block. 128x128. 123. 1048576. 0. 256x256. 255. 4194304. 0. 512x512. 510. 16777216. 0. 由表 3.2,ALMs 與暫存器之多寡有關,在不同維度時需要不同大小之暫存器 空間,所以 ALMs 會隨著 FFT 之長度增加而有增加的趨勢。由於 FFT 在不同長 度時需要不同大小之資料暫存空間,Memory Block Bits 即是用來組成 FFT 模組之 暫存器,所以在 Memory Block Bits 之消耗方面會隨著 FFT 之維度不同而有所改 變。DSP Block 主要用來實現 FFT 模組中乘法器設計,乘法器的數量在不同長度 58.

(69) 第三章 2D FFT 電路設計 時皆為定值,在此 FFT 模組中消耗之 DSP Block 皆為 48。 表 3.3 為 On-chip RAM 所消耗之資源,ALMs 用來實現暫存器的數量,所以在 ALMs 的消耗上會依為度不同而增加。在本設計的嵌入式記憶體單元中,主要就 是由 Memory Block Bits 所組成,由表 3.3 中可發現 On-chip RAM 所消耗的 Memory Block Bits 是會根據 FFT 之維度有明顯差異。在嵌入式記憶體中並無始 到乘法器或除法器,所以 DSP Block 之消耗為 0。 觀察表 2.4 與表 3.2 可發現,雖然 2D FFT 的設計上多用到了 controller,可是 在資源消耗方面與 1D FFT 並沒有太大的差異。. 59.

(70) 第四章 浮點快速傅立葉轉換之應用. 第四章 浮點快速傅立葉轉換之應用 根據上兩章所介紹之快速傅立葉轉換,我們試圖將他應用在更複雜之法則上, 也就是我們本論文最大的重點應用,此應用即為數位全像顯微鏡系統(Digital Holographic Microscopy,DHM),數位全像顯微鏡系統可以完全重建出物體實際的 樣子,但是必須經過一套繁瑣的還原過程,其中包括利用菲涅耳轉換取得相角值, 再利用相位展開法則重建連續相位圖。而在菲涅耳轉換及相位展開中皆會分為前 轉換單元、快速傅立葉轉換單元以及後轉換單元,其中快速傅立葉轉換單元可以 使用到本論文前兩章所討論的方式實現。再接下來的小節當中我們將分別介紹數 位全像顯微鏡系統所使用的菲涅耳轉換及相位展開法則的運算流程,並詳細討論 其驗證過程,本論文主要交焦點集中在菲涅耳轉換及其驗證上。. 4.1 菲涅耳轉換運算流程 在菲涅耳轉換中,以全像片平面的複數振幅為輸入,取得物體的複數振幅資 訊之後,首先要先進行數值重建,因此,本節將介紹本應用所需之Fresnel Transform 近場繞射公式及其數值重建方法。 菲涅耳轉換(Fresnel transform)又稱菲涅耳近似式(Fresnel approximation),可以 由Huygens-Fresnel principle[14]的積分式推導出菲涅耳轉換式,其公式為(4.1)。 ∑. ∑. [. ]. 假設影像之長與寬皆為 N,先令 且 此三者皆設為定值,而. (. ). (4.1). 為某一數位全像片之影像資訊,其中. ,λ 為波長,z 為傳播距離, 為計算時所需要的常數值, 可由. 導出,也為一定值,關係式如式(4.2) ,. 60.

(71) 第四章 浮點快速傅立葉轉換之應用 (4.2) 從公式(4.1)中,與. 相乘之指數函數可依指數加法律整理得公式(4.3),並將其重. 新定義為 μ,如公式(4 .4), (4.3) , 公式(4.4)與全像片影像資訊相乘後得函數 立葉變換所需之輸入資訊, 得函數. ,. (4.4) ,如公式(4.5)。此. 為我們快速傅. 為一週期函數,因此可將其作傅立葉轉換之後可. 維快速傅立葉變換後之結果,如公式(4.6)。本論文中,我們實作. 了浮點數快速傅立葉轉換的電路來計算. ,相關的計算電路將於下一節系統架. 構中加以討論。 (4.5) ∑. ∑. (4.6). 由於菲涅耳轉換式中,λ、z 皆為固定值,因此可定義一定值 α,如公式(4.7), (4.7) 另外,與. 相乘之指數函數也可仿照公式(4.4)定義為. 及 ,如公式(4.8)所示,. , 接著重新整理式(4.1),可得出菲涅耳轉換公式的解. (4.8) ,如公式(4.9)。 (4.9). 在計算出菲涅耳轉換之結果後,為了後續進行相位展開法則運算,必須將 虛部除以實部獲得之 γ 進行反正切函數(arctangent)運算來取得相角(phase) ,如公 式(4.10),. 61.

(72) 第四章 浮點快速傅立葉轉換之應用 (4.10) 根據上述之討論,菲涅耳轉換公式以及由轉換公式求出相角,運算流程以可 整理為以下步驟: ,. Step1:給予數位全像圖數值函數. , ,計算出函數. Step2:經由公式(4.5), ∑. Step3:經由公式(4.6), 換計算. 。. ∑. 。. ,使用二維快速傅立葉轉. ,二維度傅立葉轉換運算步驟如下: 中每一列 x 執行快速傅立葉轉換,. Step3-1:對於函數 果陣列. ,可得運算結. 。. Step3-2:將陣列. 取代函數. 中的第 x 個列向量。. 中每一個列向量都被取代之後,得到一個函數. Step3-3:當. ,即完成 N 列. 之一維快速傅立葉轉換。 中每一行 y 執行快速傅立葉轉換,. Step3-4:接著將函數 結果陣列. 。. Step3-5:將陣列 Step3-6:當. ,可得運算. 取代函數. 中的第 y 個行向量。. 中每一個行向量都被取代之後,得到一個函數. ,即完成二維快. 速傅立葉轉換。 ,將二維快速傅立葉轉換所計算出. Step4:經由公式(4.9), 的. ,求出函數. 。. Step5:經由公式(4.10),. 對函數. 。. 62. 作反正切函數運算,以求出相角.

(73) 第四章 浮點快速傅立葉轉換之應用. 4.2 相位展開法則介紹 在想位展開法則上採用的演算法同樣是以快速傅立葉轉換為基礎的相位展 開法則,此演算法所計算出來結果為一個最小平方誤差解(minimum squared error solution),接著會針對此相位展開法則[16]作基本的運作流程介紹。 在相位展開法則中使用的為長與寬皆為 N+1 的影像大小,與菲涅耳轉換時使 用的常與寬為 N 不同,所以在進行相位展開之前,必須先在第 N+1 列及 N+1 行 做補 0 之動作。 由上節的菲涅耳轉換所計算出之結果. ,經由反正切函數所得之相位值. 其值會落於(-π, π]之間,且同時滿足 的實數函數。接下來令. 為函數. 的週期函數,且滿足 接下來著定義. ,在此. 利用經過鏡面反射(mirror reflection)所產生. 和 與. 為相位展開後. ,. ,如公式(4.11),此公式為壓縮相位差(wrapped phase. difference),也為一週期性函數,因此壓縮相位差的值也必須限制在 若運算後的值超出其範圍,則利用週期函數之特性將數值加減. ]之間, 使之落於正確. 區間之中。 ,. (4.11). 相位展開法則的主要目的是找到一周期函數 ̅ ,此函數為函數. 的估計值,其. 目的主要為最小化公式(4.12)的計算結果,由公式(4.12)可知為一最小平方誤差解 (minimum squared error solution)。 ̅. ̅. ̅. 63. ̅. (4.12).

(74) 首先令. 第四章 浮點快速傅立葉轉換之應用 為公式(4.13),再將公式(4.12)微分後令結果等於零,得其結果如公式. (4.14), (4.13) (̅ 此處 ̅. 和. ̅. ̅. ). (̅. ̅. ̅. ). (4.14). 皆為週期性函數,可利用本設計之浮點快速傅立葉轉換(FFT). 來求得公式(4.14)的解 ̅ ,對公式(4.14)等號兩邊的算式執行. 的二維快速. 傅立葉轉換,可得到方程式(4.15)如下: (4.15) 在公式(4.15)中,. 與. 分別代表將函數 ̅. 快 速 轉 換 之 結 果 , 在 根 據 公 式 (4.15) 將 函 數. 與函數. 執行二維度浮點. 執行二維度反傅立葉變換. (2D-inverse Fourier Transform)即可算出欲求得的週期函數 ̅ ,最後只要把 ̅. 的. 範圍限制在. 。. 和. 之間就可以得到最後還原後的相位結果. 4.3 菲涅耳轉換基本架構及驗證 本節中將介紹菲涅耳轉換整體的系統架構,圖 4.1 為其硬體電路架構圖,在 此系統架構中主要分為 4 個部分:前轉換單元、快速傅立葉轉換單元(FFT Unit)、 後轉換單元(Post-transform unit)以及嵌入式記憶體(on-chip RAM)。. 64.

(75) 第四章 浮點快速傅立葉轉換之應用. 圖 4.1 菲涅耳轉換法則硬體基本電路架構圖 在此菲涅耳轉換電路應用中,前轉換單元與後轉換單元我們使用論文[13]及 [15]所提出之電路。前轉換單元從on-chip RAM中讀取數位全像片資料 據4.1節中的公式(4.4)及公式(4.5)進行運算得到函數. ,此處的. 即是我們所. 要應用的快速傅立葉轉換單元之輸入資料。根據公式(4.6)計算即得到 最後,後轉換單元由公式(4.7)、公式(4.8)和公式(4.9)算出複數值點 反正切函數運算得相角 ,並將相角. ,並根. 。 ,經由. 存入on-chip RAM中。. 接下來將我們所設計之浮點快速傅立葉轉換電路應用於菲涅耳轉換之FFT Unit當中。由圖4.2,當cpu發出控制器訊號,controller_in則計算記憶體位置送至 on-chip RAM當中,此時會從on-chip RAM當中將前轉換單元所計算完之. 取出,. 每次取一列,送到fft_floating模組中做運算。由圖4.3,當fft_flaoting計算完成得到 ,controller_out則會將計算完之記憶體位址送入on-chip RAM當中,將計算完 之. 值存到RAM中。. 65.

(76) 第四章 浮點快速傅立葉轉換之應用. 圖4.2 前轉換結果. 送到FFT電路運算. 圖4.3 FFT電路運算結果存回記憶體. 當圖4.2與4.3之運作完成,即完成了N列FFT之運算,其結果為. 。當列方. 向計算完畢後再進行行方向之運算,此時記憶體的計算方式從列方向計算改變為 行方向計算。圖4.4,當cpu發出控制器訊號,controller_in則計算記憶體位置送至 on-chip RAM當中,此時會從on-chip RAM當中將. 取出,每次取一行,送到. fft_floating模組中做運算。由圖4.5,當fft_flaoting計算完成得到 則會將計算完之記憶體位址送入on-chip RAM當中,將計算完之 中。 66. ,controller_out 值存到RAM.

(77) 第四章 浮點快速傅立葉轉換之應用. 圖4.4 FFT列方向運算結果送到FFT電路做運算. 圖4.5 行方向FFT運算結果存回記憶體. 要如何驗證菲涅耳轉換運算完結果之正確性? 我們利用Matlab軟體建立了一 套與硬體相對應的菲涅耳轉換流程,透過Matlab結果與硬體運算結果互相平行驗 證其正確性。 接下來我們同樣使用例子交由我們所建立的Matlab菲涅耳轉換與硬體菲涅耳 轉換電路做計算,我們使用的輸入資料是由國立台灣師範大學光電科技研究所鄭 超仁教授的研究室提供之全像片平面的複數振福資訊做為測試影像。在Matlab與 硬體電路皆接收同樣之複數振幅為輸入,經過前轉換單元、快速傅立葉轉換單元. 67.

參考文獻

相關文件

2-1-1 複變數的概念.

第四章 連續時間週期訊號之頻域分析-傅立葉級數 第五章 連續時間訊號之頻域分析-傅立葉轉換.. 第六章

現在市面上關於第三煞車燈有相當多的產品,但僅是把傳 統鎢絲燈泡取代成使用 LED

學籍電子化所揭櫫的目標,其中之一便是「學籍電子資料交換」。 SFS3 的開發團隊,為了讓

※步進點主要應用於步進電路中。當不使 用步進指令時,步進點可作為一般的輔助 繼電器使用。 FX2 PLC的步進點可分為初

在第 52 屆全國科展"旋轉硬幣的機率"

在這次的實作遊戲中,我們必須要先對所使用到的硬體 和軟體有其基本的認識,這樣我們才能充分利用我們所擁有 的條件,進一步達成目標。首先 DE2-70 繼承了 Altera 一系 列的開發軟體,如

由於 Android 作業系統的開放性和可移植性,它可以被用在大部分電子產品 上,Android 作業系統大多搭載在使用了 ARM 架構的硬體設備上使裝置更加省電