仝軍勝
摘 要:在海量數據的處理過程中,單個計算機的運算速率、處理精度不能滿足數據處理的快速時效性,因此本系統采用機群并行處理系統,將MPI(Message Passing Interface)消息傳遞接口,安裝在每臺計算機上,獲取圖像數據后,主節點按集群中處理器節點數(包括主節點自身)對圖像數據進行劃分,將每部分數據傳送給集群每個節點進行處理。每個節點處理完成后,再傳送回主節點,由主節點合成。提高處理速度,縮短處理時間,實現實時處理數據。最后保證完成Giga級像素的圖像采集傳輸顯示。
關鍵詞:Giga級;PCI接口;MPI圖像處理
1基于FPGA的PCI數據采集卡設計
建立起基于FPGA的PCI數據采集系統,此系統中FPGA通過PCI總線協議,使PCI接口顯卡與計算機實現通信,并借由計算機實現后續的圖像處理功能。
1.1 FPGA芯片在PCI接口上的設計
在FPGA與CMOS傳感器連接時,FPGA僅僅是作為數據的輸入一方,但是FPGA在于PCI主線連接的過程中,雙方接觸的模塊會更多,引腳更加復雜,所傳導的電子信號也更加復雜。在FPGA集成到PCI接口時,主要需要對可編程邏輯模塊、系統存儲模塊和本地總線控制模塊進行設計。
1.1.1 FPGA的邏輯設計
在FPGA芯片與CMOS傳感器設計階段,從處理海量數據的角度而言,需要對FPGA芯片的緩存進行擴展,可以擴展為DPRAM和FIFO兩種形式,以此來提升FPGA芯片在采集和傳輸數據時的緩沖能力。下圖中我們展示了利用LPM宏功能實現FIFO模式緩沖模塊的結構圖,這是一種利用QUARTUS軟件對FPGA模塊進行改造的方法,體現了FPGA模塊的靈活性。
圖1-1 LPM宏功能實現FIFO模式緩沖模塊結構圖
1.1.2 系統存儲模塊的設計
在進入特定的工作模式后,SDRAM會等待控制器對其發出讀、寫或者其他指令。由于SDRAM的工作模式很多,所以SDRAM收到的信號和指令也非常多樣,包括空操作、激活、寫操作、預充電等等,這些信號通過RASN、CASN以及WEN三種信號的不同組合來傳達,并且在與寄存器內的設置進行配對之后由SDRAM做出對應的操作。下圖中我們給出了一種應用于SDRAM控制器的內部模塊設計思路。
圖1-2系統存儲模塊的設計電路圖
這個模塊包括控制接口模塊、命令解析及相應模塊以及數據通路模塊。控制接口模塊的主要功能是接收系統的控制信號。命令解析及相應模塊的主要功能包括命令解析、命令響應和時間控制。系統存儲模塊在使用之前也需要進行初始化,具體步驟是在系統上電之后,對SDRAM相繼發出PRECHARGE、REFRESH以及LOAD_MODE指令,完成對系統存儲模塊工作模式的設定,此后再分別發出LOAD_REG1以及LOAD_REG2命令,對控制器進行刷新,以此來實現對SDRAM模塊的初始化。
1.1.3本地總線控制模塊
本地總線控制模塊共有8個工作狀態,分別是IDLE/READWAIT/SINGLERD/ BURSTRD/WRITEWAIT/SINGLEWR/BURSTWR/PCIDONE。不同的工作狀態對應的信號是不一樣的,這八個工作狀態分別對應著:空閑、讀等待、單周期讀、Burst讀、寫等待、單周期寫等待、Burst寫等待以及傳輸結束。
至此,基于FPGA的Giga級別圖像PCI數據采集卡基本已經成型,系統中使用的圖像采集元件為CMOS傳感器,課題中總共使用了四個鏡頭,每個鏡頭中安裝了9個CMOS圖像傳感器,這36個CMOS圖像傳感器將能夠形成圖像采集陣列,實現總體上的Giga級圖像采集。
1.2 PCI數據采集卡驅動程序的開發
WinDriver是開發PCI總線應用程序中經常用到的開發包組件,使用這種程序語言編寫程序時,不需要對操作系統的內核有太多了解,并且這種語言還提供現成的函數庫,大大減輕了用戶的使用難度。具體的操作方法是將PCI擴展卡插入到計算機PCI插槽中,運行DriverWizard程序,創建新的驅動程序,然后選擇PCI 9054作為編寫對象,使用者可以選擇自己熟悉的開發環境,然后生成驅動程序框架代碼。
2.基于MPI的圖像并行處理方法
從處理器接收到圖像塊之后對圖像進行相應的預處理操作。下面我們以圖像的輪廓提取為例,結合具體的MPI代碼展示MPI并行化圖像的預處理方法。
2.1并行圖像輪廓提取的步驟
在基于MPI的并行圖像輪廓提取處理中,大致要經過四個步驟:
首先,機群中主處理器讀取位于它本身的圖像的數據到緩沖區,圖像數據來自PCI總線。
其次,主處理器根據輪廓提取的分區方法劃分把圖像成為N塊并且向各子處理器發出查詢,在收到Slave處理機的確認回應后,分配數據塊至準備就緒的子處理器。
在子處理器到主處理器:發送的圖像數據之后,子處理器會記錄相應的數據塊特征,期間以消息傳遞的方式根據算法要求從主處理器上獲取輪廓提取的算法,并應用并行算法對分配到的原始圖像數據進行輪廓提取,得到提取的結果后向主處理器發送,完成本節點的任務。
最后,主處理器對子處理器發回的輪廓提取結果進行合成,完成并行輪廓提取工作。
2.2圖像輪廓提取的MPI代碼實現
輪廓提取的數學表述是對圖像數據進行一階微分,算法實現的基木思想是,獲取圖像數據字節(或字符)數組后,主節點按集群中處理器節點數(包括主節點自身)對圖像數據進行行劃分將每部分數據傳送給集群每個節點進行處理、每個節點處理完成后再傳送回主節點由主節點合成。
(1)并行程序的初始化及前期準備
首先初始化MPI運行環境,獲取用戶指定執行參數,然后獲取集群中運行程序的節點數pnum,最后獲取執行程序的機器號myrank,一般設置0號為主節點。
主節點讀取圖像,包括圖像信息頭和待處理圖像數據。對于信息頭需要傳送給其他處理節點的,可以用廣播方式進行。
(2)數據的劃分與傳輸
在完成系統的初始化以及數據的讀取之后,就需要對原始數據在各個子處理器(子節點)之間進行劃分,然后將劃分后的數據傳送到各個節點。
(3)數據的處理
在將數據傳到各個節點之后,各個節點將按照統一的算法對原始數據進行運算,在本例中就是對原始數據進行一階求導,來提取原始圖像的輪廓。
(4)數據傳回
各個子節點在處理完數據后,會將處理結果傳回到主節點,主節點通過合成各個子節點的提取結果,得到最終的輪廓提取圖像。從節點發回數據,主節點接受數據,保存在合適的位置。完成后,主節點完成最后其他工作。這就是利用MPI并行程序設計進行圖像預處理的過程。
結論
本文設計的硬件電路基本實現了Giga級圖像采集和預處理的功能,但是在系統整體性能上,還存在一些不足,需要改進。本文主要是從控制實現的角度對圖像采集系統做了一些研究和開發,然而經過深入研究,發現基于本系統的研究還有大量的工作需要完成。
參考文獻
[1] 林朝陽,葉曉慧,姚祖文. 基于PCI-6229的數據采集方法[J]. 艦船電子工程. 2007(06).
[2] 孫健,賈民平,許飛云,胡建中. 基于PCI總線的數據采集卡WDM驅動程序開發[J]. 機電工程. 2007(12).
[3] 鄧治彬. 基于PCI接口芯片PCI9052的數字信號處理模塊的設計開發[J]. 計算機與數字工程. 2007(12).
[4] 康鴻雁. 一種基于CH365的PCI數據采集卡設計[J]. 微計算機信息. 2007(35).