基于DSP TMS320C6416的實(shí)時(shí)圖像處理系統
引言
本文設計了基于TMS320C6000系列DSP的MPEG-4編碼器。將攝像頭獲取的圖像以MPEG-4標準進(jìn)行實(shí)時(shí)壓縮并通過(guò)VGA實(shí)時(shí)顯示,同時(shí)把壓縮好的數據通過(guò)PCI總線(xiàn)傳輸給ARM控制器,經(jīng)由ARM根據實(shí)際的需要進(jìn)行視頻數據的網(wǎng)絡(luò )傳輸。
MPEG-4 是一種開(kāi)放性標準,其中許多部分都沒(méi)有規定,可以加入一些新的算法,因此采用通用DSP 能夠隨時(shí)更新算法、優(yōu)化算法,使得編碼效率更高。由于MPEG-4 編碼算法復雜,需要存儲的數據量大,無(wú)論是存儲空間分配、數據傳輸還是運算速度對DSP來(lái)說(shuō)都是挑戰。
C6000系列DSP是TI公司生產(chǎn)的高檔DSP。這一系列DSP都是基VelociTITM構架的VLIW DSP,它在每個(gè)周期可以執行八條32bit 的指令, 具有高達200MHZ的CPU,從而使得其運算能力達到1600MIPS。而6416在600MHz主頻下,只利用50%的運算能力就可以同時(shí)進(jìn)行單通道MPEG-4視頻編碼、單通道MPEG-4視頻解碼和單通道MPEG-2視頻編碼的處理。同時(shí)其對外接口靈活、開(kāi)發(fā)工具齊全,被大多數嵌入式圖像實(shí)時(shí)壓縮系統所采用。因此本系統采用TI公司TMS320C6416芯片為核心處理器。
1.TMS320C6416的結構及特點(diǎn)
DSP的CPU結構如圖1所示,它具有兩個(gè)通道,每個(gè)通道具有4個(gè)功能單元(1個(gè)乘法器和3個(gè)算術(shù)邏輯單元),16個(gè)32位通用寄存器,每個(gè)通道的功能單元可以隨意訪(fǎng)問(wèn)本通道的寄存器。CPU還有兩個(gè)交叉單元,通過(guò)它們,一個(gè)通道的功能單元可以訪(fǎng)問(wèn)另一個(gè)通道的寄存器。另外, CPU還具有256 bit寬的數據和程序通道,可以使程序存儲器在每個(gè)時(shí)鐘周期提供8條并行執行指令。這種CPU結構是DSP具有VLIW結構的最基本條件。此DSP的存儲空間映射為內部存儲器、內部外設及擴展存儲器。其中內部存儲器由64KB內部程序存儲器和數據存儲器構成,內部程序存儲器可以映射到CPU地址空間或者作為Cache操作。內部和外部數據存儲器均可通過(guò)CPU、DMA或HPI(Host Interface)方式訪(fǎng)問(wèn),HPI接口使上位機可以訪(fǎng)問(wèn)DSP的存儲空間。
2.系統硬件設計
本系統主要分為三部分,分別是視頻采集模塊、視頻的MPEG-4編碼模塊和視頻傳輸模塊,其結構框圖如圖2所示。
2.1 視頻采集
在本系統中,對輸入的模擬視頻信號的采集是由BT835視頻Decoder完成的,支持的視頻輸入為PAL制或NTSC制式的標準模擬視頻信號,輸入的視頻信號既可以是復合視頻信號,也可以是S-Video信號,輸出為4:2:2的YUV格式的圖像數據。
圖3所示為DSP 模擬視頻輸入接口原理框圖。標準模擬視頻信號經(jīng)預處理進(jìn)入A/ D轉換器;同時(shí)又經(jīng)時(shí)鐘產(chǎn)生電路得到與行同步同相位的A/ D 轉換時(shí)鐘,這樣可以使得每行的采樣點(diǎn)均為整數。為了確保視頻數據整行地被采集到DSP 中進(jìn)行處理,特將行同步信號作為FIFO 讀入數據的起點(diǎn)。同時(shí),行同步、場(chǎng)同步以及奇偶場(chǎng)標志信號也直接進(jìn)入DSP ,使其能夠確定讀入的視頻數據在一幀中的具體位置。為了增強系統的實(shí)時(shí)性,這里利用TMS320C6416 DSP 的DMA(直接存儲器存取) 通道背景操作特性,以使DSP 和外設的數據交換能夠與其內部CPU 的高速運算操作同時(shí)進(jìn)行。而FIFO 的功能在于,通過(guò)它的緩沖,使得DSP 可以從容地與A/ D 之外的其它外設交換數據。
其中ARM7的作用是時(shí)鐘的產(chǎn)生及控制視頻采集芯片,將采得的數據從8位或16位轉化為32位,并且使數據按照Y、U、V分開(kāi)的方式排列。這樣相當于對采集到的數據進(jìn)行了一次預處理,以便于視頻編碼使用。另外ARM7將32位寬的數據輸出給32位的FIFO。用32位的FIFO以及將視頻數據轉換為32位,可以使DSP讀取視頻數據時(shí)32位的數據總線(xiàn)沒(méi)有空閑,從而提高DSP讀取視頻數據的效率;這里使用FIFO是為了減少DSP讀取數據的時(shí)間、降低高速設備和低速設備的不匹配。每次FIFO半滿(mǎn)時(shí),ARM7會(huì )給DSP發(fā)送中斷信號, 并且在中斷處理程序中使用DMA方式讀取視頻數據;如果不使用ARM7,DSP會(huì )頻繁中斷,從而花費大量時(shí)間在入棧、出棧以及寄存器的設置上。
2.2 視頻的MPEG-4編碼模塊
DSP讀入視頻數據后進(jìn)行先期處理,如將YUV格式轉為RGB格式等;然后進(jìn)行MPEG-4視頻編碼。在這一過(guò)程中,數據訪(fǎng)問(wèn)通常要占用50%的時(shí)間,算術(shù)運算要占用30%的時(shí)間,控制要占用20%的時(shí)間。因為需要進(jìn)行運動(dòng)估計和運動(dòng)補償,在數據存儲器中通常保存一幀I(原始幀)幀圖像和至少一幀P(預測幀)幀圖像,這些圖像占用的空間都比較大,因此放在外部存儲器SDRAM里。在編碼過(guò)程中還要存儲DCT系數、運動(dòng)向量、量化矩陣、可變長(cháng)編碼表、Z形編碼表等,由于占用較小的存儲空間而且會(huì )反復用到,因此把它們放在片內存儲器中。
2.3 視頻傳輸
與PC 機不同,DSP 片內片外的兩級存儲體系結構以及數據分配原則決定了編碼器實(shí)現過(guò)程中必然存在大量的數據傳輸,因而必須有效地管理以減少數據傳輸所需的時(shí)間。
至于數據的采集部分可以利用DSP的DMA來(lái)進(jìn)行。TMS320C6000 DSP 大都具有幾個(gè)獨立的DMA 通道,DMA 的特點(diǎn)是可以在不受CPU 干預的情況下完成數據從源地址到目的地址的搬移。
但是DMA 只適合于數據塊的整體搬移,對于不同數據結構間的數據傳輸,前DSP 的DMA 控制器就無(wú)能為力了。所以可以借助ARM7控制DSPDMA 來(lái)完成視頻編碼中復雜的數據傳輸。
完成編碼后的視頻數據通過(guò)ARM7來(lái)進(jìn)行和外界的傳輸,可以通過(guò)Internet、 CDMA或者GSM網(wǎng)絡(luò )等,只需要ARM7設計相應的傳輸接口即可。至于A(yíng)RM7與編碼卡通信可以通過(guò)并口、串口、USB口、PCI接口等方式實(shí)現。其中PCI 接口方式易于A(yíng)RM7與編碼器高速傳輸數據,因此可以采用PCI接口。編碼后的數據通過(guò)DSP的HPI、PCI橋芯片、PCI總線(xiàn)到達ARM7。ARM7通過(guò)DSP的HPI直接對DSP的存儲空間進(jìn)行訪(fǎng)問(wèn)。
3 軟件設計及優(yōu)化
3.1 視頻采集
本系統在視頻采集中設計了一個(gè)數據結構將空間連續的先行緩沖區轉化為一個(gè)環(huán)形的緩沖區,其簡(jiǎn)單的示意圖如圖4所示。
采用此方法只要為這個(gè)緩沖區分配足夠大的空間,使其中存放的圖像幀的數目至少大于3,這樣就可以保證在對圖像數據進(jìn)行處理的同時(shí)還可以同步進(jìn)行新的圖像數據的采集,而不會(huì )發(fā)生任何數據沖突。系統將會(huì )永遠保留環(huán)形緩沖區中最舊的N幀圖像直至被系統取走。
3.2 視頻編碼
MPEG-4的視頻編碼是基于對象的視頻編碼,它仍然采用傳統的預測編碼、運動(dòng)補償、DCT變換構成的混合編碼方式。編碼器的核心算法包括運動(dòng)估計、DCT/IDCT、量化、VLC 等,其中運動(dòng)估計占據整個(gè)編碼器近四分之一的運算量。因此,研究適合DSP 結構的、在速度和編碼質(zhì)量之間具有良好折中的運動(dòng)估計算法是實(shí)現實(shí)時(shí)編碼的一個(gè)關(guān)鍵問(wèn)題。
在視頻編碼中應該采用塊匹配的運動(dòng)估計算法,但傳統的塊匹配算法在匹配速度上達不到滿(mǎn)意的效果,因此本系統采用了在三步搜索算法的基礎上改進(jìn)的四步搜索的塊匹配算法。
四步搜索算法描述如下:
(1)搜索匹配點(diǎn)組成一個(gè)菱形窗口,如圖5所示。初始的9個(gè)匹配點(diǎn)為菱形的4個(gè)頂點(diǎn)、4條邊的中點(diǎn)及菱形的中心點(diǎn),如圖5中的實(shí)心點(diǎn)。對每個(gè)點(diǎn)計算SAD的值,選取SAD最小的點(diǎn)。如果該點(diǎn)是此次搜索窗口的中心則跳到第4步,否則到第2步。
圖5 四步搜索算法示意圖
(2)以SAD最小的點(diǎn)為新的菱形匹配點(diǎn)窗口的中心點(diǎn),其余的匹配點(diǎn)的選取按下面的原則進(jìn)行。
a)如果SAD最小的點(diǎn)是當前搜索窗口的角上的點(diǎn),如A點(diǎn),則取與A點(diǎn)不相鄰的另外5個(gè)點(diǎn),如圖5中的形如的點(diǎn)。選取SAD最小的點(diǎn),并到第3步;
b)如果SAD最小的點(diǎn)是當前搜索窗口的邊上的點(diǎn),如B點(diǎn),則取與B點(diǎn)不相鄰的另外3個(gè)點(diǎn),如圖5中的形如的點(diǎn)。選取SAD最小的點(diǎn),并到第3步;
c)如果SAD最小的點(diǎn)是當前搜索窗口的中心點(diǎn)C點(diǎn),則到第4步;
(3)搜索模式同2,最后都到第4步。
(4)選取周?chē)乃膫€(gè)點(diǎn)作為匹配點(diǎn),步長(cháng)改為1,如圖5中所示的空心點(diǎn)。選取SAD最小的點(diǎn)作為最終目標點(diǎn)。
四步搜索算法比三步搜索算法的復雜度更小,但精度并沒(méi)有降低,同時(shí)算法規則易于實(shí)現軟件流水,而非常適合在DSP 上實(shí)現。
3.3 軟件優(yōu)化
由于圖像處理的數據量大,數據處理相關(guān)性高,并且具有嚴格的幀、場(chǎng)時(shí)間限制,因此如何針對圖像處理的特點(diǎn)對DSP 進(jìn)行優(yōu)化編程,充分發(fā)揮其性能就成為提高整個(gè)系統性能的關(guān)鍵。
要想充分發(fā)揮DSP的運算能力,必須從它的硬件結構出發(fā),最大限度地利用八個(gè)功能單元,使用軟件流水線(xiàn),盡量讓程序無(wú)沖突地并行執行。一般循環(huán)體都滿(mǎn)足并行處理的條件,并且循環(huán)體往往是程序中耗時(shí)最長(cháng)的。因此在進(jìn)行優(yōu)化時(shí)將重點(diǎn)放在循環(huán)體上。
1) DSP跳轉指令的優(yōu)化
DSP的指令多為單周期指令,但是轉移類(lèi)指令卻通常要耗費較多的時(shí)鐘周期,每個(gè)跳轉都有5個(gè)延遲間隙,從性能上考慮是一項很耗時(shí)的工作,因此應盡可能地減少程序中的分支。
2) 使用庫函數
TI公司對TMS320C6000的用戶(hù)提供了功能強大的IMAGE LIB庫支持。在這個(gè)庫中,包含許多常用函數,可以完成DCT/IDCT變換、小波變換、DCT量化、自適應濾波等功能。這些函數都是優(yōu)化過(guò)的,完全能夠實(shí)現軟件流水,效率很高。
3)存儲空間的考慮
DSP存儲空間的配置十分重要。因為DSP對不同的存儲單元的訪(fǎng)問(wèn)速度是有區別的,對片內寄存器的訪(fǎng)問(wèn)速度最快,對片內RAM的訪(fǎng)問(wèn)速度比片外RAM的訪(fǎng)問(wèn)速度快。因此合理地配置和使用存儲空間,對系統整體效率影響很大。應該盡可能地把訪(fǎng)問(wèn)比較頻繁的常數表和代碼段裝入片內RAM,如果過(guò)大,則把其中一部分裝入片外存儲器。
4)混合編程
不同于傳統的VLIW ,Veloci TI 采用了多種先進(jìn)技術(shù),從而使得DSP的C編譯器具有很高的效率,我們稱(chēng)之為面向C語(yǔ)言結構的DSP芯片。其平均編譯效率可以達到手工匯編的84 %。這使得在絕大多數應用中我們可以采用C 語(yǔ)言編寫(xiě)程序從而充分利用大量用C 描述的算法程序,并獲得遠勝于傳統DSP程序的可維護性、可移植性、可繼承性,縮短開(kāi)發(fā)周期。
雖然C6000的C編譯器有如此高的編譯效率,但是對于MPEG-4這樣復雜的算法,只運用C語(yǔ)言是遠遠不夠的,一般采用C語(yǔ)言和匯編語(yǔ)言相結合的方式來(lái)完成程序設計。程序設計流程如下:先寫(xiě)C代碼并對其優(yōu)化,如果不能達到預期的運行效率,則編寫(xiě)匯編代碼來(lái)提高效率。
4 總結
該系統非常靈活,支持的視頻輸入為PAL制或NTSC制式的標準模擬視頻信號,輸入的視頻信號既可以是復合視頻信號,也可以是S-Video信號。并支持多分辨率,分別為FULL、CIF和QCIF,可以滿(mǎn)足多種應用的需求。測試證明經(jīng)過(guò)以上的優(yōu)化可以實(shí)現視頻圖像的實(shí)時(shí)壓縮,同時(shí)系統運行可靠、功耗低。
評論