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