基于Xtensa可配置處理器技術(shù)的視頻加速引擎技術(shù)
掌上多媒體設(shè)備的增長(zhǎng)極大地改變了終端多媒體芯片供應(yīng)商對(duì)產(chǎn)品的定位需求。這些芯片提供商的IC設(shè)計(jì)目標(biāo)不再僅僅針對(duì)一兩種多媒體編解碼器。消費(fèi)者希望他們的移動(dòng)設(shè)備能夠利用不同的設(shè)備來(lái)播放媒體,能夠采用不同的標(biāo)準(zhǔn)進(jìn)行編碼,并能夠從不同的設(shè)備來(lái)下載或者接收媒體數(shù)據(jù)。視頻譯碼器和編碼器引擎必須滿足多種需求,并具有面積和功耗優(yōu)勢(shì)。
1、設(shè)計(jì)視頻加速引擎的傳統(tǒng)RTL方法
上一代視頻ASIC的設(shè)計(jì)主要對(duì)MPEG-2進(jìn)行編碼和譯碼,因?yàn)檫@是DVD標(biāo)準(zhǔn)。有些視頻ASIC還支持MPEG-1,用于VCD(視頻CD)播放。在多數(shù)情況下,MPEG-2編碼器和譯碼器都采用RTL設(shè)計(jì)方法。一個(gè)典型MPEG-2視頻ASIC體系結(jié)構(gòu)如圖1所示,其中包括由各個(gè)RTL模塊構(gòu)成的視頻子系統(tǒng)、主控制器和片上存儲(chǔ)器。
采用硬線RTL體系結(jié)構(gòu)支持多種視頻標(biāo)準(zhǔn),然而,這也意味著每個(gè)視頻標(biāo)準(zhǔn)都需要一個(gè)專用的RTL模塊來(lái)實(shí)現(xiàn)。采用硬線RTL模塊實(shí)現(xiàn)一個(gè)多種標(biāo)準(zhǔn)的視頻加速引擎具有一定的局限性。無(wú)論是實(shí)現(xiàn)一個(gè)新的視頻標(biāo)準(zhǔn)、更新已有的標(biāo)準(zhǔn)還是消除其中的故障都需要重新進(jìn)行芯片加工。
2、采用處理器作為視頻加速引擎的優(yōu)勢(shì)
可編程處理器能夠滿足多種視頻標(biāo)準(zhǔn)的靈活性要求。與RTL模塊設(shè)計(jì)方法相比,可編程處理器具有如下幾個(gè)優(yōu)勢(shì):一是易于將編解碼器與處理器接口;二是滿足新的視頻標(biāo)準(zhǔn)要求、更新現(xiàn)有編解碼器或者采用軟件方法在芯片投片后也可以修改故障;三是可以采用軟件更新的方法很容易地提高視頻編解碼器的性能。
然而,傳統(tǒng)的32位處理器存在性能瓶頸,因?yàn)樗鼈兪敲嫦蛲ㄓ么a設(shè)計(jì)的,而不是面向視頻加速引擎設(shè)計(jì)的。嵌入式DSP也并非專門為視頻量身定做的,而是包括硬件功能部件、指令和接口,專門應(yīng)用于通用DSP領(lǐng)域。因此,為了在傳統(tǒng)RISC和DSP處理器上實(shí)現(xiàn)視頻編解碼器,就必須使這些處理器運(yùn)行在很高的速度(Mhz)上,需要大量的存儲(chǔ)器空間,因此需要很大的功耗,不適合便攜式應(yīng)用。
通過(guò)研究一個(gè)視頻內(nèi)核程序所需要的計(jì)算量,即可一目了然。比如,一個(gè)絕對(duì)差值累加運(yùn)算SAD,該運(yùn)算是大部分視頻編碼算法中運(yùn)動(dòng)估計(jì)一步常采用的方法。SAD算法將會(huì)在相鄰兩個(gè)連續(xù)視頻幀中找出宏塊的運(yùn)動(dòng)情況,為此,需要計(jì)算兩個(gè)宏塊中每一組對(duì)應(yīng)的像素值之間絕對(duì)差值的累加和。
下面C代碼給出了SAD核心算法的簡(jiǎn)單實(shí)現(xiàn):
for (row = 0; row < numrows; row++) {
for (col = 0; col < numcols; col++) {
accum += abs(macroblk1[row][col] - macroblk2[row][col]);
} /* column loop */
} /* row loop */
SAD核心算法的基本計(jì)算方法如圖2所示。正像圖中所示的那樣,SAD核心算法首先執(zhí)行減法操作,然后取絕對(duì)值,最后對(duì)前面的結(jié)果進(jìn)行累加。
在一個(gè)RISC處理器上計(jì)算一個(gè)由兩個(gè)16x16宏塊組成的SAD運(yùn)算需要256次減法運(yùn)算、256次絕對(duì)值運(yùn)算和256次累加運(yùn)算,共需要768次算術(shù)運(yùn)算,這還不包括因數(shù)據(jù)轉(zhuǎn)移需要的取數(shù)和存數(shù)操作。由于這需要對(duì)每一幀的所有宏塊進(jìn)行操作,因此,隨著分辨率的提高引起視頻幀增加,使得計(jì)算成本極度昂貴。
事實(shí)上,對(duì)于一個(gè)一般的通用RISC處理器而言(包括一些DSP指令,如乘法指令和乘累加指令),執(zhí)行一個(gè)H.264基準(zhǔn)譯碼算法需要250 MHz的性能(CIF分辨率),而執(zhí)行一個(gè)H.264基準(zhǔn)編碼算法則需要超過(guò)1 GHz的性能(CIF分辨率)。完成上述運(yùn)算,僅處理器內(nèi)核就需要500mW的功耗,更不要說(shuō)由訪存和視頻SOC的其它部件所用的功耗。