利用可配置處理器來(lái)創(chuàng)建多標(biāo)準(zhǔn)多分辨率視頻引擎
隨著消費(fèi)類(lèi)電子產(chǎn)品,尤其是手機(jī)、PDA和便攜式媒體播放器(PMP)的急劇發(fā)展,其對(duì)于終端硅供應(yīng)商的要求也大大提高。對(duì)這些供應(yīng)商來(lái)說(shuō),設(shè)計(jì)僅僅能夠適用于一到兩個(gè)多媒體編解碼器或無(wú)線(xiàn)標(biāo)準(zhǔn)的IC已經(jīng)遠(yuǎn)遠(yuǎn)不夠了。消費(fèi)者希望他們的設(shè)備能夠播放各種采用不同的編碼標(biāo)準(zhǔn)和無(wú)線(xiàn)下載標(biāo)準(zhǔn)的媒體。因此,必須采取一個(gè)新的更具靈活性的途徑來(lái)更好地適配新的媒體標(biāo)準(zhǔn)。在本文中,我們主要談一談視頻解碼器和編碼器引擎所面對(duì)的挑戰(zhàn)和機(jī)遇。
基于RTL的傳統(tǒng)視頻引擎設(shè)計(jì)方法
上一代視頻ASIC設(shè)計(jì)的目的是為了解碼和編碼MPEG-2,因?yàn)檫@是DVD所使用的標(biāo)準(zhǔn)。其中也有些支持MPEG-1,可以播放VCD。大多數(shù)情況下,這種單個(gè)應(yīng)用的邏輯實(shí)現(xiàn)策略就是:利用RTL(寄存器轉(zhuǎn)換層,寄存器轉(zhuǎn)換邏輯)來(lái)設(shè)計(jì)定制化MPEG-2解碼器和編碼器。下圖1是一個(gè)典型的MPEG-2視頻ASIC結(jié)構(gòu),展示了由視頻子系統(tǒng)、主控制器和片上存儲(chǔ)器組成的RTL功能塊。
圖1:典型的MPEG-2視頻ASIC結(jié)構(gòu)
隨著市場(chǎng)形勢(shì)的改變,現(xiàn)在的視頻ASIC必須能夠支持多種視頻標(biāo)準(zhǔn),并具有多個(gè)分辨率。由于下列原因,傳統(tǒng)的RTL方法已經(jīng)不再有效:
·隨著標(biāo)準(zhǔn)數(shù)量的增加,RTL功能塊的數(shù)量和復(fù)雜性也增加;
·無(wú)論是執(zhí)行一個(gè)新的視頻標(biāo)準(zhǔn),還是升級(jí)現(xiàn)有的已執(zhí)行的標(biāo)準(zhǔn),或者修改bug,都需要進(jìn)行硅芯片重制;
·在第一代硅執(zhí)行之后的這4-5年內(nèi),視頻編解碼器,尤其是編碼器在性能上(比特率、性能)有很大的改進(jìn)。要執(zhí)行這些改進(jìn)的成果,也必須在所有的RTL方法中進(jìn)行硅芯片重制。
在視頻引擎中使用處理器,而不是固定的RTL
那么,有沒(méi)有其它辦法呢?使用一個(gè)可編程處理器是最佳方案,因?yàn)樗梢越鉀Q上面提到的所有問(wèn)題:(1)處理器和編解碼器之間很容易建立連接端口;(不論是采用新的視頻標(biāo)準(zhǔn),還是升級(jí)現(xiàn)有的編解碼器或者修改bug,都可以很容易地在軟件中進(jìn)行);(3)通過(guò)軟件升級(jí),可以很容易地應(yīng)用視頻編解碼器執(zhí)行中的改進(jìn)。
但是,由于其性能瓶頸,傳統(tǒng)的處理器只能用于一般的編碼,而不能用于視頻引擎。嵌入式DSP也不是專(zhuān)為視頻而設(shè)計(jì)的,但擁有通用DSP應(yīng)用所需的硬件功能單元、指令和接口。因此,要在傳統(tǒng)的RISC和DSP處理器上執(zhí)行視頻編解碼,就意味著這些處理器必須以非常高的速度運(yùn)行(MHz),而且還需要大量?jī)?nèi)存并消耗大量功率,但是在便攜式設(shè)備中,這顯然是行不通的。
只要我們對(duì)某個(gè)視頻內(nèi)核中所需的計(jì)算次數(shù)作一個(gè)簡(jiǎn)單分析,就很容易得出這一點(diǎn)。絕對(duì)誤差和是大多數(shù)視頻解碼運(yùn)算的動(dòng)作估計(jì)中所進(jìn)行的一個(gè)重要計(jì)算步驟。SAD運(yùn)算的目的在于發(fā)現(xiàn)兩個(gè)連續(xù)視頻幀之間的宏模塊的運(yùn)動(dòng)。它是通過(guò)計(jì)算這兩個(gè)宏模塊中每套相應(yīng)的象素值之間的絕對(duì)誤差之和來(lái)實(shí)現(xiàn)這一目的的。
下面的C代碼展示了SAD運(yùn)算的一次簡(jiǎn)單執(zhí)行:
圖2展示了SAD運(yùn)算中的基本計(jì)算步驟。如圖所示,其中主要進(jìn)行的計(jì)算有減、算絕對(duì)值和結(jié)果累計(jì)。
圖2:絕對(duì)誤差和(SAD)內(nèi)核中進(jìn)行的主要計(jì)算
計(jì)算一個(gè)RISC上的兩個(gè)16x16宏模塊的SAD需要進(jìn)行256次減法、256次求絕對(duì)值和256次相加――總共進(jìn)行了768次計(jì)算,還不包括傳輸數(shù)據(jù)所需的負(fù)載與內(nèi)存。由于每一幀當(dāng)中所有的宏模塊都必須進(jìn)行這一運(yùn)算,很顯然這在計(jì)算上成本是很昂貴的,而且會(huì)隨著視頻幀分辨率的增加而越來(lái)越難。
實(shí)際上,在一個(gè)帶有一些如相乘和乘法累加等指令的中等范圍通用型RISC處理器上,如果要以CIF的分辨率進(jìn)行H。26?Baseline解碼,需要250MHz的速率,而如果進(jìn)行H。26?Baseline編碼,所需速率更是超過(guò)1GHz。這意味著光是處理器內(nèi)核就要消耗將近500mW的功率,更不用提內(nèi)存和視頻片上系統(tǒng)中其它部分消耗的功率了。很顯然這種處理器不能作為嵌入式多媒體處理器用于便攜式設(shè)備中。
可配置處理器解決了問(wèn)題
如何在處理器中進(jìn)行SAD運(yùn)算呢?有一個(gè)方法是編寫(xiě)一個(gè)能夠同時(shí)進(jìn)行“減-求絕對(duì)值-加”計(jì)算的指令。這可以將16x16宏模塊所需的計(jì)算次數(shù)從768減少到256。另外,由于一個(gè)執(zhí)行這種綜合化簡(jiǎn)單運(yùn)算的功能單元一般都能夠優(yōu)化成一個(gè)周期,意味著計(jì)算周期也被減少到了256。
但是如何執(zhí)行這個(gè)“減-求絕對(duì)值-加”指令呢?
在這個(gè)時(shí)候,就需要可配置處理器了。可配置處理器是嵌入式的,設(shè)計(jì)者可以配置選項(xiàng)菜單中進(jìn)行選擇,并通過(guò)添加特殊應(yīng)用指令、寄存器文件和接口來(lái)擴(kuò)展處理器功能。
下面是目前的可配置處理器具備的一些可配置和可擴(kuò)展性功能,傳統(tǒng)的固定式處理器是沒(méi)有這些功能的:
可配置性,有下面的一系列選項(xiàng)可供選擇:
·設(shè)計(jì)者想要或者不想要的指令,包括:16x16相乘或乘法累加、漏斗轉(zhuǎn)換、浮點(diǎn)指令等;
·零耗循環(huán)、5或7個(gè)步進(jìn)管線(xiàn)、本地?cái)?shù)據(jù)加載/存儲(chǔ)單元的數(shù)量等各種功能;
·是否需要內(nèi)存保護(hù)、內(nèi)存轉(zhuǎn)換或者一個(gè)全內(nèi)存管理單元(MMU);
·是否需要一個(gè)系統(tǒng)總線(xiàn)接口;
·系統(tǒng)總線(xiàn)和本地內(nèi)存接口的寬度;
·本地內(nèi)存的數(shù)量和大小;
·中斷的次數(shù)、種類(lèi)和等級(jí)
可擴(kuò)展性,可自由添加下列由設(shè)計(jì)者自定義的組件:
·寄存器和寄存器文件;
·多周期、任意復(fù)雜功能單元;
·SIMD功能單元;
·將基本型處理器轉(zhuǎn)換成多發(fā)射處理器;
·定制能夠直接從數(shù)據(jù)路徑讀取和寫(xiě)入的接口,例如在處理器內(nèi)核上的類(lèi)似于GPIO(通用IO)的端口或管腳,以及可以用來(lái)和其它邏輯或者處理器內(nèi)核進(jìn)行連接的外置FIFO。
可配置性的優(yōu)點(diǎn)在于使你可以通過(guò)選擇你的應(yīng)用所需的功能選項(xiàng)來(lái)構(gòu)建一個(gè)規(guī)模適中的處理器,而可擴(kuò)展性的優(yōu)點(diǎn)則是讓設(shè)計(jì)者可以通過(guò)創(chuàng)造能加快應(yīng)用速度的指令、寄存器文件、功能單元和接口來(lái)定制處理器,使之完全與其視頻應(yīng)用相匹配。但必須注意的是,只有當(dāng)今先進(jìn)的可配置處理器才具能提供設(shè)計(jì)者自定義可擴(kuò)展性。
利用可配置處理器來(lái)構(gòu)建視頻引擎
創(chuàng)建能進(jìn)行多次運(yùn)算的功能單元
這一步即是SAD運(yùn)算和加速SAD運(yùn)算的內(nèi)容。
對(duì)于可配置處理器來(lái)說(shuō),要添加這一綜合運(yùn)算功能簡(jiǎn)直是小菜一碟。它可以添加名為"sub。abs。acc(減-求絕對(duì)值-加)"的新指令來(lái)進(jìn)行“相減、求絕對(duì)值和相加”運(yùn)算。如圖3所示。
圖3:進(jìn)行“相減、求絕對(duì)值和相加”運(yùn)算的新指令
現(xiàn)代的可配置處理器(例如Tensilica的Xtensa處理器)所配的軟件工具會(huì)自動(dòng)修改編輯器工具,包括C/C++編輯器、匯編程序、調(diào)試器、模仿器和ISS(指令集仿真器)。此時(shí),C編輯器會(huì)識(shí)別新的C內(nèi)部指令"sub。abs。acc"并安排相應(yīng)的指令,調(diào)試器則顯示sub。abs。acc功能模塊中使用的內(nèi)部信號(hào),同時(shí),匯編程序會(huì)將之作為一個(gè)新的指令進(jìn)行處理,而ISS則對(duì)之進(jìn)行周期精確級(jí)仿真。
創(chuàng)建新的加載/存儲(chǔ)接口
要在如此之大的寄存器文件(和相應(yīng)的SIMD功能單元)中讀出和寫(xiě)入數(shù)據(jù),要求可以進(jìn)行大規(guī)模的加載和存儲(chǔ)。還是在可配置處理器中,設(shè)計(jì)者可以自定義加載和存儲(chǔ)指令來(lái)直接在自定義寄存器文件中加載和存儲(chǔ)數(shù)據(jù)。接著,編輯器會(huì)自動(dòng)生成對(duì)應(yīng)于這個(gè)加載/存儲(chǔ)接口的加載/存儲(chǔ)指令,從而將數(shù)據(jù)從內(nèi)存中加載到寄存器文件中。
圖6是處理器數(shù)據(jù)路徑的更新圖。如圖中所示,硬件生成工具自動(dòng)生成大的自定義寄存器文件和加載/存儲(chǔ)接口以及所有相關(guān)的正向控制和旁路邏輯。特別需要注意的是這些工具還會(huì)生成硬件邏輯來(lái)將數(shù)據(jù)從基本寄存器文件轉(zhuǎn)移到用戶(hù)自定義的寄存器文件中。
圖6
加載或存儲(chǔ)時(shí)更新地址
創(chuàng)建指令來(lái)進(jìn)行自定義加載或存儲(chǔ)時(shí),最好能在加載或存儲(chǔ)的同時(shí)更新地址。這種新的加載/存儲(chǔ)指令可以同時(shí)進(jìn)行:
加載A1←存儲(chǔ)器(地址1);地址1=地址1+索引更形
這種能夠同時(shí)進(jìn)行數(shù)據(jù)加載/存儲(chǔ)和地址更新的指令使得處理器可以進(jìn)行背靠背加載/存儲(chǔ),而不需要一個(gè)中介指令來(lái)進(jìn)行地址更新。
創(chuàng)建FIFO接口和通用IO端口
可配置處理器中另一個(gè)重要特征是可以定義FIFO接口和通用IO(GPIO)端口來(lái)直接從數(shù)據(jù)路徑中讀取和寫(xiě)入數(shù)據(jù)。這些FIFO接口和GPIO端口的寬度可以是任意的(在這個(gè)例子中是1024b),在數(shù)字上沒(méi)有任何限制(例如,F(xiàn)IFO和GPIO端口的寬度都可以是1024)。這些寬的數(shù)據(jù)路徑直接接口可以提供多媒體和網(wǎng)絡(luò)應(yīng)用所需的高數(shù)據(jù)吞吐量,來(lái)通過(guò)處理器內(nèi)核讀取、處理和寫(xiě)入數(shù)據(jù)。
圖7顯示的是帶有這樣的FIFO接口和GPIO端口的數(shù)據(jù)路徑。(有了這種方法)我們可以創(chuàng)建一個(gè)指令來(lái)發(fā)射兩個(gè)FIFO(只要確保這兩個(gè)不是空的),進(jìn)行一次復(fù)雜的計(jì)算(例如循環(huán)乘加),并將結(jié)果傳到另一個(gè)輸出FIFO上(只要這個(gè)FIFO還沒(méi)有滿(mǎn))。接著,再次由硬件生成工具生成適當(dāng)?shù)慕涌谛盘?hào)、控制邏輯和旁路邏輯,并生成已配置處理器所需的完整RTL,同時(shí),軟件生成工具則自動(dòng)生成一套完整的編輯器工具和模仿新指令的周期精確級(jí)ISS。
圖7:通過(guò)FIFO接口和GPIO端口進(jìn)行的高速通信
加速?gòu)?fù)雜控制代碼
多媒體應(yīng)用中控制代碼的數(shù)量和復(fù)雜性已經(jīng)增加到這樣的一個(gè)程度:它所消耗的計(jì)算時(shí)間和工作幾乎和代碼的數(shù)據(jù)密集型部分一樣多。H。26?Mainprofile解碼器中的一個(gè)關(guān)鍵部分-CABAC算法(內(nèi)容自適應(yīng)二進(jìn)制算術(shù)編碼)就是這樣的一個(gè)例子:這種算法幾乎就是一棵控制流程判定樹(shù),有各種各樣復(fù)雜的數(shù)據(jù)計(jì)算和比較。
由于CABAC計(jì)算過(guò)于復(fù)雜,很多傳統(tǒng)的處理器方案不得不放棄CABAC而選擇一個(gè)專(zhuān)用的RTL加速器。但是,CABAC可以在可配置處理器上作為一套指令擴(kuò)展而產(chǎn)生作用,不僅在性能足以媲美RTL方案的性能,同時(shí)比起RTL加速器還有另外一個(gè)優(yōu)勢(shì),那就是它的數(shù)據(jù)不需要進(jìn)出處理器。這樣一來(lái)就顯示出處理器指令擴(kuò)展的另外一個(gè)優(yōu)勢(shì)—由于特殊應(yīng)用硬件位于處理器內(nèi)部,你可以更好地分割硬件和軟件。
總結(jié)
現(xiàn)代的可配置及可擴(kuò)展處理器是創(chuàng)建視頻和音頻引擎的完美選擇,迄今為止已經(jīng)為眾多的半導(dǎo)體ASIC供應(yīng)商所廣泛采用。另外也有一些作為嵌入式SoC模塊的視頻和音頻IP產(chǎn)品。例如,Tensilica公司及其合作伙伴就能供應(yīng)一套完整的視頻和音頻IP產(chǎn)品,其中包括XtensaHiFi2音頻引擎和一系列多標(biāo)準(zhǔn)多分辨率視頻方案,以及H。26?(基本類(lèi)、主流類(lèi)和高級(jí)類(lèi))、MPEG-4(SPandASP)、MPEG-2、VC-1/WM9及各種標(biāo)準(zhǔn)的編碼器和解碼器軟件(編解碼器)。這些視頻方案覆蓋了QCIF、CIF和SD,都以實(shí)現(xiàn)HD分辨率為目標(biāo),并以低功耗和小封裝為設(shè)計(jì)起點(diǎn)。
由于消費(fèi)者的需求擴(kuò)展了消費(fèi)類(lèi)設(shè)備中ASIC的技術(shù)規(guī)格要求,越來(lái)越多的應(yīng)用將通過(guò)使用可配置處理器來(lái)執(zhí)行。借助于可配置處理器所帶來(lái)的自動(dòng)設(shè)計(jì)流程,新的功能支持將會(huì)像軟件升級(jí)一樣簡(jiǎn)單,而設(shè)計(jì)和驗(yàn)證時(shí)間也將大大降低。
評(píng)論
查看更多