基於DSP+FPGA的嵌入式影象處理系統的發展的論文

基於DSP+FPGA的嵌入式影象處理系統的發展的論文

  引 言

  伴隨著影象處理技術的快速發展,影象處理系統的效能需求也在不斷提高,特別是在實時性上的要求。基於PC或者工作站的影象處理系統,常常不是一個可行的選擇,原因如下:應用對處理時間要求苛刻;CCD攝像機資料量太大。另外,這類系統的資源有效利用率較低,體積大而笨重,功耗高,不適合行動式應用場合。

  DSP是一種基於指令和程式碼的流水線處理器,具有強大的資料處理能力和較高的執行速度,採用C/C++或者線性組合語言程式設計,可以支援複雜的演算法處理,而FPGA則屬於真正的並行架構,不同的處理操作無需競爭相同的資源,每個處理任務都可以不受其他邏輯塊的影響自主執行,因此FPGA具有強大的並行處理能力,其現場可程式設計的屬性也帶來了更大的`靈活性,但是,FPGA不擅長複雜的演算法處理和邏輯控制。本文基於DSP+FPGA架構構建了一個嵌入式影象處理系統,使得DSP和FPGA可以發揮各自的特長,協同處理,與單獨採用DSP或FPGA的系統相比,本系統具有更強大的資料處理能力,且更靈活、更通用。

  1.系統架構

  本系統採用DSP+FPGA架構,原理方框圖如圖1所示,其中DSP晶片採用TI公司單核最高效能的TMS320C6455(簡稱C6455)晶片作為核心處理器,負責完成影片影象的複雜演算法處理,FPGA晶片採用Altera公司的Cyclone Ⅲ系列晶片EP3C55,FPGA作為DSP的協處理器,負責完成影象的採集、顯示和傳輸等輔助功能,使得DSP可以專注於演算法處理。

  DSP和FPGA之間透過32位EMIF介面實現了高速同步無縫互聯, 由圖1可知,本系統的動態儲存器均採用DDR2 SDRAM,其中C6455所帶2片DDR2儲存器用來儲存影象和演算法資料,為C6455處理大資料量、複雜演算法提供了保證。FPGA所帶2片DDR2儲存器用來儲存捕捉的Camera影象資料,以便VGA顯示和DSP讀取。FPGA採集的影象資料可透過EMIF和EDMA從FPGA所帶的DDR2儲存器搬運到DSP所帶的DDR2儲存器。

  圖1 系統方框圖

  2.FPGA設計

  本文FPGA的主要功能圍繞著DDR2儲存器的讀寫,如圖2所示。

  圖2 FPGA的主要功能模組圖

  相機負責向緩衝區寫資料,VGA顯示和DSP負責從緩衝區讀資料。本文中的DDR2控制器工作於Full?rate模式下,需要向DDR2 driver提供2倍資料寬度,即64 b資料。本文對每個讀寫資料通道,使用獨立的FIFO進行不同時鐘域之間的資料傳輸。從CameraLink相機的LVDS接收器解碼得到8 b影象資料,在向Write FIFO寫之前,需要按8 B進行打包處理,合併為64 b資料;而發向VGA顯示的資料在從Read FIFO中讀出後,需要先經過拆包處理,得到8 b影象資料後才能送給VGA Controller;從Capture FIFO讀出的資料傳送給DSP之前也要經過拆包處理,將64 b資料拆為2個32 b資料後,才能傳送給EMIFA,進行傳輸。為方便視覺化驗證演算法處理結果,DSP演算法處理結果可以透過McBSP傳送給FPGA,FPGA接收到資料,將其轉換為可視的螢幕位置送給VGA Controller,在螢幕上進行疊加顯示。

  本系統應用於近紅外影象處理領域,採用的CameraLink相機輸出解析度為1 024×768,幀率為30 f/s,而一般的液晶顯示器重新整理頻率為60 Hz,為了將捕捉到的相機資料顯示出來,需要將30幀影象插幀為60幀,但是顯示時鐘與相機時鐘並不是同源時鐘,其幀率並不是嚴格的兩倍關係,這種相機和顯示之間的非同步時序關係如圖3所示,所以不能簡單地將一幀影象顯示2次;同時,本系統的近紅外影象演算法處理時間根據影象的不同而具有不確定性,並非每幀影象都能在一個幀週期內處理完成。基於這兩個因素,本系統沒有采用常規的乒乓緩衝處理方式,而是採用了三重緩衝解決了這兩個問題。

  圖3 相機和顯示的非同步時序關係

  所謂三重緩衝,也即在DDR2儲存器內開闢了三個緩衝:BufferA,BufferB和BufferC。其中,讀寫操作各佔一個緩衝區,第三個儲存區作為中轉,先不考慮DSP從緩衝區讀資料。

  三重緩衝的示意圖如圖4所示,假設當前緩衝區BufferA正在進行寫操作,緩衝區BufferB正在進行讀操作,緩衝區BufferC則有2種可能:已寫滿(FULL)和已讀完(EMPTY)兩個狀態。此時,如果需要進行讀寫翻頁操作,即讀復位訊號或寫復位

  訊號有效時,DDR2驅動程式可按不同情況給出不同的操作,如表1所示。

  例如,當讀復位訊號有效,寫復位訊號無效時,說明緩衝區BufferA尚未寫滿,而緩衝區BufferB已經讀完,此時,需要查詢緩衝區BufferC的狀態,如果緩衝區BufferC處於“FULL”狀態,則讀緩衝區將由當前的緩衝區BufferB改為緩衝區BufferC,並將緩衝區BufferB設定為“EMPTY”狀態;如果緩衝區BufferC處於“EMPTY”狀態,則將重新讀取緩衝區BufferB。

  圖4 三重緩衝的示意圖

  表1 三重緩衝的決策表

  再考慮DSP從緩衝區讀資料的情況,為保證DSP任意時刻開始讀資料,總能讀到最新的資料,本文使用影象的場訊號FVAL下降沿作為觸發,定位DSP讀資料的緩衝區地址,如果在下一個FVAL下降沿之前DSP始終未開始讀資料,則在新的FVAL下降沿時刻重新定位緩衝區地址,反之,如果DSP開始讀資料了,即使在FVAL下降沿未能讀完,也會繼續讀,直到DSP讀完資料,再重新定位緩衝區地址,按本文設計的方案,DSP會在很短的時間內完成讀資料任務,而如果在兩個FVAL內,DSP一直未完成讀任務,則認為發生了錯誤,讀控制器會進行復位矯正。

  DDR2驅動的讀寫控制以顯示的行訊號HD為週期,週期性查詢是否需要進行讀寫操作。其狀態轉移示意圖如圖5所示。

  圖5 DDR2讀寫控制的狀態機

  SignalTap Ⅱ Logic Analyzer是Quartus Ⅱ自帶的嵌入式邏輯分析儀,與ModelSim軟體模擬有所不同,是線上式模擬,可以實時捕捉和顯示訊號變化。圖6所示是本文用SignalTap Ⅱ捕捉到的資料波形。

  圖6 SignalTap Ⅱ波形圖

  3.C6455軟體設計

  本文C6455的軟體基於TI提供的搶佔式多執行緒實時核心DSP/BIOS進行開發,網路部分使用了NDK開發套件,為了實現透過網路傳送影象資料給計算機和接收來自計算機的影象資料,使用了面向無連線的UDP協議,相比TCP協議,UDP速度更快,更適合應用。C6455軟體主要包含三個部分:實時性最高的硬體中斷執行緒(HWI);採集執行緒和兩個任務執行緒(TSK);處理執行緒和通訊執行緒,流程圖如圖7所示。

  圖7 C6455程式流程圖

  4.實驗結果

  本文提出的基於DSP+FPGA的影象處理系統,已經透過實驗驗證。圖8展示了本系統影象處理演算法連續執行500個週期的統計結果,圖中實線為連續10個相鄰離散點的平均值。由圖8可見,本系統既可以使演算法在超過一個影象幀週期的時間內執行,又可以使連續一段時間內平均的執行時間近似為影象幀週期。本系統滿足了資料量大,演算法複雜度高的系統需求,相比乒乓緩衝,本文所提出的三重緩衝具有更快的響應速度。

最近訪問