郭 璐,任家富
(成都理工大學(xué)信息科學(xué)與技術(shù)學(xué)院,成都610059)
AVS視頻壓縮標(biāo)準(zhǔn)具有很高的編碼效率,但也有較高的算法復(fù)雜度。編碼過程由于數(shù)據(jù)的重復(fù)使用不可避免的會(huì)產(chǎn)生大量數(shù)據(jù)的搬移,加重了DSP的負(fù)擔(dān)并耗費(fèi)了很多時(shí)間。另外移植的嵌入式操作系統(tǒng)也占用部分內(nèi)存,待處理的視頻數(shù)據(jù)不得不放在外部存儲(chǔ)器中。提高編解碼速度必須解決數(shù)據(jù)存儲(chǔ)問題,本文采用的TMS320DM6446[1]是TI最新推出的面向多媒體處理的數(shù)字信號(hào)處理器(DSP)。它的增強(qiáng)型直接內(nèi)存存取(EDMA)對(duì)DSP圖像處理系統(tǒng)非常重要,可以在沒有CPU參與的情況下完成映射存儲(chǔ)空間中數(shù)據(jù)搬移從而減輕了DSP負(fù)擔(dān)。靈活使用EDMA可以大大提高數(shù)據(jù)傳輸效率。本文研究了用DSP將數(shù)據(jù)從SDRAM到內(nèi)部存儲(chǔ)器的快速搬移以及數(shù)據(jù)從內(nèi)部存儲(chǔ)器到顯示終端的快速傳輸問題,提高了實(shí)時(shí)圖像處理系統(tǒng)的實(shí)時(shí)性。
增強(qiáng)的直接存儲(chǔ)器訪問控制器主要包括傳輸控制器EDMATC和通道控制器EDMACC兩個(gè)主要部分:
1)傳輸控制器處理片內(nèi)L2高速緩沖存儲(chǔ)器的外部存儲(chǔ)設(shè)備之間的數(shù)據(jù)傳輸,包括EDMA通道控制器傳輸,EMIF接口存儲(chǔ)器和緩沖之間的傳輸,以及非高速緩沖存儲(chǔ)器訪問等。
2)通道控制器是EDMA中用戶編程的一部分,支持一系列復(fù)雜的傳輸,包括一維和二維傳輸,事件觸發(fā)的傳輸和CPU觸發(fā)的傳輸,并支持PING-PONG緩沖[2]的復(fù)雜載入和編址模式,如環(huán)形緩存,幀提取和分類等。
EDMA的傳輸原理[3]:每個(gè)數(shù)據(jù)傳輸都由傳輸請(qǐng)求TR(Transfer Request)觸發(fā)。傳輸請(qǐng)求具有完成傳輸任務(wù)所需要的所有信息:源地址、目的地址、傳輸優(yōu)先級(jí)和單元計(jì)數(shù)等。傳輸時(shí),根據(jù)優(yōu)先級(jí)對(duì)傳輸請(qǐng)求進(jìn)行排列。隊(duì)首的任務(wù)首先占用EDMA傳輸控制器的隊(duì)列寄存器,然后按照傳輸要求進(jìn)行真實(shí)的數(shù)據(jù)傳輸。傳輸過程中,傳輸遞交、優(yōu)先級(jí)排列、數(shù)據(jù)傳輸環(huán)節(jié)的運(yùn)行和CPU頻率相同。外部設(shè)備的數(shù)據(jù)傳輸速度由外部設(shè)備決定,外部設(shè)備均有緩沖區(qū)以匹配高速度的EDMA。EDMA具有高效的傳輸機(jī)制,可以同時(shí)承擔(dān)多個(gè)傳輸數(shù)據(jù)任務(wù)。DSP中的3個(gè)常用的請(qǐng)求器為L(zhǎng)2緩存/存儲(chǔ)控制器、EDMA通道和HPI,不同的傳輸任務(wù)也有不同的請(qǐng)求。然而,無論哪種請(qǐng)求器發(fā)出請(qǐng)求,EDMA傳輸控制器處理每個(gè)傳輸請(qǐng)求的方式都是一樣的。當(dāng)傳輸請(qǐng)求被提交后,就由傳輸框架TC為其設(shè)定優(yōu)先級(jí)。TC擁有和外部設(shè)備獨(dú)立的讀總線,優(yōu)先級(jí)設(shè)置后的傳輸請(qǐng)求TR進(jìn)入請(qǐng)求隊(duì)列等待處理,傳輸請(qǐng)求的優(yōu)先級(jí)決定了哪個(gè)TR先被提交。
圖像處理系統(tǒng)在兩處數(shù)據(jù)傳輸中采用了EDMA傳輸方式:外部SDRAM到DSP內(nèi)部L2Cache的數(shù)據(jù)傳輸;McBSP0到顯示終端的數(shù)據(jù)傳輸。EDMA實(shí)現(xiàn)數(shù)據(jù)搬移的工作流程圖如圖1所示。
圖1 EDMA實(shí)現(xiàn)數(shù)據(jù)搬移的工作流程圖
搬移的數(shù)據(jù)為2維圖像數(shù)據(jù),圖像來自視頻采集板卡的數(shù)據(jù)圖像,該圖像存儲(chǔ)在SDRAM中,因此DSP是通過EDMA從SDRAM中將數(shù)據(jù)傳輸?shù)紻SP內(nèi)部存儲(chǔ)器,然后DSP進(jìn)行相應(yīng)的圖像處理。因此EDMA采用2-D數(shù)據(jù)傳輸模式。
2.1.1 同步傳輸模式
一個(gè)EDMA通道的同步傳輸有兩種方式[4]:
1)讀/寫同步(FS=0):EDMA通道在收到同步事件后,對(duì)于non-2D,向目的地址傳輸一個(gè)數(shù)據(jù)單元;對(duì)于2D傳輸,向目的地址傳輸一個(gè)陣列的數(shù)據(jù)。
2)幀/塊同步(FS=1):對(duì)于non-2D傳輸,同步事件回觸發(fā)一幀數(shù)據(jù)的傳輸;對(duì)于2D傳輸,幀同步將傳輸整個(gè)數(shù)據(jù)塊(一組陣列)。
2.1.2 傳輸?shù)刂返母?/p>
EDMA傳輸參數(shù)中有SUM/DUM參數(shù)字段[5],可以控制源/目標(biāo)地址的更新方式,地址更新是指在一個(gè)數(shù)據(jù)塊的傳輸過程中,源/目標(biāo)地址的自動(dòng)修正。不同的地址更新模式使得用戶可以創(chuàng)建多種數(shù)據(jù)結(jié)構(gòu)。
向CPU產(chǎn)生的傳輸完成中斷主要由EDMA控制器完成。但EDMA代表所有16個(gè)通道只向CPU產(chǎn)生一個(gè)中斷(EDMA_INT)[6]。各種控制器寄存器和位段方便EDMA中斷的產(chǎn)生。當(dāng)一個(gè)EDMA通道設(shè)置OPT寄存器的TCINT位為1,并且提供一個(gè)特定的傳輸完成代碼(TCC)時(shí),EDMA控制器便會(huì)設(shè)置通道中斷掛起寄存器(CIPR)的某一位。
編程設(shè)置的TCC值指定被置位的CIPR位數(shù),最后向CPU產(chǎn)生的EDMA_INT信號(hào)。為了實(shí)現(xiàn)這些操作,通道中斷使能寄存器(CIER)的CIEn位設(shè)置為1,OPT寄存器的TCINT位設(shè)置為1,TCC位設(shè)置為n。
EDMA控制器能夠跟蹤EDMA通道傳輸?shù)耐瓿?,并按照指定的傳輸完成代碼設(shè)置CIPR的合適位。CPU的ISR將會(huì)讀取CIPR并決定通道是否已經(jīng)完成,并執(zhí)行那些必要的操作。當(dāng)服務(wù)器中斷時(shí),ISR會(huì)清除CIPR中的位,從而能進(jìn)一步識(shí)別中斷。
在視頻數(shù)據(jù)信號(hào)的傳輸和處理過程中,CPU數(shù)據(jù)處理必須與EDMA數(shù)據(jù)傳輸保持同步,也就是要保證在CPU訪問之前EDMA把數(shù)據(jù)傳輸?shù)骄彌_區(qū)中,而在EDMA輸出數(shù)據(jù)之前CPU完成緩沖區(qū)中的數(shù)據(jù)處理[7]。CPU數(shù)據(jù)處理與EDMA數(shù)據(jù)傳輸?shù)耐娇梢圆捎肞ing_pong雙緩沖技術(shù)來實(shí)現(xiàn)。實(shí)現(xiàn)方法如下[8]:在片內(nèi)存儲(chǔ)器L2中開辟兩個(gè)大小相同的緩沖區(qū)Ping_buffer和Pong_buffer,兩個(gè)緩沖區(qū)輪流交替工作。當(dāng)EDMA傳輸數(shù)據(jù)到Ping_buffer時(shí),CPU處理Pong_buffer中的數(shù)據(jù);當(dāng)CPU和EDMA操作完畢,Ping_buffer和Pong_buffer緩沖區(qū)互換,EDMA繼續(xù)傳輸數(shù)據(jù)覆蓋Pong_buffer中的數(shù)據(jù),CPU處理Ping_buffer中的數(shù)據(jù)。
Ping_pong雙緩沖區(qū)操作可以通過EDMA的連接來實(shí)現(xiàn)。EDMA的連接功能將不同的EDMA傳輸控制參數(shù)連接在一起,組成一個(gè)參數(shù)鏈,為同一個(gè)通道服務(wù)。在實(shí)現(xiàn)Ping_pong緩沖技術(shù)時(shí),EDMA完成一次數(shù)據(jù)傳輸任務(wù)時(shí),產(chǎn)生中斷通知CPU處理新的數(shù)據(jù)。設(shè)置ping和pong參數(shù)組選項(xiàng)參數(shù)的連接使能為1,中斷使能位為1,這樣,在等待EDMA完成數(shù)據(jù)傳輸時(shí),CPU可以繼續(xù)處理后臺(tái)事務(wù)。當(dāng)FIFO滿標(biāo)志IR發(fā)生事件,發(fā)送中斷信號(hào)啟動(dòng)ping將數(shù)據(jù)搬移到Ping_buffer,則Ping_buffer的FFT運(yùn)算將由CPU在ping通道中斷服務(wù)程序中完成,同時(shí),EDMA利用初始化功能從參數(shù)RAM中加載pong參數(shù)組,將數(shù)據(jù)搬移到Pong_buffer中,CPU在Pong通道完成中斷服務(wù)程序中對(duì)Pong_buffer中的數(shù)據(jù)的FFT運(yùn)算并連接ping通道,如此循環(huán),使系統(tǒng)數(shù)據(jù)搬移和處理能連續(xù)進(jìn)行。
大批量的圖像數(shù)據(jù)傳輸和復(fù)雜算法的處理一直是高速數(shù)字圖像處理器的瓶頸,利用DSP的EDMA功能可以在不中斷信號(hào)處理器工作的同時(shí)完成圖像數(shù)據(jù)的搬移,極大地提高了系統(tǒng)的并行性能。
[1] Texas Instruments,TMS320DM644x DMSoC Enhanced Direct Memory Access(EDMA)Controller.2008:67-89.
[2] Texas Instruments,TMS320C6000 DSP Cache User’s Guide.2003:24-77.
[3]于鳳芹,張慶榮,吉訓(xùn)生,等.TMS320C6000結(jié)構(gòu)原理與硬件設(shè)計(jì)[M].北京:北京航天航空出版社,2008:65-67.
[4]劉向宇.DSP嵌入式常用模塊與綜合系統(tǒng)設(shè)計(jì)實(shí)例精講[M].北京:電子工業(yè)出版社,2009:126-140.
[5]TMS320C6713 Fixed-point Digital Signal Processor Data Manual[M].TI Corporation,2004:203-278.
[6]李方慧,王飛,何佩琨.TMS320C6000系列DSPs原理與應(yīng)用[M].北京:電子工業(yè)出版社,2003:390-408.
[7] Texas Instruments Incorporated Applications using the TMS320C6000 enhanced DMA[R].2006:103-270.
[8]Applications Using the TMS320C6000 Enhanced DMA[M].TI Corporation,2001:121-199.