摘 要: 在分析傳統(tǒng)DMA控制器結(jié)構(gòu)的基礎(chǔ)上,針對實時圖象處理系統(tǒng)的數(shù)據(jù)傳輸要求,提出了多端口模塊設(shè)計、增加Round Robin通道優(yōu)先級仲裁算法和優(yōu)化數(shù)據(jù)傳輸通道等優(yōu)化方法,以提高數(shù)據(jù)傳輸速度,并改進了地址產(chǎn)生模式來滿足圖像算法的要求。
關(guān)鍵詞: DMA 實時圖像處理? 多端口? Round-Robin策略? 地址產(chǎn)生模塊
?
數(shù)字圖像處理是嵌入式系統(tǒng)最為廣泛的應用之一。目前,數(shù)字圖像處理技術(shù)無論在科學研究、工業(yè)生產(chǎn)或管理部門中都得到越來越多的應用。而目標跟蹤、機器人導航、自動駕駛、交通監(jiān)視等應用也極大地促進了實時圖像處理技術(shù)的發(fā)展。
數(shù)字圖像處理的特點是數(shù)據(jù)量大、運算復雜、實時性強。通常,數(shù)據(jù)量往往大于片內(nèi)的存儲容量,對于片內(nèi)存儲資源有限的處理系統(tǒng)來說,一般需要借用外部存儲空間。為了提高系統(tǒng)的實時處理能力,必須在片內(nèi)高速存儲區(qū)和外部存儲空間之間使用直接存儲方式(DMA)進行數(shù)據(jù)交換,從而使處理器只專注于數(shù)據(jù)的計算。
1 傳統(tǒng)DMA控制器的設(shè)計和分析
1.1 DMA控制器的模塊結(jié)構(gòu)
DMA控制器一般具有如下功能:在不同的存儲介質(zhì)" title="存儲介質(zhì)">存儲介質(zhì)之間實現(xiàn)快速數(shù)據(jù)傳輸;獨立于處理器進行高速數(shù)據(jù)交換;提供多個DMA通道以提高數(shù)據(jù)傳輸?shù)牟⑿卸?;支持?shù)據(jù)爆發(fā)傳輸模式;具有通道優(yōu)先級可編程的仲裁機制。
?
圖1是DMA控制器的模塊框圖。從圖中可以看出,DMA控制器主要由以下幾個模塊組成:
(1)寄存器控制模塊" title="控制模塊">控制模塊:為軟件程序員提供可編程接口,以控制DMA的工作狀態(tài);根據(jù)各配置位的不同設(shè)置,控制各DMA通道和各端口的工作狀態(tài)。
(2)通道控制模塊:DMA控制器中有6個可以獨立工作的DMA通道,根據(jù)相應控制寄存器" title="控制寄存器">控制寄存器的配置位提出DMA申請,通過端口模塊訪問存儲介質(zhì)。
(3)端口控制模塊:它是DMA控制器與存儲介質(zhì)之間的接口模塊,提供訪問存儲介質(zhì)的地址、數(shù)據(jù)和控制信號線。
(4)FIFO控制模塊:DMA控制器中共有6個32字節(jié)的緩存隊列,分別為每個通道所占用,在爆發(fā)式的傳輸中,可以緩存慢速存儲設(shè)備中的數(shù)據(jù),從而提高DMA控制器的傳輸速度。
(5)通道優(yōu)先級仲裁模塊:當多個DMA通道同時提出DMA申請時,需要進行通道的優(yōu)先級仲裁,在這里使用硬件優(yōu)先級仲裁。
此外,還有中斷和事件響應模塊,用以保證DMA的實時傳輸。
1.2 傳統(tǒng)DMA在實時圖像處理應用中的局限
首先,在傳統(tǒng)的DMA設(shè)計[1-2]中,端口模塊只采用一組數(shù)據(jù)線、地址線和控制線,連接DMA需要連接的所有存儲介質(zhì);并且當多個通道需要同時占用數(shù)據(jù)線、地址線和控制線時,只采用硬件優(yōu)先級仲裁的方式來處理。這樣,對于大量DMA應用的實時圖像處理系統(tǒng)" title="實時圖像處理系統(tǒng)">實時圖像處理系統(tǒng),DMA的傳輸效率并不高,影響了整個系統(tǒng)的圖像處理效果。所以,需要對DMA的端口模塊和優(yōu)先級仲裁模塊做一些改進,以便有效地改善DMA的數(shù)據(jù)傳輸速率。而且,DMA的數(shù)據(jù)傳輸路徑也可以改進。
其次,圖像數(shù)據(jù)本身的一些格式特點和所要求的圖像處理算法決定了一個實時圖像處理系統(tǒng)中的數(shù)據(jù)傳輸并不是一種簡單的數(shù)據(jù)傳輸,而是要求DMA的數(shù)據(jù)傳輸同時具有矩陣傳輸、翻轉(zhuǎn)傳輸?shù)裙δ?,來加快圖像處理的速度和滿足一些圖像處理算法的要求。而普通DMA的地址產(chǎn)生模塊并沒有這樣的設(shè)計。
2 DMA控制器的優(yōu)化
2.1 端口模塊
本文實現(xiàn)的DMA控制器中,DMA控制器支持多端口模式,可以在各個存儲介質(zhì)之間進行數(shù)據(jù)的并行傳輸。通過增加一些硬件復雜度,大大提高了系統(tǒng)數(shù)據(jù)傳輸?shù)牟⑿卸取?BR>圖2為DMA控制器的端口模塊連接圖。DMA控制器通過4個端口連接內(nèi)部存儲器、外部存儲器和外部設(shè)備。通道和端口相互獨立,每個通道可以獨立申請占用端口資源。端口將各個通道產(chǎn)生的控制、地址和數(shù)據(jù)信號通過多路選擇連接到端口對應的存儲介質(zhì)。當多個通道同時收到DMA請求時,如果所訪問的端口不沖突,則每個通道可以各自獨立地通過所訪問的端口資源進行DMA傳輸,從而提高DMA數(shù)據(jù)傳輸?shù)男省?/P>
2.2 通道優(yōu)先級仲裁模塊
如果考慮通道對端口的訪問可能產(chǎn)生沖突,則需要引入通道優(yōu)先級仲裁的設(shè)計。在實際的系統(tǒng)應用中,每個DMA通道的請求對實時性要求是不同的。因此,通常的DMA控制器中都集成有通道硬件優(yōu)先級的設(shè)計[1,2],有效地為各DMA通道的資源請求服務。對實時性要求較高的DMA通道請求,將通道優(yōu)先級設(shè)為最高,而對數(shù)據(jù)量大且實時性無特殊要求的DMA通道請求,將通道優(yōu)先級設(shè)為最低。優(yōu)先級高的通道優(yōu)先占用端口資源。但是這樣簡單的設(shè)計,只是讓各個通道去排隊占用端口資源,在通道優(yōu)先級相同的情況下,需要等到一個通道的所有數(shù)據(jù)傳輸結(jié)束后,下一個通道才能占用端口資源,這使整個系統(tǒng)的處理效率降低。
引入相同優(yōu)先級的通道,能夠分時共享端口資源,本文采用Round-Robin策略實現(xiàn)這種分時共享機制[4]。端口對于相同優(yōu)先級的通道請求,根據(jù)Round-Robin仲裁算法,輪流響應各個DMA通道的傳輸請求,讓相同優(yōu)先級的通道可以分時工作,避免某個通道占用端口資源時間過長,以提高系統(tǒng)的傳輸效率。
圖3為DMA通道優(yōu)先級的仲裁策略。每個通道的優(yōu)先級由控制寄存器的相應位設(shè)定。通道的請求信號為chanx_req,根據(jù)通道的優(yōu)先級產(chǎn)生高優(yōu)先級請求信號cx_req_h和低優(yōu)先級請求信號cx_req_l。
優(yōu)先級仲裁模塊的通道輪詢機制使用狀態(tài)機實現(xiàn)。狀態(tài)機共有6個狀態(tài),分別為選中通道0~5的狀態(tài)。每個狀態(tài)都包含一個通道優(yōu)先級的排序隊列。各個通道根據(jù)高優(yōu)先級請求信號cx_req_h和低優(yōu)先級請求信號cx_req_l進入通道優(yōu)先級排序隊列的相應位置,從高到低排序。沒有請求的通道不參加排序。例如通道0、2、4有cx_req_h,通道1、3有cx_req_l,通道5沒有請求信號。若當前狀態(tài)為選中通道0,排序的結(jié)果為2-4-0-1-3;若當前狀態(tài)為選中通道2,排序的結(jié)果為4-0-2-3-1。
狀態(tài)機在當前正在進行的數(shù)據(jù)傳輸結(jié)束后,根據(jù)當前通道的優(yōu)先級排序隊列進行優(yōu)先級仲裁,跳轉(zhuǎn)到通道優(yōu)先級排序隊列中排隊最靠前的通道所對應的狀態(tài),從而產(chǎn)生選中通道的選中信號。
從圖3中可以看出,不同狀態(tài)的通道優(yōu)先級排序隊列可以保證狀態(tài)機的跳轉(zhuǎn)按一個硬件優(yōu)先級加輪詢的方式進行。
通過這樣的方式,就可以讓多個需要訪問同一端口的通道分時共享端口資源,從而提高整個系統(tǒng)數(shù)據(jù)傳輸?shù)牟⑿卸取?BR>2.3 通道數(shù)據(jù)傳輸路徑
DMA通道的數(shù)據(jù)傳輸分為單個傳輸和爆發(fā)傳輸兩種類型。
在通常的DMA控制器設(shè)計中,每個通道通過一個FIFO緩存讀入數(shù)據(jù)。在讀訪問階段,數(shù)據(jù)從源端口傳輸?shù)酵ǖ赖腇IFO中;在寫訪問階段,數(shù)據(jù)從通道的FIFO傳輸?shù)侥康亩丝凇_@樣,當端口連接的存儲介質(zhì)為慢速設(shè)備時,可以大大提高DMA通道的傳輸速度。但是當通道的傳輸類型為單個傳輸時,如果傳輸?shù)臄?shù)據(jù)還要經(jīng)過FIFO緩存,則每個數(shù)據(jù)單元的傳輸至少浪費1個時鐘周期,因此對數(shù)據(jù)通路要進行適當?shù)膬?yōu)化。
DMA數(shù)據(jù)傳輸?shù)穆窂饺鐖D4所示。當傳輸類型為單個傳輸時,增加一個數(shù)據(jù)單元的前向反饋路徑,數(shù)據(jù)不必經(jīng)過FIFO緩存,從源端口讀到后,直接寫入目的端口中,可以減少1個時鐘周期的傳輸延遲。
2.4 地址生成模塊
在很多實時圖像處理系統(tǒng)的應用中(如子圖抽取和圖像翻轉(zhuǎn)等應用),DMA通道的數(shù)據(jù)傳輸并不是簡單的地址遞增、遞減或不變傳輸,而是要求DMA通道以一些特殊的地址增長模式進行傳輸,如圖5(a)所示的矩陣傳輸和圖5(b)所示的翻轉(zhuǎn)傳輸。
當DMA數(shù)據(jù)傳輸只是連續(xù)地址(memory)或是不變地址(外設(shè)的FIFO)的數(shù)據(jù)傳輸時,只需要有一種地址調(diào)整方式,即基本調(diào)整方式?;菊{(diào)整方式是指地址根據(jù)數(shù)據(jù)字長和通道控制寄存器的相應位來選擇連續(xù)遞增、連續(xù)遞減或不變的方式[2]。而這種方式不支持傳輸數(shù)據(jù)源地址和目的地址不連續(xù)或不變的情況(如圖5所示)。用軟件編程實現(xiàn)這些功能,會浪費大量的CPU時間。
本文設(shè)計的DMA控制器引入了二維數(shù)據(jù)傳輸?shù)乃枷?SUP>[3,4]。為了支持矩陣傳輸和翻轉(zhuǎn)傳輸功能,需要增加另外一種地址調(diào)整方式——索引調(diào)整方式。另外需增加四個寄存器:幀計數(shù)寄存器、單元計數(shù)寄存器、單元索引寄存器和幀索引寄存器。并在通道的控制寄存器中增加指示地址模式的mode位(包括遞增、遞減、不變和索引)。
?索引調(diào)整方式的計算過程如圖6所示。將傳輸?shù)臄?shù)據(jù)分成二維,一次傳輸?shù)目倲?shù)據(jù)塊由若干個幀組成,而每個傳輸幀又由多個數(shù)據(jù)單元構(gòu)成,每個數(shù)據(jù)單元根據(jù)控制寄存器中的數(shù)據(jù)字長可以是字節(jié)、字或是長字。相應的傳輸計數(shù)寄存器也有兩個,即幀計數(shù)寄存器和單元計數(shù)寄存器。與基本調(diào)整方式不同,索引調(diào)整方式可以根據(jù)傳輸?shù)臄?shù)據(jù)單元是否是當前幀的最后一個數(shù)據(jù)單元進行不同的地址調(diào)整。單元索引寄存器中存放普通調(diào)整值,幀索引寄存器中存放幀尾調(diào)整值。每一幀除了最后一次數(shù)據(jù)傳輸以外,其余的傳輸都由單元索引決定地址寄存器的增量。如果讀寫的是該幀的最后一個數(shù)據(jù)單元,則用幀索引做地址調(diào)整。當幀計數(shù)寄存器和單元計數(shù)寄存器都為0時,DMA傳輸結(jié)束。
雖然這樣的改進不會提高DMA數(shù)據(jù)的傳輸速率,但是可以節(jié)省整個系統(tǒng)的時間。如果通過軟件的方式完成矩陣傳輸和翻轉(zhuǎn)傳輸?shù)裙δ芤?,需要?zhí)行額外的CPU運算時間?,F(xiàn)通過設(shè)置通道寄存器,可以在DMA傳輸?shù)耐瑫r,完成矩陣地址計算和翻轉(zhuǎn)地址計算等功能要求,并且不占用額外的CPU時間,提高了整個系統(tǒng)的效率。
3 DMA設(shè)計的驗證
為了驗證DMA的設(shè)計是否能滿足實時圖像系統(tǒng)的高速實時要求,是否能在數(shù)據(jù)傳輸?shù)耐瑫r完成子圖抽取功能,搭建了一個運動小目標檢測" title="小目標檢測">小目標檢測系統(tǒng),系統(tǒng)的框架見圖7。在此系統(tǒng)中,對DMA設(shè)計的有效性進行測試。
小目標檢測系統(tǒng)是一個雙核系統(tǒng)。ARM922T是主處理器,負責整個系統(tǒng)的控制及與外界的數(shù)據(jù)交互。DSP CORE是協(xié)處理器,負責運動小目標檢測算法的運算。整個系統(tǒng)的工作流程:PC機將采集到的352×288的運動小目標灰度圖數(shù)據(jù)通過100M網(wǎng)線傳送到以太網(wǎng)接口模塊,ARM922T將輸入的數(shù)據(jù)存放到片外的存儲器SRAM,并通知DSP進行數(shù)據(jù)處理和傳輸。DSP數(shù)據(jù)處理時采用片內(nèi)雙緩存機制,一塊緩存數(shù)據(jù)的運算可以部分或全部與另一塊緩存的數(shù)據(jù)在DMA傳輸過程中并行,并由DMA的事件觸發(fā)功能和中斷反饋功能保證數(shù)據(jù)運算和數(shù)據(jù)傳輸過程的并行。最后小目標檢測算法檢測出來的小目標的坐標值(行和列)反饋到PC機,在PC機上演示源圖像和結(jié)果圖像。
目前,各模塊的RTL設(shè)計和基于雙核系統(tǒng)的前端驗證均已完成,并且已經(jīng)將此雙核系統(tǒng)成功地移植到FPGA平臺上。此平臺的核心單元由Xilinx的virtexⅡ 6000(X2V6000)、spartanⅢ 5000(X3S5000)和Altera的EPXA1(內(nèi)含ARM922T硬核)構(gòu)成。多FPGA互聯(lián)帶來的龐大的可編程邏輯及EPXA1內(nèi)置的ARM Core能真實地模擬雙核系統(tǒng)環(huán)境。
在PC機顯示界面上的實時顯示速度為25幀/秒,圖像的視覺效果比較理想。在一幀352×288的灰度圖像的處理過程中,從算法運算的時鐘周期數(shù)和DMA數(shù)據(jù)傳輸所耗費的時鐘周期數(shù)對比來看(見表1),DMA的數(shù)據(jù)傳輸和DSP CORE的算法運算幾乎可以完全并行,充分發(fā)揮了DSP的核心運算功能。由于此次應用的小目標檢測算法并不是一個運算非常復雜的算法,因此可以說明DMA的傳輸速率達到了實時系統(tǒng)的要求。同時,DSP中運行的小目標檢測算法是基于背景比對的灰度圖算法,每次處理的圖像范圍是7×7的一個子圖,在DMA傳輸?shù)耐瑫r進行子圖的抽取功能也得到了驗證。實踐證明:本文提出的DMA設(shè)計結(jié)構(gòu)在實際的圖像處理系統(tǒng)中完全可以達到高速實時要求,并且可以在傳輸?shù)耐瑫r滿足子圖抽取等圖像算法的要求。
本文基于實時圖像處理系統(tǒng)對DMA的需求分析,提出了適用于實時圖像處理系統(tǒng)中的DMA接口模塊和數(shù)據(jù)傳輸路徑的設(shè)計與優(yōu)化,并針對子圖抽取等圖像算法需求改進了地址產(chǎn)生模塊的設(shè)計結(jié)構(gòu)。從FPGA上的驗證結(jié)果來看,此DMA設(shè)計具有高速實時性能,同時也能滿足圖像算法的子圖抽取等需求,完全適用于實時圖像處理系統(tǒng)的應用。
參考文獻
[1] 史昕蕾,楊軍,陸生禮.嵌入式SoC中的DMA控制器的設(shè)計與優(yōu)化.電子工程師,2004,(1).
[2] 唐威,劉佑寶,劉軍華.DMA控制器件的設(shè)計和仿真.微電子學和計算機,2002,(12).
[3] 劉書明.Tiger SHARC DSP應用系統(tǒng)設(shè)計.北京:電子工業(yè)出版社,2004.
[4] TMS320VC5501/5502 DSP Direct memory access(DMA) controller reference guide.TI,2003.
[5] OPAP5912 Multimedia processor direct memory access(DMA) support reference guide.TI,2003.