基于DSP和FPGA的全景圖像處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
摘 要: 設(shè)計(jì)了基于DSP和FPGA的全景圖像處理方案,F(xiàn)PGA完成圖像采集,DSP完成圖像的各種處理算法。利用FPGA設(shè)計(jì)了基于乒乓緩存機(jī)制的SDRAM控制器;采用EDMA方式,完成了DSP與FPGA的數(shù)據(jù)交換。測試結(jié)果表明,DSP+FPGA折反射全景圖像處理系統(tǒng)完成了對分辨率為2 048×2 048、每秒15幀的Camera Link接口的全景圖像的實(shí)時(shí)采集及緩存解算,并以1 024×768的分辨率進(jìn)行實(shí)時(shí)顯示。
關(guān)鍵詞: DSP;FPGA;SDRAM控制器;乒乓緩存
全景圖像實(shí)時(shí)處理系統(tǒng)可以獲取周圍方向上的場景圖像,可廣泛應(yīng)用于軍事偵察、視頻監(jiān)控、機(jī)器人視覺等領(lǐng)域[1]。
對于高分辨率折反射全景圖像處理系統(tǒng),如果按照分辨率為2 048×2 048、幀率為15 f/s、每個(gè)像素為8 bit的灰度來計(jì)算,相機(jī)的數(shù)據(jù)吞吐量為480 Mb/s。在圖像采集、緩存、解算以及顯示輸出過程中,需要選擇合適的算法進(jìn)行大量的計(jì)算,一般單獨(dú)的處理器組成的嵌入式系統(tǒng)很難完成高分辨、實(shí)時(shí)性的圖像快速采集[2],因此需采取多個(gè)并行嵌入式處理器結(jié)構(gòu)完成折反射全景成像處理[3-4]。
本文利用并行嵌入式處理結(jié)構(gòu),設(shè)計(jì)了基于FPGA和DSP的雙核全景圖像處理系統(tǒng)。主要包括基于FPGA的SDRAM控制器設(shè)計(jì)以及采用雙SDRAM在乒乓模式下輪流存儲采集圖像的策略,實(shí)現(xiàn)了高速全景圖像的存儲。在FPGA與DSP之間建立合理的握手機(jī)制,避免在同一時(shí)刻對同一個(gè)SDRAM進(jìn)行讀和寫;設(shè)計(jì)了DSP與FPGA通信接口,實(shí)現(xiàn)了二者之間的高速數(shù)據(jù)通信。本系統(tǒng)為后續(xù)算法處理提供了更加充足的時(shí)間裕度,為高速實(shí)時(shí)圖像處理提供了堅(jiān)實(shí)的基礎(chǔ)。
1 全景圖像處理系統(tǒng)結(jié)構(gòu)
DSP+FPGA構(gòu)成的高分辨率折反射全景圖像處理系統(tǒng)的結(jié)構(gòu)如圖1所示。由Camera Link 接口的CCD相機(jī)采集的灰度圖像數(shù)據(jù)經(jīng)過LVDS串并轉(zhuǎn)換芯片轉(zhuǎn)換,在FPGA的控制下,完成圖像的采集,通過FPGA進(jìn)行乒乓緩存操作,64 bit SDRAM控制器完成對緩存器的突發(fā)式讀寫控制,為整個(gè)系統(tǒng)提供高速緩存器;FPGA利用DSP的EMIF接口將已經(jīng)存儲的圖像數(shù)據(jù)以DMA方式傳送給DSP,DSP接收數(shù)據(jù)后完成全景圖像柱面展開、分割識別等算法;DSP再通過EMIF接口把數(shù)據(jù)以DMA方式傳送回FPGA;利用FPGA把數(shù)據(jù)寫入到緩存器中,最后發(fā)送到顯示器進(jìn)行顯示。
2 乒乓緩存模式下SDRAM控制器的設(shè)計(jì)及實(shí)現(xiàn)
2.1 SDRAM控制器的結(jié)構(gòu)設(shè)計(jì)
SDRAM控制器的結(jié)構(gòu)組成包括:系統(tǒng)控制接口模塊、命令接口與解析模塊、刷新模塊、操作信號生成模塊、數(shù)據(jù)通路模塊。其中,系統(tǒng)控制接口模塊用以接收系統(tǒng)的控制信號從而產(chǎn)生相應(yīng)的CMD命令組合;命令接口與解析模塊用以接收CMD命令解碼并生成相應(yīng)操作指令;操作信號生成模塊用以接收操作指令,并根據(jù)相關(guān)時(shí)序生成對SDRAM的操作信號;數(shù)據(jù)通路模塊用以控制數(shù)據(jù)流的方向以及產(chǎn)生有效的數(shù)據(jù)輸入輸出;刷新模塊包含在命令接口與解析模塊中用以產(chǎn)生刷新以及自動刷新邏輯。
2.1.1 系統(tǒng)控制接口模塊
該模塊包含初始化進(jìn)程以及系統(tǒng)指令分析機(jī)制。初始化進(jìn)程要完成對SDRAM器件和SDRAM控制器的初始化,以保持SDRAM控制器與外部SDRAM器件的工作模式匹配[5]。初始化完成后,系統(tǒng)的指令分析機(jī)制就可以接收并且分析外部數(shù)據(jù)、地址、控制信號以及從命令接口與解析模塊返回的命令響應(yīng)信號(CMDACK),從而以此產(chǎn)生對應(yīng)的CMD命令和SADDR地址信息給命令接口與解析模塊。此外,SADDR是分時(shí)復(fù)用的,在初始化階段SADDR用來傳輸用戶設(shè)定的工作模式控制字,而正常讀寫操作中,SADDR又可作為分時(shí)復(fù)用的地址線傳輸SDRAM所需要的row、column以及Bank地址。
2.1.2 命令接口與解析模塊
此模塊對由系統(tǒng)控制接口模塊接收到的CMD命令進(jìn)行判斷并解碼,其輸出就是發(fā)送給下一級即操作信號生成模塊的操作指令。同一時(shí)刻只允許輸出一個(gè)有效操作指令。該模塊中含有模式寄存器用來預(yù)設(shè)控制器的模式參數(shù),為控制提供具體的依據(jù)。
2.1.3 操作信號生成模塊
此模塊根據(jù)命令接口和解析模塊發(fā)送過來的操作指令,按照SDRAM讀寫時(shí)序規(guī)范產(chǎn)生操作動作以及相應(yīng)的操作信號。程序中,CMD命令WRITEA和READA是實(shí)際上隱含了ACTIVE命令的WRITE和READ,它的實(shí)際工作過程是:當(dāng)該模塊收到do_write或do_read指令后,其反饋給命令接口及解析模塊的CMDACK置為1,表示響應(yīng)命令標(biāo)志,同時(shí)發(fā)出ACTIVE激活操作;緊接著產(chǎn)生一個(gè)延時(shí)動作,經(jīng)過初始化時(shí)配置規(guī)定的CAS Latency延時(shí)時(shí)間后再進(jìn)行寫或讀操作。
2.1.4 數(shù)據(jù)通路模塊
此模塊在OE信號控制下,保持?jǐn)?shù)據(jù)的輸入輸出和相應(yīng)的操作指令在時(shí)序上同步,并且根據(jù)SDRAM器件的時(shí)序參數(shù)加入一定的延時(shí)以滿足宏觀的時(shí)序符合數(shù)據(jù)手冊的要求。當(dāng)OE=1時(shí),數(shù)據(jù)由控制器經(jīng)過DQ引腳寫入SDRAM器件;當(dāng)OE=0時(shí),數(shù)據(jù)由SDRAM器件的DQ引腳讀入到控制器。
2.2 乒乓緩存模式
將輸入數(shù)據(jù)流通過輸入數(shù)據(jù)選擇單元實(shí)時(shí)地分配到兩個(gè)數(shù)據(jù)緩存區(qū)。分別利用兩組SDRAM作為乒緩存器和乓緩存器,使用“空間換取時(shí)間”的方法,使兩組緩存器在同一時(shí)間分別作為讀和寫的緩存,達(dá)到并行的目的。
在乒?fàn)顟B(tài)時(shí),乒乓操作控制器向SDRAM B中寫入數(shù)據(jù),與此同時(shí)從SDRAM A中讀取狀態(tài)交換之前已經(jīng)存入的數(shù)據(jù);在乓狀態(tài)時(shí),乒乓操作控制器向SDRAM A中寫入數(shù)據(jù),同時(shí)從SDRAM B中讀取狀態(tài)交換之前已經(jīng)存入的數(shù)據(jù),同時(shí)乒乓操作控制與其他的采集、算法和顯示模塊進(jìn)行數(shù)據(jù)交換。乒乓緩存結(jié)構(gòu)如圖2所示。
2.3 SDRAM控制器實(shí)現(xiàn)及時(shí)序仿真
SDRAM控制器實(shí)現(xiàn):SDRAM控制模塊與FPGA端的SDRAM存儲器相連,以FullPage模式從FPGA端的SDRAM存儲器中高速讀寫數(shù)據(jù);觸發(fā)FullPage的REFRESH的命令,既保證數(shù)據(jù)不丟失,也能保證刷新的完成。在發(fā)出FullPage命令以后,必須給出一段空操作的延時(shí)或讀操作。時(shí)序仿真分別如圖3、圖4、圖5所示。
3 DSP與FPGA的數(shù)據(jù)通信
為了提高數(shù)據(jù)傳輸?shù)耐掏铝浚珼SP與FPGA之間使用DMA方式進(jìn)行數(shù)據(jù)傳輸[6],每次突發(fā)傳輸一行圖像數(shù)據(jù),使傳輸速率最大化。DSP采用EMIF接口,EMIF數(shù)據(jù)接口可以配置為多種傳輸方式并且可以DMA傳輸,而且是無縫接口。由于DSP與FPGA是跨時(shí)鐘域系統(tǒng),所以必須利用FPGA做好跨時(shí)鐘域處理,使用FIFO作為接口進(jìn)行數(shù)據(jù)緩存。
FPGA將采集到的數(shù)據(jù)經(jīng)過預(yù)處理之后以64 bit的數(shù)據(jù)寬度開始向DSP傳送,同時(shí)FPGA通過發(fā)出脈沖沿觸發(fā)DSP外部中斷管腳來觸發(fā)DSP的全局中斷。全局中斷觸發(fā)EDMA把外部數(shù)據(jù)傳送給DSP內(nèi)部的RAM,當(dāng)EDMA(接收)傳輸完成后,DSP的EDMA傳輸事件管理器會觸發(fā)“EDMA傳輸完成中斷”,此時(shí)DSP可以進(jìn)行相應(yīng)的算法處理并且將處理后的目標(biāo)數(shù)據(jù)存放到內(nèi)部RAM中;然后再觸發(fā)EDMA(發(fā)送)數(shù)據(jù)傳輸,通過EMIF數(shù)據(jù)接口將處理后的數(shù)據(jù)傳回給FPGA。數(shù)據(jù)流向示意圖如圖6所示。