史 瑤,錢 輝,龔 敏,高 博
(1.四川大學(xué)物理科學(xué)與技術(shù)學(xué)院,成都 610064;2.微電子技術(shù)四川省重點(diǎn)實(shí)驗(yàn)室,成都 610064)
基于FPGA的數(shù)字相位展開技術(shù)研究
史 瑤,錢 輝,龔 敏,高 博*
(1.四川大學(xué)物理科學(xué)與技術(shù)學(xué)院,成都 610064;2.微電子技術(shù)四川省重點(diǎn)實(shí)驗(yàn)室,成都 610064)
針對相位展開軟件算法運(yùn)算復(fù)雜的缺點(diǎn),通過分析相位展開原理,提出基于FPGA的相位展開技術(shù)的硬件實(shí)現(xiàn)。采用加/減模塊、乘法器以及除法器構(gòu)成截?cái)嘞辔惶幚砟K,將軟件算法查找鏈表的思路轉(zhuǎn)換成RAM存儲(chǔ)器讀寫操作,利用狀態(tài)機(jī)完成對存儲(chǔ)器和截?cái)嘞辔惶幚砟K的控制。采用ALTERA 系列EP4CE115F29C7芯片,針對256×256和512×512的圖像實(shí)現(xiàn)設(shè)計(jì),最高工作頻率分別達(dá)到80.22 MHz,80.45 MHz;資源消耗分別為792個(gè)和1 436個(gè)LE。采用SignalTap Ⅱ Logic Analyzer工具實(shí)時(shí)驗(yàn)證了相位展開設(shè)計(jì)模塊的正確性。
FPGA;相位展開;可靠度;三維成像
相位展開技術(shù)是目前三維成像等系統(tǒng)中相位測量技術(shù)最關(guān)鍵的模塊之一。主要有可靠度導(dǎo)向相位展開算法[1]、最小斷點(diǎn)法[2]、S變換輪廓術(shù)[3]小波變換法[4-5],廣度優(yōu)先搜索[6]等相位展開技術(shù)。采用可靠度導(dǎo)向展開算法,它可以使相位展開始終沿可靠度最高的方向展開,從而在某種程度上把誤差降到最小??煽慷葘?dǎo)向展開算法避免了洪水算法中的排序操作,提高了相位展開的速度[1]。相位展開技術(shù)的軟件實(shí)現(xiàn)采用指令方式,執(zhí)行算法按指令流水線處理,這樣減慢處理速度,不利于實(shí)時(shí)顯示[7-9]。FPGA采用數(shù)據(jù)并行處理方法,因而可處理的數(shù)據(jù)量比CPU方式多得多[10]。目前研究主要針對不同的相位展開算法提出的硬件設(shè)計(jì),都是調(diào)用大量的乘法器和加法器模塊完成硬件設(shè)計(jì),并采用流水線方式得到較高的吞吐率[11-13]。
在基于傅里葉變換輪廓術(shù)的三維成像系統(tǒng)中,逆傅里葉變換處理之后,取逆傅里葉變換輸出數(shù)據(jù)的幅值為可靠度。由于相位測量中采用反三角函數(shù),原來連續(xù)的相位被截?cái)喑煞沁B續(xù)相位取值(-π,π]中[1];然而對于可處理的信號(hào)而言,截?cái)嘞辔槐仨毐徽归_成連續(xù)相位,要得到連續(xù)的相位需要進(jìn)行相位展開。二維相位展開的理論依據(jù)是:在滿足采樣定理的條件下,曲面上相鄰兩點(diǎn)間的連續(xù)相位差應(yīng)該在(-π,π)區(qū)間上。
(1)
式中:Φ(x,y)表示展開后的相位;φ(x,y)表示截?cái)嘞辔?φ0表示與(x,y)相應(yīng)的已展開相位,Round[x]表示最接近x的整數(shù)。
相位展開過程始終沿可靠度最高的方向,將可靠度分成1到S共S級(jí),這樣就可以構(gòu)成具有S級(jí)的鏈表,每一級(jí)代表一個(gè)可靠度,在該等級(jí)下存放需要展開的點(diǎn)?;诳煽慷葘?dǎo)相位展開的快速算法中通過查表將相位待展開點(diǎn)放到一個(gè)虛擬隊(duì)列中,再進(jìn)行相位展開。在鏈表中設(shè)置一個(gè)變量MAX記錄等級(jí)表中代表最高可靠度的鏈表位置。假設(shè)圖像中待展開點(diǎn)分布如圖1所示。
圖1 待展開點(diǎn)分布圖
假設(shè)X為相位展開起始點(diǎn),針對下面特征的一組數(shù)據(jù)進(jìn)行分析。這組數(shù)據(jù)中可靠度分布MX>MA>MB>MC=MF>MD>ME>MG;首先將X移入隊(duì)列,同時(shí)MAX的值為X的可靠度K。此時(shí)鏈表如圖2(a)所示,虛擬隊(duì)列里面只有一個(gè)點(diǎn)X??梢钥吹芥湵碇兄挥?個(gè)待展開點(diǎn)X;接著將X點(diǎn)相位展開,并將X點(diǎn)移出隊(duì)列,此時(shí)隊(duì)列里面沒有需要展開的點(diǎn)。將X點(diǎn)移出隊(duì)列后,判斷X點(diǎn)周圍4個(gè)點(diǎn)是否移入隊(duì)列,將未入隊(duì)的點(diǎn)移入隊(duì)列。此時(shí)鏈表如圖2(b)所示,隊(duì)列中有A、B、C、D4個(gè)點(diǎn)。此時(shí)MAX的值為A點(diǎn)的調(diào)制度J,將A點(diǎn)展開并移出隊(duì)列,判斷A點(diǎn)周圍4個(gè)點(diǎn)是否移入隊(duì)列,將未入隊(duì)的點(diǎn)移入隊(duì)列;此時(shí)鏈表如圖2(c)所示。此時(shí)MAX將指向B點(diǎn)的鏈頭,將B點(diǎn)相位進(jìn)行展開并將其移除隊(duì)列,判斷B點(diǎn)周圍4個(gè)點(diǎn)是否移入隊(duì)列,將未入隊(duì)的點(diǎn)移入隊(duì)列。圖像中的其他點(diǎn)以此類推,直到所有點(diǎn)相位都展開,得到圖像連續(xù)的相位。
針對這樣的鏈表查找過程,以及待展開點(diǎn)入隊(duì)列過程,設(shè)置一個(gè)單端口RAM存儲(chǔ)器代表鏈表,周圍4點(diǎn)入隊(duì)列過程中待展開點(diǎn)的可靠度作為其地址,完成其入鏈表過程。對于每個(gè)待展開點(diǎn)展開之后,都需要將周圍4點(diǎn)未移入隊(duì)列中的點(diǎn)移入隊(duì)列,針對這樣的算法思路引入狀態(tài)機(jī),前4個(gè)狀態(tài)分別對應(yīng)每個(gè)點(diǎn)移入隊(duì)列過程,同時(shí)再需要兩個(gè)狀態(tài)分別找出需要展開的點(diǎn),以及將該點(diǎn)展開并移出隊(duì)列;這樣實(shí)現(xiàn)軟件算法與硬件狀態(tài)機(jī)的對應(yīng)。
圖2 待展開點(diǎn)入隊(duì)列鏈表圖
2.1 硬件框圖
針對設(shè)計(jì)思路以及處理N×N的圖像,提出硬件設(shè)計(jì)框圖如圖3所示。
整個(gè)模塊采用50 MHz的時(shí)鐘作為輸入時(shí)鐘,Rst_n作為系統(tǒng)復(fù)位信號(hào),start信號(hào)作為相位展開過程啟始信號(hào)。硬件實(shí)現(xiàn)需要的存儲(chǔ)器有Stackchain_ram鏈表存儲(chǔ)器、stackni棧存儲(chǔ)器、Mask_ram掩膜版存儲(chǔ)器、phase相位存儲(chǔ)、stackxy_index待展開點(diǎn)坐標(biāo)信息存儲(chǔ)器、Mod_ram可靠度存儲(chǔ)器、Stackpx_py已展開點(diǎn)坐標(biāo)存儲(chǔ)器;逆傅里葉變換得到的截?cái)嘞辔缓涂煽慷刃枰谙辔徽归_之前分別存儲(chǔ)到phase相位存儲(chǔ)器和Mod_ram可靠度存儲(chǔ)器,以及通過大津閾值法得到的掩模版矩陣存儲(chǔ)在Mask_mod掩模版矩陣中。采用分段式狀態(tài)機(jī)完成各個(gè)存儲(chǔ)器的讀寫控制和數(shù)據(jù)處理模塊Cfuwp_core的控制。該設(shè)計(jì)針對一幀N×N像素的圖像截?cái)嘞辔坏奶幚?當(dāng)N值較小時(shí),使用FPGA內(nèi)部存儲(chǔ)資源可以滿足存儲(chǔ)要求;但是N取值較大時(shí),FPGA內(nèi)部存儲(chǔ)資源不夠,需要將一部分存儲(chǔ)矩陣采用外部存儲(chǔ)器SRAM或者SDRAM實(shí)現(xiàn),正如虛線方框所示。
對于鏈表的設(shè)計(jì),采用FPGA內(nèi)部單端口RAM實(shí)現(xiàn)S×2×lbN的鏈表存儲(chǔ)器,當(dāng)尋找最大可靠度點(diǎn)時(shí),將MAX作為存儲(chǔ)器的地址完成尋找最大可靠度點(diǎn)過程。每當(dāng)有一個(gè)待展開的點(diǎn)進(jìn)入隊(duì)列時(shí),入隊(duì)計(jì)數(shù)信號(hào)head加1,同時(shí)將待展開點(diǎn)的可靠度作為鏈表存儲(chǔ)器的地址,把待展開點(diǎn)對應(yīng)的入隊(duì)計(jì)數(shù)值head寫入對應(yīng)的地址,這樣建立了待展開點(diǎn)與計(jì)數(shù)信號(hào)head的對應(yīng)關(guān)系,實(shí)現(xiàn)待展開點(diǎn)入隊(duì)列的設(shè)計(jì)。
圖3 FPGA實(shí)現(xiàn)設(shè)計(jì)框圖
2.1.1 數(shù)據(jù)處理模塊
數(shù)據(jù)處理模塊是將截?cái)嘞辔换謴?fù)成連續(xù)相位,該模塊完成式(1)的硬件實(shí)現(xiàn)。相位數(shù)據(jù)處理采用定點(diǎn)方式,截?cái)嘞辔徊捎脅1位符號(hào)位+2位整數(shù)位+7位小數(shù)位}10 bit數(shù)據(jù)格式,展開相位采用{1位符號(hào)位+8位整數(shù)位+7位小數(shù)位}16 bit數(shù)據(jù)格式。設(shè)計(jì)中利用2個(gè)9位乘法器生成一個(gè)無符號(hào)16位乘法器,利用LE邏輯單元生成16位除法器。數(shù)據(jù)處理模塊結(jié)構(gòu)圖4所示。
設(shè)計(jì)中需要對有符號(hào)的兩個(gè)數(shù)進(jìn)行減法運(yùn)算,引入一個(gè)比較模塊,該模塊作用是根據(jù)兩個(gè)輸入數(shù)的符號(hào)和絕對值產(chǎn)生加/減模塊的數(shù)據(jù)輸入信號(hào)和加減控制信號(hào)以及減法結(jié)果的正負(fù)號(hào)。輸出4個(gè)端口分別是:絕對值較大值端口,絕對值較小值端口,加/減模塊的控制端口ADD_AUB,減法符號(hào)端口sign;ADD_SUB信號(hào)判斷加/減法模塊是其絕對值進(jìn)行加法還是減法,sign信號(hào)判斷加/減模塊的結(jié)果是取正號(hào)還是取負(fù)號(hào)。同時(shí)為了減少路徑延時(shí)滿足時(shí)序要求,在加/減法模塊之后可以增加寄存器以提高工作頻率。
圖4 數(shù)據(jù)處理模塊結(jié)構(gòu)圖
圖5 狀態(tài)轉(zhuǎn)換圖
2.1.2 分段式狀態(tài)機(jī)
基于設(shè)計(jì)思路,每當(dāng)一個(gè)點(diǎn)被展開并移除隊(duì)列之后都需要將周圍上下左右4點(diǎn)中沒有入隊(duì)且需要展開的點(diǎn)移入隊(duì)列,同時(shí)需要將讀取出來的截?cái)嘞辔缓椭車颜归_相位進(jìn)行數(shù)據(jù)運(yùn)算,當(dāng)可靠度最高的點(diǎn)被展開之后又重復(fù)上述循環(huán),基于這樣的設(shè)計(jì)思路,引入分段式狀態(tài)機(jī)完成每個(gè)狀態(tài)對各個(gè)存儲(chǔ)器的讀寫控制以及傳輸截?cái)嘞辔坏綌?shù)據(jù)處理模塊進(jìn)行相位展開。分段式狀態(tài)機(jī)圖如圖5所示,每個(gè)狀態(tài)所代表的信息如表1所示。
表1 狀態(tài)信息
采用4個(gè)狀態(tài)S0_sign、S1_sign、S2_sign、S3_sign分別表示將已展開點(diǎn)的上右下左4點(diǎn)移入隊(duì)列,將該入隊(duì)點(diǎn)與已展開點(diǎn)的位置信息寫入stackxy_index存儲(chǔ)器,同時(shí)已展開點(diǎn)的位置信息寫入已展開點(diǎn)位置信息存儲(chǔ)器相應(yīng)的地址中。在這4個(gè)狀態(tài)的每個(gè)狀態(tài)需要將每個(gè)點(diǎn)的可靠度與MAX的值進(jìn)行比較,MAX始終取最大值。在S4_idle狀態(tài)讀取鏈表存儲(chǔ)器MAX地址的值,如果其值不為0,表示該調(diào)制度下有點(diǎn)需要展開,置false信號(hào)為高電平。否則沒有點(diǎn)需要展開,置false信號(hào)為低電平。
在S5_cfuwp狀態(tài),首先判定false的值,如果高電平則通過鏈表存儲(chǔ)器MAX地址的值在已展開點(diǎn)位置信息存儲(chǔ)器和stackxy_index存儲(chǔ)器中找到待展開點(diǎn)的位置信息,利用位置信息在相位存儲(chǔ)器中讀出截?cái)嘞辔缓鸵颜归_點(diǎn)相位,輸入到數(shù)據(jù)處理模塊進(jìn)行處理,得到的展開相位寫入相位存儲(chǔ)器相同的地址中去。同時(shí)將該點(diǎn)移出隊(duì)列。如果false信號(hào)為低電平則MAX的值減1,又回到S4_idle狀態(tài)中去尋找下一級(jí)可靠度下是否有點(diǎn)。
2.2 數(shù)據(jù)存儲(chǔ)
2.2.1 軟件優(yōu)化
從前面分析可以看出,硬件設(shè)計(jì)需要存儲(chǔ)的矩陣較多,對于硬件實(shí)現(xiàn)存儲(chǔ)要求較高,因此硬件設(shè)計(jì)之前需要優(yōu)化算法以減少對存儲(chǔ)的要求。
由于都是將已展開點(diǎn)上右下右4個(gè)點(diǎn)移入隊(duì)列,引入待展開點(diǎn)坐標(biāo)信息存儲(chǔ)器stackxy_index,該存儲(chǔ)器與待展開點(diǎn)坐標(biāo)存儲(chǔ)器stackx,stacky形成對應(yīng)關(guān)系,當(dāng)入隊(duì)點(diǎn)的坐標(biāo)信息寫入stackxy_index存儲(chǔ)器時(shí),該點(diǎn)周圍的已展開的點(diǎn)的信息寫stackpx_py存儲(chǔ)器,該點(diǎn)的與已展開點(diǎn)位置關(guān)系可以分別取值2′b00,2′b01,2′b10,2′b11,分別表示已展開點(diǎn)上右下左4個(gè)點(diǎn)與已展開點(diǎn)的位置關(guān)系;相對于軟件編碼[1]省略了正在展開點(diǎn)的橫坐標(biāo)stackx和列坐標(biāo)stacky兩個(gè)矩陣的存儲(chǔ),針對N×N的圖像,原來需要2×N2×log2N位的存儲(chǔ)器縮減為N2×2的存儲(chǔ)器。
軟件算法中每一個(gè)入隊(duì)的點(diǎn),都需要該點(diǎn)的入隊(duì)標(biāo)志為0,以及該點(diǎn)的掩模板矩陣信號(hào)為1,當(dāng)該點(diǎn)入隊(duì)以后,將入隊(duì)標(biāo)志置1。由于相位展開之前所有點(diǎn)的入隊(duì)標(biāo)志都是0,因此設(shè)計(jì)可以省略入隊(duì)標(biāo)志矩陣,當(dāng)點(diǎn)需要入隊(duì)的時(shí)候,只需要判斷掩膜版矩陣信號(hào)是否為1,入隊(duì)以后將掩膜版矩陣信號(hào)置為0,這樣省略入隊(duì)標(biāo)志矩陣[1],節(jié)省N×N×1的存儲(chǔ)空間。
2.2.2 算法矩陣與存儲(chǔ)器的對應(yīng)關(guān)系
針對一幀N×N的圖像列出硬件實(shí)現(xiàn)需要存儲(chǔ)的矩陣如表2所示。
表2 數(shù)據(jù)存儲(chǔ)矩陣列表
設(shè)計(jì)以Altera公司的EP4CE115F29C7芯片為實(shí)現(xiàn)平臺(tái),調(diào)制度分級(jí)數(shù)S=513,下面以N=256、N=512兩種情況進(jìn)行了討論。
對于N=256時(shí),將鏈表矩陣和掩膜版矩陣采用FPGA單端口RAM實(shí)現(xiàn);可靠度存儲(chǔ)器采用FPGA內(nèi)部單端口RAM存儲(chǔ)器實(shí)現(xiàn),待展開點(diǎn)坐標(biāo)信息矩陣采用FPGA單端口RAM實(shí)現(xiàn);根據(jù)相位矩陣、已展開點(diǎn)坐標(biāo)矩陣的大小以及存儲(chǔ)位寬分別存儲(chǔ)于SRAM存儲(chǔ)器的不同地址中;將算法矩陣8位行坐標(biāo)和8位列坐標(biāo)分別作為掩膜版存儲(chǔ)器、可靠度存儲(chǔ)器讀寫地址的高8位和低8位。
對于N=512時(shí),可靠度存儲(chǔ)器采用FPGA內(nèi)部單端口RAM存儲(chǔ)器實(shí)現(xiàn),待展開點(diǎn)坐標(biāo)信息矩陣和已展開點(diǎn)坐標(biāo)矩陣采用SDRAM存儲(chǔ)器實(shí)現(xiàn);根據(jù)鏈表矩陣、相位矩陣、掩膜版矩陣的大小以及存儲(chǔ)位寬分別存儲(chǔ)于SRAM存儲(chǔ)器的不同地址中;將算法矩陣9位行坐標(biāo)和9位列坐標(biāo)分別作為可靠度存儲(chǔ)器讀寫地址的高9位和低9位。
系統(tǒng)針對N=256,N=512兩種圖像大小完成相位展開的過程,設(shè)計(jì)采用Verilog源代碼以及Altera公司的EP4CE115F29C7芯片進(jìn)行原型驗(yàn)證,采用50 MHz為系統(tǒng)時(shí)鐘,在Altera開發(fā)環(huán)境Quartus Ⅱ 13.0 SPI中綜合,綜合結(jié)果如表3所示。
表3 綜合分析報(bào)告
從表3可以分析,N=512比N=256所使用的資源增加很多,主要是由于N=512時(shí)需要存儲(chǔ)的矩陣數(shù)據(jù)增加,引入SDRAM存儲(chǔ)器,需要實(shí)現(xiàn)SDRAM控制模塊,消耗大量資源;同時(shí)增加PLL模塊產(chǎn)生100 MHz時(shí)鐘作為SDRAM存儲(chǔ)器的主時(shí)鐘。
圖6 設(shè)計(jì)驗(yàn)證波形
針對原型驗(yàn)證采用SigalTap Ⅱ Logic Analyer邏輯分析儀檢測設(shè)計(jì)。設(shè)置采樣時(shí)鐘為系統(tǒng)時(shí)鐘50 MHz,采樣深度128。當(dāng)開關(guān)SW[0]置為高電平時(shí),電路進(jìn)行相位展開的過程。針對一組256×256圖像數(shù)據(jù)進(jìn)行了驗(yàn)證,驗(yàn)證中選取點(diǎn)(149.167)為相位展開起始點(diǎn),程序執(zhí)行開始需要將該點(diǎn)的周圍4個(gè)點(diǎn)移入鏈表;相位起始點(diǎn)周圍點(diǎn)可靠度如表4所示,得到相位展開起始點(diǎn)周圍4點(diǎn)入隊(duì)列時(shí)各個(gè)模塊驗(yàn)證波形如圖6所示。
表4 相位展開起始點(diǎn)周圍可靠度分布表
圖6(a)中,狀態(tài)信號(hào)stage分別在S0_sign,S1_sign,S2_sign,S3_sign這4個(gè)狀態(tài)將起始點(diǎn)周圍4個(gè)點(diǎn)依次移入隊(duì)列,各狀態(tài)對所有存儲(chǔ)器的控制是在stage_count計(jì)數(shù)信號(hào)下進(jìn)行;每個(gè)狀態(tài)從掩模版儲(chǔ)存器(mask_ram)讀出的掩膜版信號(hào)q都是為1,表示展開起始點(diǎn)周圍4個(gè)點(diǎn)都需要進(jìn)入隊(duì)列,同時(shí)將數(shù)值0寫入相應(yīng)的地址,表示該點(diǎn)已入隊(duì)列,下次不需要移入隊(duì)列。以及在每個(gè)狀態(tài)讀出相應(yīng)的可靠度并與最大可靠度信號(hào)Mmax比較大小,在S4_sign狀態(tài)之后Mmax取值237。每當(dāng)一個(gè)點(diǎn)進(jìn)入隊(duì)列,入隊(duì)計(jì)數(shù)信號(hào)head加1。
圖6(b)中,鏈表存儲(chǔ)器的地址在這4個(gè)狀態(tài)的值分別是226、237、217、220;同時(shí)寫入的數(shù)據(jù)分別是入隊(duì)計(jì)數(shù)信號(hào)head在每個(gè)狀態(tài)的值1、2、3、4;在S4_idle狀態(tài)中讀取鏈表存儲(chǔ)器Mmax位置的值,即stackchain_address==10′d237,將S1_sign狀態(tài)寫入的值2讀取出來,false信號(hào)被賦為高電平,這樣表明在可靠度237下有點(diǎn)需要展開,該點(diǎn)就是展開起始點(diǎn)右邊一點(diǎn),S5_cfuwp狀態(tài)將該點(diǎn)進(jìn)行展開,同時(shí)將數(shù)值0寫入鏈表存儲(chǔ)器的地址10′d237,表示該點(diǎn)移出鏈表隊(duì)列。
圖6(c)、圖6(d)中,將已展開點(diǎn)周圍4個(gè)點(diǎn)移入隊(duì)列過程中,每個(gè)狀態(tài)需要將該點(diǎn)附近已展開點(diǎn)位置信息寫入SRAM存儲(chǔ)器中,將head的值作為SRAM存儲(chǔ)器的地址,因此SRAM存儲(chǔ)器的地址的值分別是1、2、3、4;相應(yīng)的輸入數(shù)據(jù)都是10010101_10100111(38311);同時(shí)每個(gè)入隊(duì)點(diǎn)與已展開點(diǎn)的位置關(guān)系需要寫入待展開點(diǎn)坐標(biāo)信息存儲(chǔ)器stackxy_index;各狀態(tài)對應(yīng)的地址stackxy_index_ram_address分別取值head計(jì)數(shù)值,對應(yīng)寫入數(shù)據(jù)2′b00,2′b01,2′b10,2′b11;S5_cfuwp狀態(tài)將SRAM存儲(chǔ)器地址2的存儲(chǔ)數(shù)據(jù)38311讀取出來,以及stackxy_index存儲(chǔ)器地址2的存儲(chǔ)數(shù)據(jù)2′b01讀取出來,得到已展開點(diǎn)坐標(biāo)stackpx=8′d149、stackpy=8′d167,待展開點(diǎn)坐標(biāo)stackx=8′d149、stacky=8′d168。
從圖6(d)、圖6(e)分析,根據(jù)已展開點(diǎn)和待展開點(diǎn)坐標(biāo),在SRAM存儲(chǔ)器讀出其對應(yīng)的相位,對應(yīng)的SRAM存儲(chǔ)器地址分別為20′d169383,20′d169384。讀出已展開相位16′d48(0.3750),待展開相位11′d107(0.8359);由于兩者之差小于π,經(jīng)過cfuwp_core模塊處理并輸出展開相位0.8359,并將其寫入地址20′d1693844中;這樣完成其相位展開過程。
通過分析相位展開原理,采用自頂而下的設(shè)計(jì)方法,提出了基于分段式狀態(tài)機(jī)的硬件結(jié)構(gòu),將軟件算法查表方式轉(zhuǎn)換成單端口RAM的讀寫操作,并通過邏輯分析儀實(shí)時(shí)驗(yàn)證設(shè)計(jì)的正確性;設(shè)計(jì)的最高工作頻率達(dá)到80.22 MHz(N=256)、80.45 MHz(N=512)。以N=256,clk=50 MHz為例,當(dāng)一個(gè)點(diǎn)進(jìn)入隊(duì)列到被展開最短的時(shí)間需要0.46 μs;從N=256,N=512兩種情況可以分析設(shè)計(jì)具有可擴(kuò)展性,可以在滿足存儲(chǔ)要求的基礎(chǔ)上完成對任意大小圖像的相位展開硬件設(shè)計(jì);同時(shí)可以采用更高性能的FPGA芯片以提高數(shù)據(jù)處理速度和內(nèi)部存儲(chǔ)空間。
[1] 李勇,蘇顯渝. 用于可靠度導(dǎo)向相位展開的快速算法[J]. 光電工程,2005,32(11):76-79.
[2] Heping Zhong,Zhen Tian,Pan Huang,et al. A Combined Phase Unwrapping Algorithm for InSAR Interferogram in Shared Memory Enviroment[C]//2015 8th International Congress on Image and Signal Processing. Shenyang:IEEE,2015.1504-1509.
[3] 鄭毅,陳文靜. 基于S變換濾波解相法的條紋解相研究[J]. 光學(xué)技術(shù),2013,39(4):331-338.
[4] 王勇,饒勤菲,唐靖. 采用小波脊系數(shù)幅值導(dǎo)數(shù)方差質(zhì)量圖的相位展開法[J]. 光子學(xué)報(bào),2015,44(2):1-8.
[5] 黃昊,達(dá)飛鵬. 小波變換輪廓術(shù)中快速相位展開方法研究[J]. 儀器儀表學(xué)報(bào).2012.33(2):398-404.
[6] 黃玉波,栗大超,胡小唐. MEMS/NEMS表面3-D輪廓測量中基于模塊的相位解包裹方法[J]. 傳感器技術(shù)學(xué)報(bào),2006,19(5):1488-1492.
[7] 黃敬堯,張超,陳振杰. 基于FPGA的動(dòng)態(tài)三維面形測量系統(tǒng)設(shè)計(jì)[J]. 計(jì)算機(jī)測量與控制,2012,20(3):599-605.
[8] 王曉東,彭翔. 數(shù)字投影三維數(shù)字成像的并行DSP實(shí)現(xiàn)[J]. 光子學(xué)報(bào),2008,37(7):1459-1463.
[9] 楊越,龔志,李江坤. 基于FPGA的位相測量輪廓術(shù)設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)測量與控制,2009,17(3):461-466.
[10] 汪昆,馮冬芹. 基于FPGA的以太網(wǎng)物理層信號(hào)處理器的研究[J]. 電子器件,2005,28(4):855-858.
[11] Wang Jiao,Xiong Zhiwei,Wang Zekun. FPGA Design and Implementation of Kinect-Like Depth Sensing[J]. IEEE Transactions on Circuits and Systems of Video Technology,2015,26(6):1175-1186.
[12] Sherman Braganza,Mirian Leeser. Implementing Phase Unwrapping Using Field Programmable Gate Arrays or Graphics processing Units:A Comparison[C]//2008 Sencond international Workshop on High-Performance Reconfigurable Computing Technology and Applications.Austin:IEEE,2008:1-10.
[13] Mazinan A H,Esmaeili A. An Algorithm for Extracting the Phase of the Fringe Patterns with its Applications to Three-Dimensional Imaging through FPGA Based Implementation[C]//2016 International Conference on Industrial Informatics and Computer Systems(CIICS). Sharjah:IEEE,2016.1-5.
TheStudyofDigitalPhaseUnwrappingTechniqueBasedonFPGA
SHIYao1,2,QIANHui1,2,GONGMin1,2,GAOBo1,2*
(1.Micro-Electronics of College of Physical Science and Technology,Chengdu 610064,China;2.Key Laboratory of Micro-Electronics Technology of Sichuan Province,Chengdu 610064,China)
Since the computation of phase unwrapping algorithm is complex by using software,the hardware circuit of the phase unwrapping technique was designed on the basis of FPGA through the principle of phase unwrapping. The plus/minus module,the multiplier and divider module formed the wrappedphase processing module. The software algorithm to the look-up table changed into the read-write operations of RAM memory. The state machine was used for the control of the memories and the wrapped phase processing module. The Altera chip of EP4CE115F29C7 was used in this design and the hardware implementation was completed for both 256×256 and 512×512 of the image. The highest working frequency reached to 80.22 MHz and 80.45 MHz,respectively. The amount of the resource usage reached 792 and 1 436 LEs,respectively. The Signal Tap Ⅱ Logic Analyzer has verified the correctness of the phase unwrapping module realtimely.
FPGA;phase unwrapping;reliability;three-dimensional imaging
10.3969/j.issn.1005-9490.2017.05.010
2016-07-05修改日期2016-09-26
TN402
A
1005-9490(2017)05-1097-07
史瑤(1991-),男,漢族,四川成都人,四川大學(xué)物理學(xué)院微電子專業(yè),碩士研究生,研究方向?yàn)榇笠?guī)模集成電路設(shè)計(jì),1508285028@qq.com;
錢輝(1992-),女,漢族,安微蕪湖,四川大學(xué)物理學(xué)院微電子專業(yè),碩士研究生,研究方向?yàn)榇笠?guī)模集成電路設(shè)計(jì);
龔敏(1961-),男,教授(導(dǎo)師),博士生導(dǎo)師 從事新型半導(dǎo)體材料與器件工藝、集成電路設(shè)計(jì)和工藝及半導(dǎo)體器件的輻照效應(yīng)研究;
高博(1975-),男,副教授(通訊作者),主要從事CMOS集成電路芯片設(shè)計(jì)和生物醫(yī)學(xué)成像領(lǐng)域的研究。