當(dāng)前位置: 首頁(yè) > 行業(yè)動(dòng)態(tài)
發(fā)布日期:2022-07-14 點(diǎn)擊率:40
數(shù)字視頻編碼在諸如數(shù)字視頻監(jiān)控系統(tǒng)與視頻會(huì)議系統(tǒng)等眾多應(yīng)用中發(fā)揮著重要作用。本文將對(duì)以TMS320C64x/DM64xDSP為基礎(chǔ)的通用視頻編碼器優(yōu)化技術(shù)進(jìn)行介紹。基于DM64x的視頻編碼優(yōu)化結(jié)合了多種技術(shù),其中包括算法/系統(tǒng)優(yōu)化、存儲(chǔ)器緩沖優(yōu)化、EDMA及高速緩存利用率優(yōu)化等。
TMS320C64x/DM64x器件建立在德州儀器(TI)開(kāi)發(fā)的第二代高性能VLIW架構(gòu)(VelociTI.2)基礎(chǔ)之上。該器件具有VLIW架構(gòu)、2級(jí)存儲(chǔ)器/高速緩存層次結(jié)構(gòu)以及EDMA引擎等關(guān)鍵特性,從而使其成為計(jì)算強(qiáng)度較大的視頻/影像應(yīng)用(如視頻編碼與分析)的最佳選擇之一。利用DM64x進(jìn)行應(yīng)用開(kāi)發(fā)時(shí),需要全面了解其特性與開(kāi)銷(xiāo)以實(shí)現(xiàn)最佳性能。下面以DM642為例在此列出其所有DSP關(guān)鍵特性:
1. 增強(qiáng)功能單元
DM64x的8個(gè)功能單元中的VelociTI.2擴(kuò)展包括加速視頻與影像應(yīng)用性能的新指令。
2. L1/L2分級(jí)存儲(chǔ)器結(jié)構(gòu)
圖1:視頻編碼結(jié)構(gòu)圖。
16KB直接映射的L1P程序高速緩存,帶有32字節(jié)的高速緩存管線(xiàn)(8周期L1P高速緩存缺失損失)。
16KB雙路關(guān)聯(lián)L1D數(shù)據(jù)高速緩存,帶有64字節(jié)的高速緩存管線(xiàn)(6循環(huán)L1D高速緩存缺失損失)。
256KBL2統(tǒng)一映射RAM/高速緩存(靈活的RAM/緩存分配)
L2四路關(guān)聯(lián)高速緩存,帶有128字節(jié)的高速緩存管線(xiàn)。
3. 位優(yōu)先原則:低位優(yōu)先(Little Endian),高位優(yōu)先(Big Endian)。
4.64位外部存儲(chǔ)器接口(EMIF):至異步與異步存儲(chǔ)器的無(wú)膠合邏輯接口。
5.1024MB總的可尋址外部存儲(chǔ)器空間。
6.增強(qiáng)型直接存儲(chǔ)器存取(EDMA)控制器(64個(gè)獨(dú)立通道)。
片上外設(shè)集包括:三個(gè)可配置的視頻端口,一個(gè)10/100Mbps以太網(wǎng)MAC(EMAC),一個(gè)管理數(shù)據(jù)輸入/輸出(MDIO)模塊,一個(gè)VCXO內(nèi)插控制端口(VIC)。視頻端口外設(shè)提供與通用視頻解碼器和編碼器相連的無(wú)縫接口,以支持多種視頻分辨率及標(biāo)準(zhǔn),如、、SMPTE125M/260M/274M/296M等。
上面的功能特性對(duì)包括視頻編碼在內(nèi)的所有算法的執(zhí)行都相當(dāng)重要。二級(jí)存儲(chǔ)器/高速緩存分級(jí)結(jié)構(gòu)與EDMA引擎基本決定了視頻編碼器實(shí)現(xiàn)的架構(gòu)。在算法實(shí)現(xiàn)過(guò)程中,我們需要弄清一些有關(guān)存儲(chǔ)器/高速緩存層次結(jié)構(gòu)以及EDMA引擎的基本概念。如果代碼大于L1P,就可能發(fā)生L1P高速緩存缺失,CPU停止運(yùn)行至到讀取到所需代碼。類(lèi)似地,如果數(shù)據(jù)與L1D不符,就會(huì)出現(xiàn)L1D高速緩存缺失并且CPU停止運(yùn)行。所有的L1P與L1D缺失問(wèn)題均由L2高速緩存/SRAM來(lái)解決。如果代碼與數(shù)據(jù)的大小均大于L2高速緩存的容量,那么就可能出現(xiàn)L2高速緩存缺失。與L1P/L1D高速緩存缺失損失相比,L2缺失損失通常更嚴(yán)重,因?yàn)長(zhǎng)2高速緩存需要與速度較低的片外存儲(chǔ)器相互傳遞數(shù)據(jù)/代碼。
確保視頻編碼器最佳性能的兩大重要因素是進(jìn)行有利于高速緩存的程序分區(qū)(program partitioning)以及數(shù)據(jù)傳輸處理(如減少L1/L2缺失)。盡管L2 SRAM可用于解決L1D/L1P缺失問(wèn)題,我們通常還是更傾向于采用EDMA來(lái)傳輸L2 SRAM與片外存儲(chǔ)器之間的代碼/數(shù)據(jù),因?yàn)镋DMA的傳輸效率通常高于L2高速緩存。
視頻編碼器系統(tǒng)/算法優(yōu)化
圖1給出了通用視頻編碼算法結(jié)構(gòu)圖,MPEG2、及MPEG4等許多視頻編碼標(biāo)準(zhǔn)都可從該算法結(jié)構(gòu)圖衍生而來(lái)。在圖1中,DCT與量化(Q)去除了視頻的空間冗余;運(yùn)動(dòng)估計(jì)(ME)降低了視頻的時(shí)間冗余;VLC進(jìn)行熵編碼(entropycoding),以將數(shù)據(jù)有效地進(jìn)行分組。
通常,視頻編碼器的實(shí)現(xiàn)是以宏模塊(MB)為基礎(chǔ)。這就是說(shuō),只有在當(dāng)前MB完成所有處理步驟后,視頻編碼器才讀取下一個(gè)MB。這種靠直覺(jué)進(jìn)行操作的方法存在兩大缺點(diǎn):
1.視頻編碼器的整體代碼尺寸通常大于L1P。在每個(gè)MB讀取階段,代碼都需要在L1P和L2P之間進(jìn)行交換,這會(huì)造成嚴(yán)重的高速緩存缺失問(wèn)題。
2.用EDMA從外部視頻幀存儲(chǔ)器向內(nèi)部存儲(chǔ)器傳輸小塊數(shù)據(jù)(如一個(gè)MB)的效率不高。
為了避免造成大量高速緩存缺失損失和CPU停止響應(yīng)問(wèn)題,我們可將算法分為三個(gè)小循環(huán)/模塊,每部分都能在L1P中容下。每個(gè)循環(huán)中每次同時(shí)操作M個(gè)宏模塊(MB串),而不是只操作一個(gè)宏模塊。M是宏模塊串的大小,只受可用L1D大小的限制。M越大,就能獲得的越高的EDMA數(shù)據(jù)吞吐量性能。
三個(gè)小循環(huán)為:
1. 宏模塊編碼環(huán)路
2. 運(yùn)動(dòng)估計(jì)環(huán)路
3. 宏模塊重建環(huán)路
正如上面強(qiáng)調(diào)指出的那樣,每次都讀取M個(gè)宏模塊,一起經(jīng)過(guò)三個(gè)環(huán)路中的一個(gè)來(lái)處理。舉例來(lái)說(shuō),在宏模塊編碼循環(huán)中,如果將M個(gè)宏模塊讀入內(nèi)部存儲(chǔ)器,那么將對(duì)其進(jìn)行DCT轉(zhuǎn)換、量化以及熵編碼。只有當(dāng)宏模塊編碼環(huán)路結(jié)束時(shí),這一組宏模塊才離開(kāi)L1D。相應(yīng)的程序包括DCT、量化以及VLC內(nèi)核,其會(huì)在所有M個(gè)宏模塊在L1P中完全處理之后才脫離該環(huán)路。EDMA引擎驅(qū)動(dòng)的乒乓存儲(chǔ)器緩沖方案有助于減少執(zhí)行一組宏模塊時(shí)環(huán)路初始的設(shè)置時(shí)間,同時(shí)還可確保最小化的CPU停止周期,這是由于傳輸與處理并行進(jìn)行的原因。
視頻編碼器的存儲(chǔ)器緩沖方案
為了獲得最佳性能,許多與關(guān)鍵內(nèi)核相關(guān)的查找表格、狀態(tài)變量以及數(shù)據(jù)緩沖都必須位于內(nèi)部存儲(chǔ)器之中。除了上述基本數(shù)據(jù)所占用的存儲(chǔ)器之外,部分TMS320DM64x仍有足夠的內(nèi)部存儲(chǔ)器可容納整個(gè)視頻幀,以供編碼器處理。但有的器件則不行,因?yàn)閮?nèi)部SRAM在不同的C64x/DM64x器件間有所差異。有些應(yīng)用只需運(yùn)行視頻編碼器,而其它應(yīng)用則要運(yùn)行其他算法,其中包括視頻編碼等。為了針對(duì)大多數(shù)視頻應(yīng)用情況下的所有DM64x器件提供通用的視頻緩沖方案,全部視頻幀應(yīng)位于外部存儲(chǔ)器,而非內(nèi)部存儲(chǔ)器中。EDMA每次將M個(gè)MB帶從外部視頻緩沖傳輸?shù)絻?nèi)部緩沖。正如我們?cè)谏弦还?jié)中談到的那樣,M只受L1D大小的限制。
圖片群(GOP)是視頻編碼中的重要概念,因?yàn)槠浯_定了每個(gè)視頻幀的編碼方案。通常,在GOP中定義所有視頻編碼標(biāo)準(zhǔn)的I幀和P幀。B幀只包含在高級(jí)視頻編碼配置文件(profile)中,如MPEG4高級(jí)簡(jiǎn)單配置文件以及MPEG2主配置文件等。對(duì)于I幀而言,我們可采用類(lèi)似JPEG的編碼方案來(lái)去除空間冗余。對(duì)于P幀來(lái)說(shuō),我們采用前向運(yùn)動(dòng)估計(jì)(forward motion estimation),并以此前的I/P作為參考。對(duì)于B幀而言,前向ME(forward ME)不僅需要此前的I/P幀,而且還需要隨后的I/P幀用于后向ME(backward ME)。視頻編碼器必須在兩個(gè)P幀之間對(duì)所有B幀進(jìn)行緩沖,這是由于B幀采用雙向ME方案的緣故。圖2給出了視頻幀的數(shù)據(jù)依賴(lài)性。
圖2:視頻編碼器中視頻幀的數(shù)據(jù)依賴(lài)性。
我們已經(jīng)熟知,對(duì)于B幀GOP而言,視頻捕獲/顯示的順序不同于視頻編碼順序。例如,GOP= IBBP BBP BBP BBP BB的順序適用于捕獲/顯示,而GOP編碼順序則為GOP'= IPBB PBB PBB PBB……。視頻編碼算法分區(qū)的關(guān)鍵在于使CPU負(fù)載盡可能暫時(shí)不變。
EDMA的使用
TMS320C64x器件的增強(qiáng)型DMA(EDMA)控制器是一種高效率的數(shù)據(jù)傳輸引擎,每個(gè)EDMA周期都可處理多達(dá)8個(gè)字節(jié),從而可在CPU速率為600MHz時(shí)實(shí)現(xiàn)每秒的總數(shù)據(jù)吞吐量。為了使我們的視頻編碼器應(yīng)用能充分受益于傳輸引擎的帶寬,充分利用可用的總線(xiàn)寬度非常重要。換言之,我們應(yīng)該盡量使用32位大小的傳輸單元。為了有效利用EDMA,我們應(yīng)當(dāng)很好地了解EDMA的傳輸過(guò)程。在EDMA通信方面,每次數(shù)據(jù)傳輸都由傳輸請(qǐng)求(TR)發(fā)起,該請(qǐng)求包含執(zhí)行傳輸所需的所有信息,如源地址、目標(biāo)地址、傳輸屬性、傳輸單元的數(shù)量等。TR根據(jù)優(yōu)先級(jí)的不同分為不同的隊(duì)列。如果TR達(dá)到隊(duì)列頭(head of queue),那么它將轉(zhuǎn)移到EDMA傳輸控制器隊(duì)列寄存器中,該寄存器執(zhí)行由TR定義的實(shí)際數(shù)據(jù)移動(dòng)。
傳輸控制器(TC)是EDMA引擎處理TR并執(zhí)行實(shí)際數(shù)據(jù)移動(dòng)的部分。在TC中,TR被轉(zhuǎn)移至傳輸請(qǐng)求隊(duì)列之一,等待處理。傳輸優(yōu)先級(jí)決定了該隊(duì)列應(yīng)被提交到哪個(gè)隊(duì)列,一共有四個(gè)隊(duì)列,對(duì)應(yīng)于四種優(yōu)先級(jí),每種深度為16項(xiàng)。這四種隊(duì)列分別為緊急(Q0)、高(Q1)、中(Q2)以及低(Q3)。可對(duì)每個(gè)TMS320C64X傳輸請(qǐng)求發(fā)出者進(jìn)行編程,使其可發(fā)出任意優(yōu)先級(jí)的TR。地址生成/傳輸邏輯一次只能為每個(gè)優(yōu)先隊(duì)列的一個(gè)TR提供服務(wù)。傳輸邏輯可并行處理不同優(yōu)先級(jí)的傳輸。為了最大化視頻編碼器中的數(shù)據(jù)傳輸帶寬,只要可能,就應(yīng)在所有四種優(yōu)先級(jí)上對(duì)傳輸進(jìn)行分配。TC包含四組隊(duì)列寄存器,每種對(duì)應(yīng)一個(gè)優(yōu)先級(jí)隊(duì)列,監(jiān)控傳輸過(guò)程。在特定隊(duì)列的寄存器組中,其會(huì)保持傳輸?shù)漠?dāng)前源地址、目標(biāo)地址以及數(shù)量等。這些寄存器不在器件的存儲(chǔ)器映射中,對(duì)CPU不可用。傳輸過(guò)程中的實(shí)際數(shù)據(jù)移動(dòng)發(fā)生在寄存器中。
EDMA也能通過(guò)使用CPU發(fā)出的QDMA請(qǐng)求執(zhí)行非同步傳輸。換言之,QDMA傳輸是通過(guò)CPU實(shí)現(xiàn)同步的。在視頻編碼器中,EDMA傳輸由算法的數(shù)據(jù)流實(shí)現(xiàn)同步,而非通過(guò)外部事件實(shí)現(xiàn)。QDMA更適合發(fā)出單個(gè)的獨(dú)立傳輸,以便快速移動(dòng)數(shù)據(jù),而不適合像其它EDMA通道那樣執(zhí)行周期性或重復(fù)性傳輸。每次發(fā)出的傳輸請(qǐng)求均由EDMA處理。根據(jù)優(yōu)先級(jí)對(duì)請(qǐng)求進(jìn)行排隊(duì),最先處理優(yōu)先級(jí)較高的請(qǐng)求。由于EDMA的結(jié)構(gòu)使然,要通過(guò)不同的隊(duì)列提出傳輸請(qǐng)求(但根據(jù)優(yōu)先級(jí)提交)。所有QDMA傳輸都采用幀同步提交。因此,QDMA總是請(qǐng)求傳輸數(shù)據(jù)的完整幀。對(duì)于任何QDMA提交而言,發(fā)出的請(qǐng)求只有一個(gè)。良好的視頻編碼器應(yīng)并行采用所有三種優(yōu)先級(jí)隊(duì)列(低、中和高)以便在外部存儲(chǔ)器與內(nèi)部片上緩沖之間進(jìn)行數(shù)據(jù)傳輸。
高速緩存優(yōu)化
最大化高速緩存的效率是實(shí)現(xiàn)總體視頻編碼性能目標(biāo)的關(guān)鍵因素之一。高效的高速緩存可減少由于存儲(chǔ)器活動(dòng)而造成的CPU停止響應(yīng),從而提高處理器的吞吐量。正如我們?cè)诘谝还?jié)中介紹的那樣,包括DM64x等在內(nèi)的TM320C64xDSP使用高效的二級(jí)存儲(chǔ)器架構(gòu)實(shí)現(xiàn)片上程序與數(shù)據(jù)存取。在這種結(jié)構(gòu)層次中,CPU直接與專(zhuān)用一級(jí)程序(L1P)和數(shù)據(jù)(L1D)高速緩存相連。L1高速緩存工作的速度與CPU相同。直接映射的L1P高速緩存是只讀的,而卻可對(duì)雙路關(guān)聯(lián)相關(guān)高速緩存L1D進(jìn)行讀寫(xiě)。將L1存儲(chǔ)器與稱(chēng)作L2的二級(jí)片上存儲(chǔ)器連接。L2是一種統(tǒng)一的存儲(chǔ)器塊,其包括程序與數(shù)據(jù)。L2高速緩存作為L(zhǎng)1和片外存儲(chǔ)器之間連接的橋梁。如欲獲得本高速緩存架構(gòu)的詳細(xì)文檔,敬請(qǐng)參閱C6000外設(shè)參考指南(SPRU190f)。
參考文獻(xiàn):
[1] Anurag Jain, Ratna Reddy, Jeremiah Golston, Jagadeesh Sankaran, Programmable Real-time MPEG-2 Encoding, GSPx 2002.
[2] Kyoung Won Lim, Jong Beom Ra. Improved hierarchical search block matching algorithm by using multiple motion vector candidates. Electronic Letters, Volume: 33 Issue:21, 9 Oct. 1997 Page(s): 1771-1772.
[3] Ismaeil, I.R.; Docef, A., Kossentini, F., Ward, R. Motion estimation using long-term motion vector prediction. Data Compression Conference, Proc. 1999 Page(s): 531.
[4] J. Lee and B.W. Dickinson. Temporally adaptive motion interpolation exploiting temporal asking in
visual perception. IEEE Trans. Image Proc., 3(5): 513-526, Sep 1994.
作者:彭程博士
德州儀器公司