亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

內(nèi)容適應(yīng)性可變長度編碼的解碼系統(tǒng)與方法

文檔序號:7654344閱讀:259來源:國知局

專利名稱::內(nèi)容適應(yīng)性可變長度編碼的解碼系統(tǒng)與方法
技術(shù)領(lǐng)域
:本發(fā)明涉及一種解碼系統(tǒng)與方法。
背景技術(shù)
:計算機(jī)繪圖乃是以計算機(jī)產(chǎn)生圖像、影像或其它圖形或圖像信息的一門藝術(shù)和科學(xué),目前的繪圖系統(tǒng)多包含數(shù)個接口,例如微軟的Direct3D接口及OpenGL等等,如此可于執(zhí)行特定操作系統(tǒng)(如微軟的WINDOWS)的計算機(jī)上控制諸如圖形加速器或圖形處理單元(graphicsprocessingunit,GPU)等的多媒體硬件,圖像、影像的產(chǎn)生常被稱為「描繪成像(rendering)」,此類操作的細(xì)節(jié)一般是由圖形加速器進(jìn)行,于三維(3D)計算機(jī)繪圖中,構(gòu)成場景中對象表面(或物體)的幾何形狀經(jīng)轉(zhuǎn)變?yōu)橄袼?圖形單元)后,儲存于畫面緩沖區(qū)(framebuffer)中,接著顯示于顯示裝置上,每一個對象或?qū)ο笕憾加信c表面外觀有關(guān)的特定視覺性質(zhì),例如材質(zhì)、反射性、形狀、紋理等等,這些可以定義成對象或?qū)ο笕旱拿枥L內(nèi)容(context)。計算機(jī)繪圖必須迎合消費者對游戲及其它多媒體產(chǎn)品的控制性及特色的重口味要求,還要能產(chǎn)生更加真實的影像以及改善處理速度及耗能,現(xiàn)已發(fā)展出許多標(biāo)準(zhǔn)可以利用較少的位數(shù)產(chǎn)生較佳影像的質(zhì)量,例如H.264標(biāo)準(zhǔn)(又稱為ISO動畫專家群組MPEG-4第十部)是一種高壓縮數(shù)字視頻編碼標(biāo)準(zhǔn),與MPEG-2兼容的編碼相比,H.264兼容的編碼僅需要差不多三分之一的位數(shù),即可儲存同樣視頻質(zhì)量的視頻,H.264標(biāo)準(zhǔn)提供兩種熵(entropy)解碼程序,分別是內(nèi)容適應(yīng)性二進(jìn)制算術(shù)編碼(context-adaptivebinaryarithmeticcoding,CABAC)以及內(nèi)容適應(yīng)性可變長度編碼(context-adaptivevariablelengthcoding,CAVLC),CAVLC是一種霍夫曼(Huffman)編碼的內(nèi)容適應(yīng)性變化,根據(jù)編碼數(shù)據(jù)的總類會改變每一個編碼符號的機(jī)率,CAVLC使用運作-層級(run-level)編碼以簡潔表達(dá)零字符串,使用這種方法發(fā)出一些高頻+/-1系數(shù)并于相鄰圖塊的非零系數(shù)連結(jié),CAVLC中,將適應(yīng)性編碼位于或低于切片(slice)層的4×4轉(zhuǎn)換的DC系數(shù)的第二Hadamard轉(zhuǎn)換),目前CAVLC解碼結(jié)構(gòu)可滿足消費者的部分需求,但是在設(shè)計上仍有其限制。
發(fā)明內(nèi)容本發(fā)明揭露一種內(nèi)容適應(yīng)性可變長度編碼(context-adaptivevariablelengthcoding,CABAC)的解碼系統(tǒng)及方法(之后簡稱為解碼系統(tǒng)),運用于圖形處理單元(graphicsprocessingunit,GPU)內(nèi)的多線程(multithread)并行計算核心,簡單地說,于一實施例中,本系統(tǒng)包含軟件可編程核心處理單元,其內(nèi)具有CAVLC單元以執(zhí)行著色器(shader),該著色器可以執(zhí)行視頻流的CAVLC解碼,并提供解碼數(shù)據(jù)輸出。方法實施例則包括下列步驟將著色器加載具有CAVLC單元的可編程核心處理單元,CAVLC執(zhí)行該著色器以CAVLC解碼視頻流,并提供解碼數(shù)據(jù)輸出。本領(lǐng)域技術(shù)人員于檢視以下圖式及詳細(xì)說明之后,當(dāng)可推演出其它系統(tǒng)、方法、特征及優(yōu)點,所有此等推演的系統(tǒng)、方法、特征及優(yōu)點均屬本發(fā)明的范圍,受到如附申請專利范圍的保護(hù)。這里所揭露實施例的各方觀點可參考下列圖式以獲得更深入的了解,圖式中的元件并未限定其尺寸比例,僅用于清楚說明本發(fā)明的原則,各圖中相似的標(biāo)號代表相對應(yīng)的部分。圖1圖形處理器系統(tǒng)實施例的方塊圖,其中可施行多種解碼系統(tǒng)(及方法)實施例。圖2例示處理環(huán)境的方塊圖,其中可施行多種解碼系統(tǒng)實施例。圖3圖2例示處理環(huán)境內(nèi)的選擇元件方塊圖。圖4圖2與圖3例示處理環(huán)境內(nèi)的計算核心方塊圖,其中可施行多種解碼系統(tǒng)實施例。圖5A圖4計算核心內(nèi)的執(zhí)行單元的選擇元件方塊圖,其中可施行多種解碼系統(tǒng)實施例。圖5B執(zhí)行單元數(shù)據(jù)路徑的方塊圖,其中可施行多種解碼系統(tǒng)實施例。圖6A圖5所示解碼系統(tǒng)實施例的方塊圖。圖6B圖6A解碼系統(tǒng)的比特流緩沖器實施例的方塊圖。圖6C圖6A解碼系統(tǒng)的內(nèi)容存儲器結(jié)構(gòu)配合相關(guān)暫存器實施例的方塊圖。圖6D用于CAVLC解碼的解碼系統(tǒng)200所使用窗體結(jié)構(gòu)實施例的方塊圖。具體實施例方式本發(fā)明揭示了多種內(nèi)容適應(yīng)性可變長度編碼(context-adaptivevariablelengthcoding,CAVLC)的解碼系統(tǒng)及方法(之后將通稱為解碼系統(tǒng)),于一實施例中,解碼系統(tǒng)是內(nèi)嵌于圖形處理單元(graphicsprocessingunit,GPU)的可編程、多線程、并行計算核心的一個或多個執(zhí)行單元中,利用軟件結(jié)合硬件的方式來達(dá)成解碼功能,亦即視頻解碼是以圖形處理單元編程(programming)的內(nèi)容(context)配合施行于圖形處理單元數(shù)據(jù)路徑內(nèi)的硬件所完成,舉個例子,解碼運算或方法是由具有擴(kuò)充指令集(extendedinstructionset)的著色器(shader,如頂點著色器)、圖形處理單元的執(zhí)行單元數(shù)據(jù)路徑、以及用于CAVLC處理環(huán)境中的自動管理比特流緩沖器的附加硬件所共同完成,不像已知的舊有系統(tǒng),僅具有單純硬件或單純軟件的CAVLC處理方法,限制了實施彈性,舉個例子,純數(shù)字信號處理器(digitalsignalprocessor,DSP)或微處理器基礎(chǔ)實施方式便沒有用于符號解碼及比特流管理的硬件。另外,自動比特流緩沖器具備一些優(yōu)點,例如,一旦比特流緩沖器的直接存儲器存取(directmemoryaccess,DMA)引擎得知比特流的位置(地址),便會自動管理比特流而不需要進(jìn)一步的指令,這樣的機(jī)制就跟傳統(tǒng)的微處理器系統(tǒng)不同,一提到比特流管理就代表了大量的間接費用,再則,通過記錄已使用的位數(shù)量,比特流緩沖器機(jī)制可以檢測和處理錯誤的比特流。本發(fā)明解碼系統(tǒng)的另一個優(yōu)點是可以減少指令延遲(latency),因為CAVLC解碼是非常連續(xù)的操作,不易利用多線程,因此在各種實施例中就會使用一種轉(zhuǎn)遞機(jī)制來減少等待延遲,例如暫存器轉(zhuǎn)遞(registerforwarding),進(jìn)一步解釋,便是深管(deep-pipeline)及多線程處理器無法以同一線程在每一周期執(zhí)行指令,有些系統(tǒng)利用一般轉(zhuǎn)遞(generalforwarding),是通過檢查前次產(chǎn)生的操作數(shù)(operand)地址以及指令操作數(shù)地址(如果相同,則使用前次產(chǎn)生操作數(shù)),此種一般轉(zhuǎn)遞需要復(fù)雜的比較及多工操作。在某些解碼系統(tǒng)實施例中,會使用不同的轉(zhuǎn)遞方式,不管是利用前次計算結(jié)果(如保留在內(nèi)部暫存器)還是來源操作數(shù)的數(shù)據(jù),均利用指令中的位(例如總共2位,每一操作數(shù)使用1位)來編碼,通過這種方式,可以減少整體的延遲,改善處理器管線的效率。這里描述的解碼系統(tǒng)可以利用已知的國際電信聯(lián)盟通訊標(biāo)準(zhǔn)部門(InternationalTelecommunicationUnionTelecommunicationStandardizationSector,ITU-T)H.264標(biāo)準(zhǔn),根據(jù)執(zhí)行從圖形處理單元畫面緩沖器存儲器或主處理器(如中央處理單元(centralprocessingunit,CPU))存儲器所接收到的一個或多個指令組(如通過預(yù)加載(preload)等已知機(jī)制或是快取失敗等),多種解碼系統(tǒng)實施例即可進(jìn)行運算。圖1是圖形處理器系統(tǒng)100實施例的方塊圖,其中介紹了解碼系統(tǒng)及方法,于某些實施方式中,圖形處理器系統(tǒng)100可為計算機(jī)系統(tǒng),其中,圖形處理器系統(tǒng)100可包含由顯示接口單元(displayinterfaceunit,DIU)104驅(qū)動的顯示裝置102以及區(qū)域存儲器106(可包含顯示緩沖器、畫面緩沖器、紋理緩沖器、命令緩沖器等等),區(qū)域存儲器106可以畫面緩沖器或儲存單元取代,區(qū)域存儲器106通過一個或多個存儲器接口單元(memoryinterfaceunit,MIU)110連接至圖形處理單元(graphicsprocessingunit,GPU)114,于一實施例中,存儲器接口單元110、圖形處理單元114、顯示接口單元104三者連接至高速外圍元件互連(peripheralcomponentinterconnectexpress,PCI-E)兼容的總線接口單元(businterfaceunit,BIU)118,于一實施例中,總線接口單元118可以使用圖形地址重繪表(graphicsaddressremappingtable,GART),當(dāng)然也可使用其它存儲體繪圖機(jī)制,圖形處理單元114包含解碼系統(tǒng)200,稍后會針對此部分作進(jìn)一步的說明,雖然于某些實施例中將圖形處理單元114內(nèi)的解碼系統(tǒng)200畫成一個元件,但是解碼系統(tǒng)200其實可以包含更多圖形處理器系統(tǒng)100的繪示或未繪示元件。總線接口單元118連接至芯片組122(如北橋芯片組)或開關(guān),芯片組122包含接口電路(interfaceelectronics),以增強(qiáng)從中央處理單元(centralprocessingunit,CPU)126(又稱主處理器)接收到的信號,并分離從系統(tǒng)存儲器124進(jìn)出的信號與從輸出入(I/O)裝置進(jìn)出的信號,雖然這里提到PCI-E總線協(xié)議,不過也可使用其它的連接及/或通訊方式來溝通主處理器與圖形處理單元114(如PCI、專用高速總線等),系統(tǒng)存儲器124還包含驅(qū)動軟件128,可利用中央處理單元126將指令組或命令傳送給圖形處理單元114內(nèi)的暫存器。在某些實施例中可再另外配置圖形處理單元,利用PCI-E總線協(xié)議或其它通訊協(xié)議經(jīng)由芯片組122連接至圖1的其它元件,于一實施例中,圖形處理單元100可以包含圖1的所有元件,當(dāng)然亦可剔除、新增或改變某些元件,例如,可另外增加連接至芯片組122的南橋芯片組。請參閱圖2,其為例示處理環(huán)境的方塊圖,其中應(yīng)用解碼系統(tǒng)200,圖形處理單元114包含圖形處理器202,圖形處理器202則包含多個執(zhí)行單元(executionunit,EU)和計算核心204(即軟件可編程核心處理單元),于一實施例中,計算核心204包含內(nèi)嵌于執(zhí)行單元數(shù)據(jù)路徑(executionunitdatapath,EUDP)的解碼系統(tǒng)200(即CAVLC單元),該數(shù)據(jù)路徑分配至一個或多個執(zhí)行單元,圖形處理器202還包含執(zhí)行單元集合控制及頂點/串流高速緩存單元206(以后稱為EU集合控制單元206)以及具有固定功能邏輯(例如,包含三角形設(shè)定單元(triangleset-upunit,TSU)、柵格-圖塊產(chǎn)生器(span-tilegenerator,STG)等)的繪圖管線208,計算核心204包含聯(lián)合的多個執(zhí)行單元,以符合不同著色器程序的著色器任務(wù)的計算要求,所述著色器程序可包含頂點著色器、幾何著色器、及/或像素著色器,使繪圖管線208能處理數(shù)據(jù),計算核心204的著色器能進(jìn)行解碼系統(tǒng)200的大部分功能,下面將詳細(xì)說明圖形處理器202的實施例,接著說明解碼系統(tǒng)200的細(xì)節(jié)。解碼系統(tǒng)可以硬件、軟件、固件或其組合等方式實施,于較佳實施例中,解碼系統(tǒng)200可包含硬件或軟件,利用下列已知技術(shù)或其組合,例如具有邏輯門而可對數(shù)據(jù)信號進(jìn)行邏輯功能的離散邏輯電路、具有適當(dāng)組合邏輯門的特殊應(yīng)用集成電路(applicationspecificintegratedcircuit,ASIC)、可編程柵極陣列(programmablegatearray,PGA)、場式可編程柵極陣列(fieldprogrammablegatearray,F(xiàn)PGA)等等元件。請參考圖3及圖4,其為圖形處理器202實施例選擇元件的方塊圖,如前所述,解碼系統(tǒng)200可以是圖形處理器202內(nèi)的著色器,另外加上擴(kuò)充指令組及其它硬件元件,以下將說明圖形處理器202及對應(yīng)程序的實施例,雖然圖3與圖4并未繪出圖形處理所用到的全部元件,但是已足以令本領(lǐng)域技術(shù)人員明了相關(guān)圖形處理器的功能及架構(gòu)。請參閱圖3,可編程處理環(huán)境的中心為計算核心204,其包含解碼系統(tǒng)200,并可處理各種指令,計算核心204可以執(zhí)行或映像多種著色器程序,如頂點、幾何、像素著色器程序等,多線程處理器的計算核心204可以在單一時鐘周期內(nèi)處理多個指令。于圖3中,圖形處理器202的相關(guān)元件包含計算核心204、紋理過濾單元302、像素打包元件304、命令流處理器306、寫回單元308、以及紋理地址產(chǎn)生器310,圖3中的EU集合控制單元206也包含頂點高速緩存及/或串流高速緩存,另外,圖3的紋理過濾單元302提供紋素(texel)數(shù)據(jù)給計算核心204(輸入A及B),于某些實施例中,紋素數(shù)據(jù)為512位數(shù)據(jù)。像素打包元件304提供像素器著色輸入(PS輸入,輸入C和D)給計算核心204,輸入同樣是512位數(shù)據(jù)格式,另外,像素打包元件304向EU集合控制單元206請求像素著色器任務(wù),而EU集合控制單元206便會提供指定執(zhí)行單元號碼(EU#)及線程號碼(THREAD#)給像素打包元件304,因為像素打包元件304及紋理過濾單元302是已知的技術(shù),這里便不再贅述,雖然圖3顯示像素及紋素封包為512位的數(shù)據(jù)封包,但是可依各實施例根據(jù)圖形處理器202所需的效能改變其大小。命令流處理器306提供三角形頂點索引給EU集合控制單元206,于圖3的實施例中,索引為256位的數(shù)據(jù),EU集合控制單元206組合從串流高速緩存接收到的頂點著色器輸入,并將這些數(shù)據(jù)送至計算核心204(輸入E);EU集合控制單元206亦組合幾何著色器輸入,并將這些數(shù)據(jù)送至計算核心204(輸入F);EU集合控制單元206另外控制執(zhí)行單元輸入(EU輸入)402及執(zhí)行單元輸出(EU輸出)404(圖4),換句話說,EU集合控制單元206控制計算核心204的各輸入流與輸出流。經(jīng)過處理之后,計算核心204提供像素著色器輸出(PS輸出,輸出J1與J2)給寫回單元308,像素著色器輸出包括色彩信息,例如紅/綠/藍(lán)/透明度(RGBA)信息,關(guān)于實施例中的數(shù)據(jù)結(jié)構(gòu),像素著色器輸出可以是兩條512位的數(shù)據(jù)流,其它實施例亦可使用其它的位寬度。除了像素著色器輸出,計算核心204亦會輸出紋理坐標(biāo)(TC,輸出K1及K2)給紋理地址產(chǎn)生器310,其中包括UVRQ信息,紋理地址產(chǎn)生器310向計算核心204的L2高速緩存408發(fā)出紋理描述符號請求(T#請求,輸入X),然后計算核心204的L2高速緩存408會輸出紋理描述符號數(shù)據(jù)(T#數(shù)據(jù),輸出W)給紋理地址產(chǎn)生器310,因為紋理地址產(chǎn)生器310及寫回單元308是已知的技術(shù),因此這里不再贅述,再則,雖然畫中顯示URVQ及RGBA是512位的數(shù)據(jù),但是此參數(shù)亦可隨不同實施例而做變化,于圖3的實施例中,總線分成兩條512位信道,同時傳輸4個像素的128位RGBA色彩值及128位UVRQ紋理坐標(biāo)。繪圖管線208包含固定功能的圖形處理功能,例如,因應(yīng)從驅(qū)動軟件發(fā)出的繪制三角形的命令,頂點信息通過計算核心204內(nèi)的頂點著色器邏輯元件以進(jìn)行頂點轉(zhuǎn)換,對象將從對象空間種換成工作空間及屏幕空間的三角形,三角形通過計算核心204到達(dá)繪圖管線208的三角形設(shè)定單元,結(jié)合像素后進(jìn)行已知的任務(wù),例如產(chǎn)生邊界盒(boundingbox)、揀選(culling)、產(chǎn)生邊緣功能(edgefunctiongeneration)及三角形層級剔除(trianglelevelrejection)等,接著三角形設(shè)定單元再將數(shù)據(jù)傳遞至繪圖管線208中具有圖塊產(chǎn)生功能的柵格及圖塊產(chǎn)生單元,因此,數(shù)據(jù)對象被分割成圖塊(例如8×8、16×16等),并且傳遞至其它的固定功能單元,進(jìn)行深度(z-值)處理,例如z-值的高階(同樣的程序在高階時使用的位數(shù)比低階少)剔除,然后將z-值傳回計算核心204的像素著色器邏輯元件,以根據(jù)所得紋理及管線數(shù)據(jù)進(jìn)行像素著色器功能,計算核心204將已處理的值輸出至位于繪圖管線208內(nèi)的目標(biāo)單元,目標(biāo)單元在各高速緩存將更新內(nèi)部值之前進(jìn)行α測試及模板測試。請注意計算核心204的L2高速緩存408以及EU集合控制單元206之間有512位的頂點高速緩存溢出(spil1)數(shù)據(jù)的傳輸(輸入G),另外,計算核心204輸出兩個512位頂點高速緩存(VC)寫入數(shù)據(jù)(輸出M1及M2)給EU集合控制單元206做進(jìn)一步的處理。請參閱圖4,其顯示計算核心204的其它元件及相關(guān)元件,計算核心204包含具有一個或多個執(zhí)行單元420a~420h(以后通稱執(zhí)行單元420)的執(zhí)行單元集合412,每一個執(zhí)行單元420可以在一個時鐘周期內(nèi)處理多個指令,因此,執(zhí)行單元集合412在尖峰時可以同時或幾乎同時處理多個線程,盡管圖4僅繪出8個執(zhí)行單元(EU0~EU7),但是并不表示限制其數(shù)量為8,于其它實施例可以增加或減少數(shù)量,其中至少一個執(zhí)行單元(例如EU0420a)具有解碼系統(tǒng)200,詳細(xì)說明如下。計算核心204亦包含存儲器存取單元(memoryaccessunit,MXU)406,存儲器存取單元406通過存儲器接口仲裁器410與L2高速緩存408連接,L2高速緩存408從EU集合控制單元206接收頂點高速緩存溢出數(shù)據(jù)(輸入G),并提供頂點高速緩存溢出數(shù)據(jù)(輸出H)給EU集合控制單元206,另外,L2高速緩存408從紋理地址產(chǎn)生器310接收紋理描述符號請求(T#請求,輸入X),并因應(yīng)接收到的該請求,提供紋理描述符號數(shù)據(jù)(T#數(shù)據(jù),輸出W)給紋理地址產(chǎn)生器310。存儲器接口仲裁器410提供了區(qū)域視頻存儲器(如畫面緩沖器或區(qū)域存儲器106)的控制接口,總線接口單元118則提供了系統(tǒng)的接口,其可為PCI-E總線,存儲器接口仲裁器410和總線接口單元118做為存儲器及L2高速緩存408之間的接口,于某些實施例中,L2高速緩存408通過存儲器存取單元406與存儲器接口仲裁器410以及總線接口單元118連接,存儲器存取單元406會把從L2高速緩存408及其它區(qū)塊得到的虛擬存儲器地址轉(zhuǎn)換成實際存儲器地址。存儲器接口仲裁器410提供L2高速緩存的存儲器存取(如讀/寫存取),可提取指令/常數(shù)/數(shù)據(jù)/紋理、直接存儲器存取(如加載/儲存)、索引暫存存取、暫存器溢出、頂點快取存儲器內(nèi)容溢出等等。計算核心204還包含執(zhí)行單元輸入(EU輸入)402和執(zhí)行單元輸出(EU輸出)404,分別用于提供執(zhí)行單元集合412的輸入以及接收執(zhí)行單元集合412的輸出,執(zhí)行單元輸入402和執(zhí)行單元輸出404可以是交換開關(guān)(crossbar)或總線,或是其它已知的輸出機(jī)制。執(zhí)行單元輸入402從EU集合控制單元206接收頂點著色器輸入(輸入E)以及幾何著色器輸入(輸入F),然后將信息提供給執(zhí)行單元集合412,讓各執(zhí)行單元420去處理;另外,執(zhí)行單元輸入402接收像素著色器輸入(輸入C及D)及紋素封包(輸入A及B),并將這些封包傳送至執(zhí)行單元集合412,讓各執(zhí)行單元420去處理;再者,執(zhí)行單元輸入402從L2高速緩存408接收信息(L2讀取),然后在必要時將這些信息提供給執(zhí)行單元集合412。圖4實施例的執(zhí)行單元輸出404會分成偶輸出404a和奇輸出404b,執(zhí)行單元輸出404和執(zhí)行單元輸入402一樣可為交換開關(guān)或總線,或是其它已知的架構(gòu),執(zhí)行單元偶輸出404a處理偶執(zhí)行單元420a、420c、420e、420g的輸出,而執(zhí)行單元奇輸出404b處理奇執(zhí)行單元420b、420d、420f、420h的輸出,總而言之,兩個執(zhí)行單元輸出404a和404b共同接收執(zhí)行單元集合412的輸出,如UVRQ及RGBA數(shù)據(jù),這些輸出可傳回L2高速緩存408,或是從計算核心204經(jīng)由J1及J2輸出至寫回單元308,或是經(jīng)由K1及K2輸出至紋理地址產(chǎn)生器310。執(zhí)行單元集合412的執(zhí)行單元流通常包含數(shù)個層級,如描繪內(nèi)容層級、線程或任務(wù)層級、指令或執(zhí)行層級,在任一時間點,每一執(zhí)行單元420可能準(zhǔn)許兩個描繪內(nèi)容,其中利用一位旗標(biāo)或其它機(jī)制識別其描繪內(nèi)容,在屬于這個內(nèi)容的任務(wù)開始之前,從EU集合控制單元206輸出內(nèi)容信息,內(nèi)容層級信息可為著色器種類、輸入/輸出暫存器數(shù)量、指令起始地址、輸出對映表、頂點識別符、各常數(shù)緩沖器內(nèi)的常數(shù),執(zhí)行單元集合412內(nèi)的每一個執(zhí)行單元420可以同時儲存多個任務(wù)或線程(例如32個線程),于一實施例中,每一線程根據(jù)程序計數(shù)器提取指令。EU集合控制單元206類似總?cè)蝿?wù)調(diào)度,利用數(shù)據(jù)驅(qū)動(data-driven)方法(如輸入信號內(nèi)的頂點、像素、幾何封包)指派執(zhí)行單元420內(nèi)的適當(dāng)線程,舉例來說,EU集合控制單元206指派一個線程給執(zhí)行單元集合412的執(zhí)行單元420內(nèi)的一個空線程位置,當(dāng)線程已開始執(zhí)行,頂點高速緩存或其它元件或模塊(根據(jù)著色器種類)所輸入的數(shù)據(jù)會放置在共享暫存緩沖器中。通常圖形處理器202使用可編程頂點、幾何、及像素緩沖器,不再把這些元件當(dāng)成具有不同設(shè)計及指令組的各別固定功能單元而各別執(zhí)行或操作這些元件,而是取代成以聯(lián)合的執(zhí)行單元420a、420b...420n配合統(tǒng)一指令組執(zhí)行,除了執(zhí)行單元420a(這個執(zhí)行單元包含解碼系統(tǒng)200,因此具有額外的功能)之外,每一個用于程序運算的執(zhí)行單元420的設(shè)計與結(jié)構(gòu)均相同,于一實施例中,每一個執(zhí)行單元420可以進(jìn)行多線程運算,當(dāng)頂點著色器、幾何著色器、像素著色器等產(chǎn)生不同的著色器任務(wù),這些著色器任務(wù)將送至個別的執(zhí)行單元420去執(zhí)行,于一實施例中,解碼系統(tǒng)200可使用頂點著色器,與其它執(zhí)行單元420有些不同,例如,執(zhí)行單元420a使用解碼系統(tǒng)200,這是其它執(zhí)行單元(如圖4的420b)所沒有的,因為解碼系統(tǒng)200管理一個或多個對應(yīng)的內(nèi)部緩沖器,解碼系統(tǒng)200通過接線413及執(zhí)行單元輸入402自存儲器存取單元406取得數(shù)據(jù)。當(dāng)生成了個別的任務(wù),EU集合控制單元206會指派這些任務(wù)給不同執(zhí)行單元420的可用線程,當(dāng)完成任務(wù),EU集合控制單元206再管理相關(guān)線程的釋放,就這一點而言,EU集合控制單元206負(fù)責(zé)指派頂點著色器、幾何著色器及像素著色器的任務(wù)給執(zhí)行單元420的線程,然后記錄相關(guān)的任務(wù)及線程,具體來說,EU集合控制單元206會有所有執(zhí)行單元420的線程及存儲器的資源表(這里不多做說明),EU集合控制單元206會知道哪一個線程指派給哪一個任務(wù)使用、知道哪一個線程的任務(wù)結(jié)束要釋放、知道占用多少的共享暫存器文件存儲器暫存器(registerfilememoryregister)、知道每一個執(zhí)行單元有多少可用空間。因此,如果已將一個任務(wù)指派給一個執(zhí)行單元,如420a,EU集合控制單元206會將這個線程標(biāo)示為忙碌中,然后將全部的共享暫存器文件存儲器減去每一個線程用掉的暫存器文件機(jī)體(footpring)數(shù)量,機(jī)體是根據(jù)頂點著色器、幾何著色器及像素著色器的狀態(tài)而定,另外,每一個著色器階段可以有不同的機(jī)體大小,例如,頂點著色器線程可以要求10個共享暫存器文件暫存器,而像素著色器線程可以僅要求5個暫存器。當(dāng)線程完成其被指派的工作,運行該線程的執(zhí)行單元420便會發(fā)出信號給EU集合控制單元206,EU集合控制單元206便會更新資源表,標(biāo)注該線程未使用,并將線程共享暫存器文件空間的數(shù)量加回可用空間,當(dāng)所有的線程都處于忙碌中或所有的共享暫存器文件存儲器都已分配完(或是保留的暫存器空間太小,無法容納額外的線程),則該執(zhí)行單元420算是已滿,EU集合控制單元206不會再指派新的線程給該執(zhí)行單元。每一個執(zhí)行單元420內(nèi)部亦有一個線程控制器,可以管理或標(biāo)注每一個線程是在使用中(或執(zhí)行中)或是可用的,就這一點而言,于一實施例中,當(dāng)頂點著色器正執(zhí)行解碼系統(tǒng)200的功能時,EU集合控制單元206可以防止幾何著色器與像素著色器在此同時運行。圖5A說明具有前述圖形處理器202及計算核心204特征的執(zhí)行單元420a,其包含內(nèi)嵌有解碼系統(tǒng)200的執(zhí)行單元數(shù)據(jù)路徑512,具體來說,圖5A是執(zhí)行單元420a的方塊圖,于一實施例中,其包含指令高速緩存控制器504、與指令高速緩存控制器504連接的線程控制器506、緩沖器508(如常數(shù)緩沖器)、共享暫存器文件(commonregisterfile,CRF)510、與線程控制器506及緩沖器508及共享暫存器文件510連接的執(zhí)行單元數(shù)據(jù)路徑(EUdatapath,EUDP)512、執(zhí)行單元數(shù)據(jù)路徑先進(jìn)先出緩沖器(firstinfirstout,F(xiàn)IFO)514、述部暫存器文件(predicateregisterfile,PRF)516、純量暫存器文件(scalarregisterfile,SRF)518、數(shù)據(jù)輸出控制器520以及線程任務(wù)接口524,如前所述,執(zhí)行單元420從執(zhí)行單元輸入402接收輸入,然后提供輸出給執(zhí)行單元輸出404。線程控制器506提供整個執(zhí)行單元420a的控制功能,包括管理每一個線程及判斷功能,例如決定如何執(zhí)行其線程,EUDP512包含解碼系統(tǒng)200,可進(jìn)行各種的計算,包含像是浮點運算計算邏輯單元(arithmeticlogicunit,ALU)、移位邏輯功能等邏輯電路。數(shù)據(jù)輸出控制器520可將完成的數(shù)據(jù)移至某些與執(zhí)行單元輸出404連接的元件,例如EU集合控制單元206的頂點高速緩存、寫回單元308等等,EUSP512傳送「任務(wù)結(jié)束」的信息給數(shù)據(jù)輸出控制器520,告知任務(wù)已完成,數(shù)據(jù)輸出控制器520包含儲存部分,以儲存完成的任務(wù)(如32個項目(entry)),還包含多個寫入端口,數(shù)據(jù)輸出控制器520從儲存部分選擇任務(wù),接著根據(jù)著色器描繪內(nèi)容所指定的暫存器位置,從共享暫存器文件510讀出所有的輸出數(shù)據(jù)項,然后將數(shù)據(jù)送至執(zhí)行單元輸出404。線程任務(wù)接口524輸出執(zhí)行單元420a完成的任務(wù)識別符給EU集合控制單元206,任務(wù)識別符會通知EU集合控制單元206有特定執(zhí)行單元內(nèi)有線程資源,可指派新的任務(wù)給該執(zhí)行單元(如420a)。于一實施例中,常數(shù)緩沖器508可以分成16個區(qū)塊,每一個區(qū)塊有16個128位水平向量常數(shù)的位置,著色器使用操作數(shù)與索引存取常數(shù)緩沖器位置,其中,索引可以是包含32位或接近32位不具正負(fù)號的整數(shù)常數(shù)的暫存器。指令高速緩存控制器504是線程控制器506的接口方塊,如果有線程控制器讀取請求(如從指令存儲器提取可執(zhí)行著色器碼),指令高速緩存控制器504會查找標(biāo)簽表(未繪出),進(jìn)行擊中/不中(hit/miss)測試,舉個例子,如果請求的指令位于指令高速緩存控制器504的高速緩存中則表示擊中,如果所欲請求的指令將從L2高速緩存408或存儲器106提取則表示不中,如果擊中,而同時沒有從執(zhí)行單元輸入402發(fā)出的請求,則指令高速緩存控制器504即可同意請求,這是因為指令高速緩存控制器504的指令高速緩存只有一個讀寫端口,而執(zhí)行單元輸入402具有最高的優(yōu)先權(quán);相反地,如果不中,而L2高速緩存408內(nèi)有可取代的區(qū)塊并有空間存在EUDPFIFO514,則指令高速緩存控制器504可同意請求。于一實施例中,指令高速緩存控制器504的高速緩存包含32組,每一組有4個區(qū)塊,每一個區(qū)塊帶有2位狀態(tài)信號,可代表三種狀態(tài),分別是無效、加載、或有效狀態(tài),在區(qū)塊加載L2數(shù)據(jù)之前,區(qū)塊是「無效」?fàn)顟B(tài),當(dāng)?shù)群騆2數(shù)據(jù)時,是「加載」?fàn)顟B(tài),當(dāng)完全加載L2數(shù)據(jù)時,則成為「有效」?fàn)顟B(tài)。通過EUDP路徑512可對述部暫存器文件516進(jìn)行讀寫,執(zhí)行單元輸入402做為進(jìn)入數(shù)據(jù)與執(zhí)行單元420a的接口,于一實施例中,執(zhí)行單元輸入402包含8項目先進(jìn)先出緩沖器以緩沖進(jìn)入數(shù)據(jù),執(zhí)行單元輸入402亦可將數(shù)據(jù)送至指令高速緩存控制器504的指令高速緩存及常數(shù)緩沖器508,執(zhí)行單元輸入402也可保留著色器內(nèi)容。執(zhí)行單元輸出404做為將輸出數(shù)據(jù)從執(zhí)行單元420a送至EU集合控制單元206、L2高速緩存408、及寫回單元308的接口,于一實施例中,執(zhí)行單元輸出404包含4項目先進(jìn)先出緩沖器,用以接收仲裁請求,并緩沖輸出至EU集合控制單元206的數(shù)據(jù),執(zhí)行單元輸出404包含多種功能,可以仲裁指令高速緩存讀取請求、數(shù)據(jù)輸出寫入請求、EUDP讀/寫請求。共享暫存器文件510用于儲存輸入、輸出、以及暫存數(shù)據(jù),于一實施例中,共享暫存器文件510包含8存儲頁(bank)的128×128位暫存器文件及一讀一寫和一讀寫端口,一讀一寫端口是供EUDP512使用,用于指令執(zhí)行啟動的讀寫存取,偶線程共享存儲頁0、2、4、6,奇線程則共享存儲頁1、3、5、7,線程控制器506配對不同線程的指令,并確認(rèn)共享暫存器文件的存儲器沒有讀或?qū)懘鎯摏_突。讀寫端口則供執(zhí)行單元輸入402及數(shù)據(jù)輸出控制器520使用,以加載初始線程輸入數(shù)據(jù)以及將最終線程輸出寫至EU集合控制單元數(shù)據(jù)緩沖器及L2高速緩存408或其它模塊,執(zhí)行單元輸入402及執(zhí)行單元輸出404共享讀寫I/O端口,于一實施例中,寫入比讀出具有更高的優(yōu)先權(quán),512位輸入數(shù)據(jù)進(jìn)入4個不同的存儲頁,以避免將數(shù)據(jù)加載共享暫存器文件510時發(fā)生沖突,2位信道索引、數(shù)據(jù)與512位對齊基準(zhǔn)地址(alignedbaseaddress)一起通過以指定輸入數(shù)據(jù)的開始存儲頁,舉個例子,如果開始信道索引為1,則存儲頁1加載從最低有效位(leastsignificantbit,LSB)起算的第一個128位,下一個128位則加載存儲頁2,以此類推,假設(shè)線程基準(zhǔn)存儲頁補(bǔ)償為0,最后一個128位則加載存儲頁0,請注意線程ID的兩個最低有效位用于產(chǎn)生存儲頁補(bǔ)償,以隨機(jī)排列每一個線程的開始存儲頁位置。CRF暫存器索引及線程ID可用于建立獨一無二的邏輯地址,以卷標(biāo)配對(tagmatching)共享暫存器文件510的讀寫數(shù)據(jù),舉個例子,地址可以排成128位,就跟共享暫存器文件存儲頁的寬度一樣,通過結(jié)合8位的CRF暫存器索引以及5位的線程ID,可以建立獨一無二的13位地址,每一個1024位行有一個卷標(biāo),每一行則有兩個512位項目(字符),每一字符儲存于4個存儲頁中,并將CRF索引的兩個最低有效位加入目前線程的存儲頁補(bǔ)償,以建立存儲頁選擇。標(biāo)簽配對方法可讓不同線程的暫存器共享共享暫存器文件510,有效利用存儲器,EU集合控制單元206記錄共享暫存器文件510的存儲器使用程度,確保調(diào)度執(zhí)行單元420a的新任務(wù)時有足夠的空間。檢查目前線程的目標(biāo)CRF索引占全部CRF暫存器的大小,在線程控制器506著手進(jìn)行線程及著色器執(zhí)行之前,輸入數(shù)據(jù)就應(yīng)該存放于共享暫存器文件510中,當(dāng)線程執(zhí)行結(jié)束,數(shù)據(jù)輸出控制器520從共享暫存器文件510讀取輸出數(shù)據(jù)。前述執(zhí)行單元420的實施例具有內(nèi)含解碼系統(tǒng)200的EUDP512,圖5B說明EUDP512的實施例,EUDP512包含暫存器文件526、多工器528、向量浮點(FP)單元532、向量整數(shù)算術(shù)邏輯單元(ALU)534、特殊目的單元536、多工器538、暫存器文件540、以及解碼系統(tǒng)200,解碼系統(tǒng)200包含一個或多個CAVLC單元530,可以解碼一個或多個串流,舉個例子,單一CAVLC單元530可以解碼單一串流,兩個CAVLC單元530(如虛線所示,但為簡潔之故未繪出其連接關(guān)系)可以同時解碼兩個串流等等,為了清楚說明,之后的敘述僅針對使用單一CAVLC單元530的解碼系統(tǒng)200的操作,其原則可推衍至超過一個CAVLC單元。如圖所示,EUDP512包含對應(yīng)于CAVLC解碼單元530、向量浮點單元532、向量ALU534、特殊目的單元536的一些平行數(shù)據(jù)路徑,每一個單元均可根據(jù)接收到的指令執(zhí)行對應(yīng)的運算,暫存器文件526接收操作數(shù)(標(biāo)示為SRC1及SRC2),于一實施例中,暫存器文件526可為圖5A所示的共享暫存器文件510、述部暫存器文件516、及/或純量暫存器文件518,請注意于某些實施例中,亦可使用更多的操作數(shù)運算(功能)信號線542提供各單元530~536接收運算信號的手段,目前信號線544連接至多工器528,可傳送編碼成指令的當(dāng)前值,供每一個單元530~536進(jìn)行小整數(shù)值的整數(shù)運算,指令解碼器(未繪出)提供操作數(shù)、運算(功能)信號、以及目前信號,數(shù)據(jù)路徑(可以包含寫回階段)末端的多工器538選擇正確路徑的輸出結(jié)果,送至?xí)捍嫫魑募?40,輸出暫存器文件540包含目標(biāo)元件,可以是暫存器文件526或其它暫存器,請注意,于一實施例中,當(dāng)來源及目標(biāo)暫存器包含相同元件,指令的位具有來源及目標(biāo)元件選擇,供多工器處理來自/送至適當(dāng)暫存器文件的數(shù)據(jù)。因此,執(zhí)行單元420a可以視為多階管線(如4階管線,具有4個算術(shù)邏輯單元),CAVLC解碼運算于4個執(zhí)行時相中發(fā)生,需要延遲好讓CAVLC解碼線程操作,舉個例子,當(dāng)比特流緩沖器發(fā)生向下溢位(underflow)、等候初始化內(nèi)容存儲器、等候?qū)⒈忍亓骷虞dFIFO緩沖器及sREG暫存器(稍后解釋)、及/或處理時間已超過預(yù)定門坎時間等,可以在執(zhí)行階段加入延遲。與某些實施例中,解碼系統(tǒng)200利用單一執(zhí)行單元420a同時解碼兩個比特流,舉個例子,根據(jù)一個擴(kuò)充指令組,解碼系統(tǒng)可以使用兩個數(shù)據(jù)路徑(如新增另一CAVLC單元530)同時進(jìn)行兩個串流的解碼,當(dāng)然也可解碼較多或較少的串流(那么就會使用較多或較少的數(shù)據(jù)路徑),當(dāng)牽涉到多個串流,某些解碼系統(tǒng)200并不限制同時解碼,另外,在某些實施例中,單一CAVLC單元530可以執(zhí)行多重同時串流解碼。于一實施例中,當(dāng)解碼系統(tǒng)200使用兩個數(shù)據(jù)路徑、兩個線程便可以同時運行,舉個例子,在兩串流解碼實施例中,限制線程的數(shù)量為兩個,第一線程(如線程0)指派給解碼系統(tǒng)200的第一存儲頁(即CAVLC單元530),第二線程(如線程1)則指派給解碼系統(tǒng)200的第二存儲頁(即圖5B的虛線CAVLC單元),于某些實施例中,兩個或多個線程可以運行于單一存儲頁,另外,雖然此處顯示解碼系統(tǒng)200是內(nèi)嵌于EUDP512,亦可包含其它的元件,像是EU集合控制單元206內(nèi)的邏輯電路?,F(xiàn)已說明執(zhí)行單元420a、EUDP512、以及CAVLC單元530的某些實施例,下面簡單解釋用于H.264CAVLC運算內(nèi)容的解碼系統(tǒng),已知CAVLC程序編碼與巨圖塊(macroblock)或部分巨圖塊有關(guān)的信號的層級(level,大小),知道這個層級有多常(如多少周期)重復(fù)(run,運作),就不需要對每一位進(jìn)行編碼,從比特流緩沖器獲得并解析(parse)此類信息,當(dāng)解碼系統(tǒng)200的解碼引擎使用了緩沖器內(nèi)的信息,則數(shù)據(jù)會再補(bǔ)充進(jìn)去,解碼系統(tǒng)200從比特流抽出內(nèi)含層級(level)及運作(run)系數(shù)的巨圖塊信息,反轉(zhuǎn)編碼程序,然后重建信號。解碼系統(tǒng)200從比特流緩沖器獲得巨圖塊信息并解析串流,以獲得層級及運作系數(shù)值,暫時儲存于層級陣列及運作陣列,接著讀出這些層級陣列及運作陣列(如巨圖塊內(nèi)的區(qū)塊的4×4區(qū)塊像素),然后清空層級陣列及運作陣列準(zhǔn)備進(jìn)行下一個區(qū)塊,根據(jù)H.264標(biāo)準(zhǔn),使用軟件處理每一個4×4區(qū)塊可以建立完整的巨圖塊。已說明解碼巨圖塊信息的一般運算,下列敘述提出于CAVLC解碼程序的內(nèi)容中的解碼系統(tǒng)200的各種元件,可將符合實際應(yīng)用的各種變形列入考慮,本領(lǐng)域技術(shù)人員可知下列所使用的許多術(shù)語(如各參數(shù)的名稱)是出自H.264規(guī)格,為了簡潔之故不再贅述,除非是有助于了解所述的不同程序及/或元件,才會再做進(jìn)一步的說明。圖6A至圖6C是說明解碼系統(tǒng)200的方塊圖,其中繪出的解碼系統(tǒng)200具有單一CAVLC單元530(于圖6A至圖6C,所使用的CAVLC單元530可與解碼系統(tǒng)200互換),因此于實施例中,解碼系統(tǒng)200可解碼單一比特流,同樣的原則可應(yīng)用至具有多個CAVLC單元的解碼系統(tǒng)200,可同時解碼多個(如兩個)串流。簡單地說,圖6A是CAVLC單元530的選擇元件,圖6B則說明CAVLC單元提供的串流緩沖器功能,圖6C說明CAVLC單元530的內(nèi)容存儲器(包含暫存器)功能,圖6D說明CAVLC解碼的窗體結(jié)構(gòu)。雖然下列敘述是有關(guān)巨圖塊解碼的內(nèi)容,但是此原則可應(yīng)用至各種圖塊解碼。請參閱圖6A,CAVLC單元530包含數(shù)個硬件模塊,有系數(shù)符記(coeff_token)模塊610、層級碼(CAVLC_LevelCode)模塊612、層級(CAVLC_Level)模塊614、層級0(CAVLC_L0)模塊616、零層級(CAVLC_ZL)模塊618、運作(CAVLC_Run)模塊620、層級陣列(LevelArray)622、以及運作陣列(RunArray)624,解碼系統(tǒng)還包含移位暫存器(SREG)-串流緩沖器/直接存儲器存取(DMA)引擎602(亦見于圖6B,之后稱為DMA引擎模塊)、總暫存器606、區(qū)域暫存器608、以及圖6C中的巨圖塊相鄰內(nèi)容(mbNeighCtx)存儲器604(于一實施例中,mbNeighCtx存儲器包含96位暫存器,可以是著色器寫入的3個32位暫存器),另外有些暫存器未繪出。CAVLC單元530與執(zhí)行單元420a的接口包括一個或多個目標(biāo)總線及對應(yīng)的暫存器(如DST暫存器)、兩個來源總線及對應(yīng)的暫存器(SRC1、SRC2),目標(biāo)總線上的數(shù)據(jù)可以直接或間接(如經(jīng)由中間高速緩存、暫存器、緩沖器、或存儲器)傳送至圖形處理單元114內(nèi)部或外部的視頻處理單元,目標(biāo)總線上的數(shù)據(jù)可以是微軟的DXAPI格式或其它格式,這些數(shù)據(jù)包含系數(shù)、巨圖塊參數(shù)、操作信息、及/或IPCM取樣或是其它數(shù)據(jù),CAVLC單元530還包括由地址總線和數(shù)據(jù)總線組成的存儲器接口,從地址總線得到地址后,便可以通過從數(shù)據(jù)總線得到的數(shù)據(jù)進(jìn)行比特流數(shù)據(jù)的存取,于一實施例中,數(shù)據(jù)總線上的數(shù)據(jù)可以包括未加密視頻流,其中包括各種信號參數(shù)及其它數(shù)據(jù)與格式,于某些實施例中,可以使用加載-儲存操作來存取比特流數(shù)據(jù)。在開始說明CAVLC單元530的各元件之前,簡單說明一下有關(guān)CAVLC解碼的執(zhí)行單元420a的整個操作,通常,根據(jù)切片(slice)形式,驅(qū)動軟件128(圖1)準(zhǔn)備CAVLC著色器并將其加載執(zhí)行單元420a,該CAVLC著色器使用標(biāo)準(zhǔn)指令組加上coeff_token、CAVLC_LevelCode、CAVLC_Level、CAVLC_L0、CAVLC_ZL、及CAVLC_Run指令,可以進(jìn)行比特流的解碼,這里命名的原則是各模塊會發(fā)出相同名稱的指令,另外,在層級陣列622及運作陣列624還有跟讀取操作及清除操作有關(guān)的READ_LEVEL_RUN及CLR_LEVEL_RUN指令,于一實施例中,在發(fā)出其它指令之前,CAVLC著色器執(zhí)行的第一指令是INIT_CAVLC及INIT_ADE指令,這兩個指令使CAVLC單元530開始CAVLC解碼比特流,并將比特流從串流解碼點開始加載FIFO緩沖器,稍后將說明這兩個指令,因此CAVLC單元530提供了解析比特流、初始化解碼硬件及暫存器/存儲器結(jié)構(gòu)、以及層級-運作(level-run)解碼,所述H.264CAVAC解碼程序功能將于稍后解釋,先從比特流緩沖器的操作開始。關(guān)于解析比特流,從存儲器接口的數(shù)據(jù)總線接收比特流,然后由SREG串流緩沖器/DMA引擎618進(jìn)行緩沖,切片數(shù)據(jù)解析階段提供比特流解碼,比特流(如NAL比特流)包括一張或多張圖片,將其切割成圖檔頭(header)及許多切片(slice),一張切片通常包含一系列的巨圖塊,于一實施例中,外部程序(即CAVLC單元530外部)解析NAL比特流、解碼切片文件頭、傳送指向該切片數(shù)據(jù)(如切片開始處)的指針,通常,驅(qū)動軟件128從切片數(shù)據(jù)處理比特流,因為這是應(yīng)用程序及API提供的功能,指向切片數(shù)據(jù)位置的指針傳遞還牽涉到切片數(shù)據(jù)的第一字節(jié)地址(如RBSPbyeAddress)和指出比特流開始或標(biāo)頭位置(如sREGptr)的位補(bǔ)償指針(如一個位或多個位),比特流的初始化將于稍后解釋,于某些實施例中,可以利用主處理器(如圖1的中央處理單元126)處理外部程序,以提供圖片解碼及切片標(biāo)頭解碼,與某些實施例中,因為解碼系統(tǒng)200從圖片進(jìn)行H.264比特流解析,而CAVLC解碼操作是根據(jù)切片數(shù)據(jù)從巨圖塊著手進(jìn)行,于某些實施例中,因為CAVLC單元的可編程特性,可以于任何階段進(jìn)行解碼。請參閱圖6B,其為CAVLC單元530的SREG串流緩沖器/DMA引擎602的選擇元件部分及其它元件的方塊圖,其包含操作數(shù)暫存器661及663,分別接收SRC1與SRC2值,再傳遞至?xí)捍嫫?56及667,CAVLC邏輯電路660就是圖6A的模塊及元件,不過沒有包括SREG串流緩沖器/DMA引擎602、mbNeighCtx存儲器604、總暫存器606、以及區(qū)域暫存器608,SREG串流緩沖器/DMA引擎618包含內(nèi)部比特流緩沖器602b,于一實施例中可為BigEndian格式的32位暫存器及8個128位暫存器。驅(qū)動軟件128發(fā)出的初始化指令于開始時設(shè)定SREG串流緩沖器/DMA引擎602,一旦啟動,便自動管理SREG串流緩沖器/DMA引擎602的內(nèi)部緩沖器602b,SREG串流緩沖器/DMA引擎602保留待解析位的位置。于一實施例中,SREG串流緩沖器/DMA引擎602使用兩個暫存器,一個快速32位正反器與一個較慢512或1024位存儲器,比特流會使用位,移位暫存器602a以位進(jìn)行操作,而比特流緩沖器602b以字節(jié)進(jìn)行操作,可以節(jié)省能源。通常移位暫存器602a運算的指令會使用少許位(如1~3位),當(dāng)移位暫存器618a使用超過一字節(jié)的數(shù)據(jù),數(shù)據(jù)(字節(jié)片段)將從比特流緩沖器602b傳送給移位暫存器602a,然后緩沖器指標(biāo)會減去傳送的字節(jié)數(shù)量,當(dāng)SREG串流緩沖器/DMA引擎602的DMA引擎檢測到使用256位或更多位時,便從存儲器提取256位填滿比特流緩沖器602b,如此CAVLC單元530實行了一個簡單的循環(huán)緩沖器(256位片段×4),以追蹤比特流緩沖器602b并進(jìn)行填充,于某些實施例中可以使用單一緩沖器,不過一個循環(huán)緩沖器需要更復(fù)雜的指針計算來跟上存儲器的速度。利用初始化指令達(dá)成與內(nèi)部緩沖器602b互動,稱為INIT_BSTR指令,于一實施例中,INIT_BSTR指令(可由驅(qū)動軟件128發(fā)出)與INIT_CAVLC(或-ADE)指令幾乎同時發(fā)出,形成延遲(stall),直到比特流數(shù)據(jù)進(jìn)入緩沖器602b,一旦數(shù)據(jù)到達(dá)緩沖器602b,解除延遲狀況開始后面的程序,之后,如果緩沖器的儲存狀況低于預(yù)定門坎,SREG比特流緩沖器/DMA引擎602的DMA引擎會繼續(xù)提取比特流數(shù)據(jù)存入緩沖器602b。如果已知比特流位置的字節(jié)地址及位補(bǔ)償,INIT_BSTR指令將數(shù)據(jù)加載內(nèi)部比特流緩沖器602b,并開始管理程序,每一次呼叫處理切片數(shù)據(jù)均會發(fā)出下列格式的指令I(lǐng)NIT_BSTRoffset,RBSPbyteAddress這個指令用于將數(shù)據(jù)加載SREG串流緩沖器/DMA引擎602的內(nèi)部緩沖器602b,于一實施例中,SRC2暫存器663提供字節(jié)地址(RBSPbyteAddress),而SRC1暫存器661提供位補(bǔ)償,如此,可以使用下列通用的指令格式INIT_BSTRSRC2,SRC1,其中,這個指令中的SRC1以及SRC2及其它信號是對應(yīng)內(nèi)部暫存器661及663的值,但是不限于這些暫存器,于一實施例中,使用256字節(jié)排列的存儲器提取來存取比特流數(shù)據(jù),并將其寫入緩沖暫存器并傳送至SREG串流緩沖器/DMA引擎602的32位移位暫存器602a,于一實施例中,在這些暫存器或緩沖器進(jìn)行運算之前,比特流緩沖器602b內(nèi)的數(shù)據(jù)是以字節(jié)方式排列,此數(shù)據(jù)排列可通過排列指令實施,亦稱之為ABST指令,ABST指令會排列比特流緩沖器602b內(nèi)的數(shù)據(jù),在解碼過程中,排列位(如填充位)最后將被丟棄。當(dāng)移位暫存器602a使用數(shù)據(jù),內(nèi)部緩沖器602b便會填充數(shù)據(jù),換句話說,SREG串流緩沖器/DMA引擎602的內(nèi)部緩沖器602b類似以3為模(modulo)的循環(huán)緩沖器,將數(shù)據(jù)輸入SREG串流緩沖器/DMA引擎602的32位暫存器602a,CAVLC單元530(如CAVLC邏輯模塊660)可以使用READ指令從移位暫存器602a讀取數(shù)據(jù),READ指令的格式如下READDST,SRC1,其中DST對應(yīng)于一輸出或目標(biāo)暫存器,于一實施例中,SRC1暫存器661包含不具正負(fù)號的整數(shù)值n,經(jīng)過READ指令,從移位暫存器602a獲得n位,當(dāng)從32位移位暫存器602a消耗了256位的數(shù)據(jù)(如解碼一個或多個語法成分),自動開始提取操作以獲得另一個256位的數(shù)據(jù),將其寫入內(nèi)部緩沖器602b的暫存器,接著進(jìn)入移位暫存器602供下一循環(huán)使用。于某些實施例中,如果對應(yīng)于符號解碼的移位暫存器602a的數(shù)據(jù)已被使用了預(yù)定數(shù)量的位或字節(jié),而內(nèi)部緩沖器602b沒有再接收到任何數(shù)據(jù),則CAVLC邏輯電路660可以進(jìn)行延遲,以便執(zhí)行其它的線程(例如與CAVLC解碼程序無關(guān)的線程),像是頂點著色器操作。使用SREG串流緩沖器/DMA引擎602的DMA引擎可以減少所需的緩沖器數(shù)量,以補(bǔ)償存儲器延遲(例如,于某些圖形處理單元中,會到三百多周期),當(dāng)使用了比特流,可以請求流入排在后面的比特流數(shù)據(jù),如果比特流數(shù)據(jù)太少使得比特流緩沖器602b有向下溢位的風(fēng)險(例如已知讓信號從CAVLC單元530流至處理器管線的周期數(shù)),可傳遞延遲信號給處理器管線,暫停操作,等候數(shù)據(jù)到達(dá)比特流緩沖器602b。另外,SREG串流緩沖器/DMA引擎602原本便有處理錯誤比特流的能力,舉個例子,因為比特流錯誤,有可能沒有檢測到切片結(jié)尾記號,這種檢測錯誤可能會導(dǎo)致解碼完全錯誤,并用到后來的圖樣或切片的位,SREG串流緩沖器/DMA引擎602記錄使用的位數(shù),如果使用的位數(shù)大于預(yù)設(shè)的門坎值(可針對每一切片改變),則結(jié)束處理程序并將除去的信號送到處理器(如主處理器),然后處理器執(zhí)行編碼嘗試從錯誤中回復(fù)。兩個有關(guān)比特流存取的指令為INPSTR及INPTRB指令,INPSTR及INPTRB指令用于檢測是否在切片或巨圖塊中有出現(xiàn)特別的樣式(pattern,如數(shù)據(jù)開始或結(jié)束樣式),不需進(jìn)行比特流就能開始讀取比特流,于一實施例中,指令順序為INPSTR、INPTRB、然后是READ指令,INPSTR指令包含下列格式INPSTRDST,于一實施例中,檢視比特流并將移位暫存器602a的最高有效16位送至目標(biāo)(DST)暫存器的較低16位,目標(biāo)暫存器的較高16位包含sREGbitptr值,數(shù)據(jù)不會從移位暫存器602a移出做為運算結(jié)果,可以根據(jù)下式例示偽碼施行指令MODULEINPSTR(DST)OUTPUT[31:0]DSTDST={ZE(sREGbitptr),sREG[msb:msb-15]};ENDMODULE與比特流有關(guān)的另一個指令是INPTRB指令,檢視原始字節(jié)順序酬載(rawbytesequencepayload,RBSP)尾端位(如字節(jié)排列數(shù)據(jù)流),INPTRB指令用于讀取比特流緩沖器602b,可為下列格式INPTRBDST.于INPRB運算中,沒有從移位暫存器602b移出位,如果移位暫存器602b的最高有效位包含100(非限定),則包含了RBSP停止位,剩下的字節(jié)就都是零位,可以根據(jù)下式例示偽碼施行指令MODULEINPTRB(DST)OUTPUTDST;REG[7:0]P;P=sREG[msb:msb-7];Sp=sREGbitptr;T[7:0]=(P>>sp)<<sp;DST[1]=(T==0x80)?1:0;DST=!(CVLC_BufferBytesRemaining>0);ENDMODULEREAD指令用于排列比特流緩沖器602內(nèi)的數(shù)據(jù)?,F(xiàn)已說明CAVLC單元530的比特流緩沖器操作,再來是CAVLC運算的初始化,尤其是初始化存儲器、暫存器結(jié)構(gòu)以及解碼引擎(如CAVLC邏輯電路660),在切片起始處,于解碼對應(yīng)于第一巨圖塊的語法成分之前,初始化暫存器結(jié)構(gòu)、總暫存器606、區(qū)域暫存器608、以及CAVLC解碼引擎,于一實施例中,驅(qū)動軟件128發(fā)出INIT_CAVLC指令進(jìn)行這個初始化操作,INIT_CAVLC指令可以具有下列指令格式INIT_CAVLCSRC2,SRC1其中,SRC2包含切片數(shù)據(jù)待解碼的位數(shù)目,將這個值寫入內(nèi)部CVLC_bufferBytesRemining暫存器SRC1[15:0]=mbAddrCurr,SRC1[23:16]=mbPerLine,SRC1[24]=constrained_intra_predflag,SRC1[27:25]=NAL_unit_type(NUT),SRC1[29:28]=chroma_format_idc(于一實施例中,chroma_format_idc值為1時對應(yīng)4:2:0格式,于其它實施例可使用其它取樣機(jī)制)SRC1[31:20]=未定義關(guān)于INIT_CAVLC指令,將SRC1值寫入總暫存器606的對應(yīng)字段,利用INIT指令,另將SRC2值寫入內(nèi)部暫存器(如CVLC_bufferByteRemaining),CVLC_bufferByteRemaining暫存器用于恢復(fù)錯誤比特流,舉個例子,解碼開始時,CAVLC單元530(如SREG比特流緩沖器/DMA引擎602)針對一切片記錄有關(guān)比特流中的緩沖位,比特流使用后,CAVLC單元530計數(shù)并更新CVLC_bufferByteRemaining值,如果這個值低于0,這表示緩沖器或比特流有錯誤,此時迅速終止處理,并返回應(yīng)用程控或驅(qū)動軟件128控制,進(jìn)行恢復(fù)。請參閱圖6C,INIT_CAVLC指令也可初始化CAVLC單元530的各儲存結(jié)構(gòu),如mbNeighCtx存儲器604、左側(cè)mbNeighCtx暫存器684、目前mbNeighCtx暫存器686,于一實施例中,mbNeighCtx存儲器610的巨圖塊基準(zhǔn)相鄰內(nèi)容存儲器排列成存儲器陣列,以儲存有關(guān)巨圖塊列的數(shù)據(jù),目前mbNeighCtx暫存器686用于儲存目前解碼的巨圖塊,而左側(cè)mbNeighCtx暫存器684用于儲存先前解碼的(左側(cè))巨圖塊,另外,利用上方指標(biāo)683、左側(cè)指標(biāo)685、及目前指標(biāo)687(在圖6C中以箭頭表示)指向mbNeighCtx存儲器604、左側(cè)mbNeighCtx暫存器684、以及目前mbNeighCtx暫存器686,當(dāng)解碼目前的巨圖塊時,解碼的數(shù)據(jù)儲存于目前mbNeighCtx暫存器686,當(dāng)已知CAVLC解碼的內(nèi)容性質(zhì)時,根據(jù)CAVLC_TOTC指令從前次解碼巨圖塊時所搜集的信息來解碼目前的巨圖塊,亦即左側(cè)巨圖塊儲存于左側(cè)mbNeighCtx暫存器684并利用左側(cè)指針685進(jìn)行指向,而上方巨圖塊儲存于陣列元素[i]681中并利用上方指標(biāo)683進(jìn)行指向。INIT_CAVLC指令用于初始化與目前巨圖塊(如mbNeighCtx存儲器陣列604的元素)相鄰的巨圖塊有關(guān)的上方及左側(cè)指標(biāo)683及685,舉個例子,左側(cè)指標(biāo)685可以設(shè)為0而上方指標(biāo)683可以設(shè)為1,另外,INIT_CAVLC指令還會更新總暫存器606。于一實施例中,mbNeighCtx存儲器604包含具有120個元素的陣列,標(biāo)示為mbNeighCtx、mbNeighCtx[1]...mbNeighCtx[119],每一圖片寬度最多能儲存120個巨圖塊(因HDTV為1920×1080像素),本領(lǐng)域技術(shù)人員可利用不同大小的其它陣列結(jié)構(gòu)。舉個例子,要判斷相鄰巨圖塊(如左側(cè)巨圖塊)是否存在(有效),CAVLC_TOTC指令必須進(jìn)行運算(如mbCurrAddr%mbPerLine),檢查結(jié)果是否為0,于一實施例中,進(jìn)行下列算式a=(mbCurrAddr%mbPerLine)mbCurrAddr代表對應(yīng)于待解碼二進(jìn)制符號的目前巨圖塊位置,mbPerLine代表每一列的巨圖塊數(shù)量,上面的計算用到除法、乘法、以及減法??紤]下式mbCurrAddr∈其中,maxMB是8192,而mbPerLine=120,可利用乘法及由儲存于芯片上存儲器的窗體(如120×11位表)查找的(1/mbPerLine)進(jìn)行除法,如果mbCurrentAddr是13位,則使用13×11乘法器,于一實施例中,將乘法運算的結(jié)果取整數(shù),儲存較上方的13位,進(jìn)行13×7的乘法運算,儲存較低的13位,最后進(jìn)行13位的減法運算以決定“a”,整個運算程序需要2個周期,可以儲存這個結(jié)果給其它運算使用,每當(dāng)mbCurrAddr改變就計算一次。于某些實施例中不進(jìn)行模數(shù)(modulo)運算,改以執(zhí)行單元(如執(zhí)行單元420a,420b等等)內(nèi)的著色器邏輯電路提供第一個mbAddrCurr值,其位于第一切片的第一行,舉個例子,這個著色器邏輯電路可以進(jìn)行下列計算mbAddrCurr=absoluteMbAddrCurr-n×mbPerLine使用CWRITE指令可以「移動」mbNeighCtx存儲器604的內(nèi)容,CWRITE指令的格式可以是CWRITESRC1,其中,SRC1[15:0]=mbAddrCurr,CWRITE指令從目前mbNeighCtx暫存器686的適當(dāng)字段復(fù)制到mbNeighCtx[]結(jié)構(gòu)604的上方mbNeighCtx[i]以及左側(cè)mbNeighCtx[i-1],當(dāng)(mbAddrCurr%mbPerLine==0),左側(cè)mbNeighCtxLeft684標(biāo)記為不存在(如初始化成0),可以利用CWRITE指令「移動」mbNeighCtx存儲器604、區(qū)域暫存器608、以及總暫存器606的內(nèi)容,舉個例子,CWRITE指令移動mbNeighCtx存儲器604的相關(guān)內(nèi)容到第i個巨圖塊的左側(cè)及上方區(qū)塊(如mbNeighCtx[i]或目前巨圖塊),并清空mbNeighCtx暫存器686,如前所述,與mbNeighCtx存儲器604相關(guān)的兩個指標(biāo)是左側(cè)指標(biāo)685及上方指針683,CWRITE指令之后,上方索引增加1,而目前巨圖塊的內(nèi)容則移至陣列604的上方位置及左側(cè)位置,上述系統(tǒng)可以減少存儲器陣列的讀取/寫入端口的數(shù)量至一個讀取/寫入端口。利用INsERT指令可以更新mbNeighCtx存儲器604、局部寄存器608、以及總暫存器606的內(nèi)容,INSERT指令的格式可為INSERTDST,#Imm,SRC1于此INSERT指令,#Imm包含10位數(shù)字,數(shù)據(jù)的前5位寬度和較高5位指定將插入數(shù)據(jù)的位置,輸入?yún)?shù)具有下列格式Mask=NOT(0xFFFFFFFF<<#Imm[4:0])Data=SRC1&MaskSDATA=Data<<#Imm[9:5]SMask=Mask<<#Imm[9:5]輸出DST可以下式表示DST=(DST&NOT(sMask))ISDATA舉個例子,可利用INSERT指令(如INSERT$mbNeighCtxCurrent_1,#Imm10,SRC1)寫入目前巨圖塊,這個操作不會影響左側(cè)指標(biāo)685及上方指標(biāo)683(亦即只寫入目前位置)。INSERT指令可以寫入目前mbNeighCtx686,左側(cè)指針685指向的陣列元素與相鄰(相鄰于目前mbNeighCtx)陣列元素(即mbNeighCtx[i-1])相同,當(dāng)發(fā)出CWRITE指令,目前mbNeighCtx結(jié)構(gòu)的全部或一些內(nèi)容會復(fù)制到左側(cè)指標(biāo)685及上方指針683所指向的元素,同時上方指針增加1(如每一行巨圖塊的模數(shù)值),在復(fù)制操作的同時(或之后),以0值清空目前mbNeighCtx陣列元素。保留于mbNeighCtx存儲器604的數(shù)據(jù)結(jié)構(gòu)如下mbNeighCtxCurrent2’bmbTypembNeighCtxCurrent[65:02]4’bTC[16]mbNeighCtxCurrent[81:66]4’bTCC[cb][4]mbNeighCtxCurrent[97:82]4’bTCC[cr][4]當(dāng)執(zhí)行CWRITE指令,會更新mbNeighCtx[]相鄰數(shù)據(jù)以及初始化目前mbNeighCtx686?,F(xiàn)已描述CAVLC單元530使用的內(nèi)容存儲器結(jié)構(gòu),接下來說明CAVLC單元530及CAVLC_TOTC指令如何利用相鄰內(nèi)容信息計算TotalCoeff(TC),TotalCoeff用來決定要使用哪一個CAVLC表來解碼符號,通常CAVLC解碼是利用H.264規(guī)格書的可變長度解碼表(之后稱為CAVLC表),其中根據(jù)先前解碼符號的內(nèi)容來決定用于解碼的CAVLC表,因此,每一個符號可能會用到不同的CAVLC表,圖6D顯示一個基本的窗體結(jié)構(gòu),其為可變尺寸2D陣列,提供一個「窗體」陣列(每一個窗體對應(yīng)一個符號),而每一個符號都是霍夫曼編碼,霍夫曼編碼存成下列窗體結(jié)構(gòu)structTable{unsignedhead;structtable{unsignedval;unsignedshv;}table[];}Table[];下面描述根據(jù)各前置碼(prefixcoding)的配對(MatchVLC功能)方法,通常CAVLC表分成可變長度部分和固定長度部分,因此利用固定尺寸索引查找可以簡化配對,于MatchVLC功能中,進(jìn)行READ操作不會從移位暫存器602a移出比特流,READ操作與前面說明的READ指令(用于比特流緩沖器602b)不同,后者是針對比特流的。于matchVLC功能中,從比特流緩沖器602b復(fù)制一些位(fixL),接著于指定窗體中查找,指定窗體中的每一個項目包含一系數(shù)對(dublet,如值與位數(shù)),這個位數(shù)可用于處理比特流。圖6D是前述窗體結(jié)構(gòu)的例示2D陣列的方塊圖,用于解釋CAVLC解碼內(nèi)容中的MatchVLC功能,這個例子是H.264規(guī)格書的表9-5(nC==-1)就偽碼來說,此表可以下式表示Table9-5[8]={0,{{33,0}},0,{{0,0}},0,{{66,0}},2,{{2,2},{99,2},{34,2},{1,2}},1,{{4,1},{3,1}},1,{{67,1},{35,1}},1,{{68,1},{36,1}},0,{{100,0}}};上述偽碼可以表示成圖6D的2D窗體,利用這個窗體結(jié)構(gòu),上述MatchVLC功能可以用于CAVLC解碼,MatchVLC功能會計算比特流中從最高位起連續(xù)0的數(shù)目(countleadingzero,CLZ),以存取對應(yīng)已知語法成分的窗體;另外,當(dāng)CLZ值大于macIdx,則MatchVLC功能啟動參數(shù)化清除(parameterizedclearzero)操作,然后maxIdx回復(fù)(在圖6D的窗體中為0000000)。MatchVLC功能以及窗體結(jié)構(gòu)的另一個好處便是不需要多個指令來進(jìn)行處理,只要下列的MatchVLC片段Idx1=CLZ(sREG);//countnumberofleadingzeros,andIdx1=(Idx1>maxIdx)?maxIdx:Idx1。利用下列MatchVLC片段移除已使用的位SHL(sREG,Idx1+#1);//shiftbufferIdx1+1bitleft。利用下列MatchVLC片段讀取子陣列標(biāo)頭fixL=Table[Idx1].head,andIdx2=(!fixL)?0:READ(fixL)。前方連續(xù)0的數(shù)目可能相同,但是尾端位的大小不同,于一實施例中可利用CASEX-type狀態(tài)敘述(casestatement)(使用較多存儲器但是較簡單的碼結(jié)構(gòu))。利用(val,shv)=Table[Idx1][Idx2]以及SHL(sREG,shv)從窗體得到真實值,也可知道這個語法成分使用的實際位數(shù),從比特流移出這些位,然后將語法成分值放回目標(biāo)暫存器。前面已描述比特流解析、初始化解碼引擎及存儲器結(jié)構(gòu)、以及VLC配對方法及窗體結(jié)構(gòu),現(xiàn)回到圖6A描述CAVLC解碼引擎(如CAVLC邏輯電路660)及程序,一旦加載比特流、解碼引擎、存儲器結(jié)構(gòu)、以及暫存器,驅(qū)動軟件128發(fā)出CAVLC_TOTC指令致能coeff_token模塊610,CAVLC_TOTC指令格式可為CAVLC_TOTCDST,S1,其中S1和DST分別為輸入暫存器及內(nèi)部輸出暫存器,具有下列格式SRC1[3:0]=blkIdxSRC1[18:16]=blkCatSRC1[24]=iCbCr剩下的位未定義,輸出格式如下DST[31:16]=TrailingOnesDST[15:0]=TotalCoeff因此,coeff_token模塊610接收對應(yīng)于mbCurrAddr、mbType(表示色度通道是否有在處理,如iCbCr)、以及blkIdx(如區(qū)塊索引,因為圖形可能切成許多區(qū)塊)的信息,當(dāng)存取比特流緩沖器602b的巨圖塊,blkIdx表示特定位置處理的是8×8像素區(qū)塊或是4×4像素區(qū)塊,這類信息是由驅(qū)動軟件128所提供,coeff_token模塊610包含查找表(look-uptable),根據(jù)前述輸入coeff_token模塊610的查找表得到尾端1(TrailingOnes)及全體系數(shù)(TotalCoeff),尾端1表示一列中有多少1,全體系數(shù)則表示從比特流拉出的數(shù)據(jù)片段有多少運作/層級系數(shù)對,TrailingOnes以及TotalCoeff將分別輸入CAVLC_Level模塊614及CAVLC_ZL模塊618,TrailingOnes亦同時輸入CAVLC_L0模塊616,其對應(yīng)從比特流緩沖器602b取出的第一層級(如DC值)。CAVLC_level模塊614記錄符號的字尾長度(如尾端1的數(shù)目),并結(jié)合LevelCode計算儲存于層級陣列622及運作陣列624的層級值(level[Idx]),CAVLC_Level模塊614根據(jù)CAVLC_LVL指令運算,CAVLC_LVL指令的格式如下CAVLC_LVLDST,S2,S1,其中S1=Idx(16-bit),S2=suffixLength(16-bit),andDST=suffixLength(16-bit)。suffixLength表示字符碼長度,來自驅(qū)動軟件128的輸入會提供指定suffixLength的信息,另外,于一實施例中,因為更新了suffixLength值,DST和S2可以由同樣的暫存器取得。這里亦可使用轉(zhuǎn)遞暫存器(保留特定模塊于內(nèi)部產(chǎn)生的數(shù)據(jù)),如圖6B的F1665及F2667,一個指令及對應(yīng)的模塊是否使用轉(zhuǎn)遞暫存器會于指令中用轉(zhuǎn)遞旗標(biāo)表示,代表轉(zhuǎn)遞暫存器的符號有F1(使用轉(zhuǎn)遞來源1的值,于一實施例中可以指令中的位26表示)以及F2(使用轉(zhuǎn)遞來源2的值,于一實施例中可以指令中的位27表示),如果使用轉(zhuǎn)遞暫存器,CAVLC_LVL指令會有下列例示格式CAVLC_LVL.F1.F2DST,SRC2,SR1,其中,如果F1或F2設(shè)為1,則指定的轉(zhuǎn)遞來源將成為輸入,轉(zhuǎn)遞暫存器F1對應(yīng)于CAVLC_Level模塊614所產(chǎn)生的層級索引(level[Idx]),經(jīng)過增量(increment)模塊后輸入多工器630,轉(zhuǎn)遞暫存器F2對應(yīng)于CAVLC_Level模塊614所產(chǎn)生的suffixLength,并將輸入多工器628,多工器603及多工器628的其它輸入還有EU暫存器輸入(圖6A中標(biāo)示為EU),說明如下。CAVLC_Level模塊614還有另一個輸入levelCode,是由CAVLC_LevelCode模塊612所提供,CAVLC_LevelCode模塊612及CAVLC_Level模塊614聯(lián)合運算解碼層級值(在調(diào)整大小(scaling)之前的變換系數(shù)(transformcoefficient)值),致能CAVLC_LevelCode模塊612的指令格式如下CAVLC_LCSRC1,其中,SRC1=suffixLength(16-bit),如果使用轉(zhuǎn)遞暫存器F1665,則指令表示如下CAVLC_LVL.F1SRC1,如果設(shè)定F1,則轉(zhuǎn)遞SRC1將做為輸入,配合圖6A,如果設(shè)定F1(如F1=1),則CAVLC_LevelCode模塊612使用轉(zhuǎn)遞SRC1值(如CAVLC_Level模塊614的suffixLength)做為輸入,不然(如F1=0),EU暫存器的值將做為輸入。現(xiàn)在回到CAVLC_Level模塊614,suffixLength輸入可以經(jīng)由多工器628從CAVLC_Level模塊614轉(zhuǎn)遞,也可以經(jīng)由EU暫存器提供至多工器628,另外Idx輸入同樣可以經(jīng)由多工器630從CAVLC_Level轉(zhuǎn)遞(可以通過增量模塊進(jìn)行增量或自動增量),也可以經(jīng)由EU暫存器提供至多工器630。CAVLC_Level模塊614還直接從CAVLC_LevelCode模塊612接收levelCode輸入,除了傳送給轉(zhuǎn)遞暫存器的輸出,CAVLC_Level模塊614還提供層級索引(level[idx])輸出給層級陣列622。如前所述,將TrailingOnes輸出(如DC值)傳送至CAVLC_L0模塊616,通過下列指令致能CAVLC_L0模塊CAVLC_LVL0SRC,其中,SRC=trailingOnes(coeff_token),CAVLC_L0模塊616的輸出包括輸出給層級陣列622的層級索引(Level[Idx]),系數(shù)值編碼成正負(fù)號(sign)與大小(magnitude),CAVLC_L0模塊616提供系數(shù)的正負(fù)值,CAVC_Level模塊614提供的大小值與CVLC_L0模塊616提供的正負(fù)值結(jié)合,寫入層級陣列622,利用層級索引(level[idx])指定寫入位置,于一實施例中,系數(shù)的每一子區(qū)塊是4×4矩陣(區(qū)塊是8×8),還不是掃描(raster)順序,這個陣列稍后轉(zhuǎn)換成4×4矩陣,換句話說解碼的系數(shù)層級及運作并不是掃描格式,利用層級-運作數(shù)據(jù),可以重建4×4矩陣(但是為Z字掃描順序),然后重新排列成掃描順序的4×4矩陣。將coeff_token模塊610的輸出TotalCoeff傳送給CAVLC_ZL模塊618,通過下列指令致能CAVLC_ZL模塊618CAVLC_ZLDST,SRC1,其中,SRC1=maxNumCoeff(16-bit)而DST=ZerosLeft(16-bit),maxNumCoeff(H.264標(biāo)準(zhǔn))做為指令的來源值,換句話說,maxNumCoeff是由軟件設(shè)定的,于某些實施例中,maxNumCoeff儲存于硬件中,變換系數(shù)編碼成(層級,運作)系數(shù)對,代表編碼成0的系數(shù)(層級)數(shù)目,CAVLC_ZL模塊618提供兩個輸出ZerosLeft及Reset(reset=0)給多工器640及642,多工器640亦從CAVLC_Run模塊620接收轉(zhuǎn)遞暫存器F2,多工器642從CAVLC_Run模塊620接收增量(經(jīng)由增量模塊)的轉(zhuǎn)遞暫存器的值F1。CAVLC_Run模塊620分別從多工器640及642接收ZerosLeft及Idx輸入,并輸出運作索引(Run[Idx])至運作陣列624,如前所述,因為會使用運作-長度編碼進(jìn)行更進(jìn)一步的壓縮,因此系數(shù)編碼成(層級,運作)對,舉個例子,假設(shè)具有數(shù)值101212151911100000010,會編碼成(10,0)(12,1)(15,0)(19,0)(1,2)(0,5)(1,0)(0,0),這種字符碼通常比較短,索引便是層級索引的對應(yīng)索引,通過下列指令致能CAVLC_Run模塊620CAVLC_RUNDST,S2,S1,其中,因為已更新ZerosLeft值,因此DST及S2可從同的暫存器取得,CVLC_Run的不具正負(fù)號數(shù)值如下S1=Idx(16-bit),S2=ZerosLeft(16-bit),DST=Zerosleft(16-bit)由圖6A可知,如果使用轉(zhuǎn)遞暫存器,CAVLC_RUN指令的格式如下CAVLC.F1.F2DST,SRC2,SRC1,其中,如果設(shè)定F1或F2,就表示對應(yīng)的轉(zhuǎn)遞來源將做為輸入。至于兩個暫存器陣列,層級陣列622對應(yīng)于層級,而運作陣列624對應(yīng)于運作,每一個陣列都包括16個元素,層級陣列622的每一個元素都包含16位具正負(fù)號的值,而運作陣列624的每一個元素都包含4位不具正負(fù)號的值,利用下列指令分別從運作陣列624及層級陣列622讀取運作及層級值READ_LRUNDST,其中,于一實施例中,DST包括4個128位的連續(xù)暫存器(如EU臨時或共享暫存器),這個操作會讀取CAVLC單元530內(nèi)的層級暫存器622及運作暫存器624,并將其儲存于目標(biāo)暫存器DST,當(dāng)讀取運作并將其儲存于暫存器中,運作值會轉(zhuǎn)換成16位不具正負(fù)號的值,舉個例子,前2個暫存器保留16個16位層級(亦即陣列儲存第一筆16個系數(shù))值,而第三及第四暫存器則保留16個16位運作值,如果超過16個系數(shù),將其解碼至存儲器,于一實施例中,依照下列順序?qū)⒅祵懭胗诘谝粫捍嫫髦?,最低有?6位包含LEVEL、位16-31包含LEVEL[1]等等,以此類推直到位112-127包含LEVEL[7];于第二暫存器中最低有效16位包含LEVEL[8]...,運作值亦使用同樣的排列方法。用于清除運作陣列624及層級陣列624暫存器的另一個指令格式如下CLR_LRUN。前述解碼系統(tǒng)200(如CAVLC單元530)的軟件(著色器程序)以及硬件操作(如模塊)可以利用下列虛擬碼表示應(yīng)強(qiáng)調(diào)的是,本發(fā)明所舉的上所實施例或「較佳」實施例僅為可能的施行范例,僅用以清楚說明本發(fā)明的原理,即便對上述實施例施以變化和修飾,然皆不脫此中所述系統(tǒng)及方法的精神和原則,所有此等修飾及變化應(yīng)涵括于本發(fā)明的范圍內(nèi),受如附權(quán)利要求范圍保護(hù)。權(quán)利要求1.一種解碼系統(tǒng),其包含軟件可編程核心處理單元,其具有執(zhí)行著色器的內(nèi)容適應(yīng)性可變長度編碼(context-adaptivevariablelengthcoding,CAVLC)單元,該著色器施行視頻流的CAVLC解碼并提供解碼數(shù)據(jù)輸出,其中該CAVLC解碼是使用硬件配合軟件的方式施行。2.根據(jù)權(quán)利要求1所述的系統(tǒng),其中該CAVLC解碼是以圖形處理單元編程的內(nèi)容配合施行于圖形處理單元數(shù)據(jù)路徑內(nèi)的硬件所完成。3.根據(jù)權(quán)利要求1所述的系統(tǒng),其中該CAVLC單元還包含系數(shù)符記(coeff_token)模塊,用以接收巨圖塊信息,因應(yīng)該著色器的第一指令(CAVLC_TOTC),提供尾端1信息及全體系數(shù)信息。4.根據(jù)權(quán)利要求3所述的系統(tǒng),其中該CAVLC單元還包含層級(CAVLC_Level)模塊,用以接收該尾端1信息及層級碼信息,因應(yīng)該著色器的第二指令(CAVLC_LVL),提供字尾長度信息及層級索引(Level[Idx])信息。5.根據(jù)權(quán)利要求4所述的系統(tǒng),其中該CAVLC單元還包含層級碼(CAVLC_LevelCode)模塊,用以接收該字尾長度信息,因應(yīng)該著色器的第三指令(CAVLC_LC),提供該層級碼信息給該層級模塊。6.根據(jù)權(quán)利要求5所述的系統(tǒng),其中該層級碼模塊從轉(zhuǎn)遞暫存器或執(zhí)行單元暫存器接收該字尾長度信息。7.根據(jù)權(quán)利要求5所述的系統(tǒng),其中該層級碼模塊從轉(zhuǎn)遞暫存器或執(zhí)行單元暫存器接收該字尾長度信息及該層級索引信息,該層級索引信息是經(jīng)過增量運算。8.根據(jù)權(quán)利要求4所述的系統(tǒng),其中該CAVLC單元還包含層級0(CAVLC_L0)模塊,用以接收該尾端1信息,因應(yīng)該著色器的第四指令(CAVLC_LVL0),提供第二層級索引(Level[Idx])信息給層級陣列。9.根據(jù)權(quán)利要求8所述的系統(tǒng),其中該CAVLC單元還包含零層級(CAVLC_ZL)模塊,用以接收該全體系數(shù)信息及最大數(shù)目系數(shù)信息,因應(yīng)該著色器的第五指令(CAVLC_ZL),提供左方0信息及重置值給第一多工器及第二多工器。10.根據(jù)權(quán)利要求9所述的系統(tǒng),其中該CAVLC單元還包含運作(CAVLC_Run)模塊,用以從該第一多工器及該第二多工器接收該左方0信息及第二索引信息,因應(yīng)該著色器的第六指令(CAVLC_RUN),提供運作索引(Run[Idx])信息給運作陣列。11.根據(jù)權(quán)利要求10所述的系統(tǒng),其中該第一多工器及該第二多工器分別從第一轉(zhuǎn)遞暫存器及第二轉(zhuǎn)遞暫存器接收該左方0信息及該第二索引信息。12.根據(jù)權(quán)利要求10所述的系統(tǒng),其中該層級陣列及該運作陣列因應(yīng)該著色器的第七指令(READ_LRUN)提供解碼層級值及解碼運作值,并因應(yīng)該著色器的第八指令(CLR_LRUN)而清空。13.根據(jù)權(quán)利要求1所述的系統(tǒng),其中該CAVLC單元使用指令內(nèi)的位,判斷儲存在內(nèi)部暫存器的前一次運算結(jié)果是否可用,或是來源操作數(shù)中的數(shù)據(jù)是否可供一個或多個模塊于目前運算中使用。14.根據(jù)權(quán)利要求1所述的系統(tǒng),其中該CAVLC單元還包含直接存儲器存取(directmemoryaccess,DMA)引擎模塊,其內(nèi)包含比特流緩沖器以及DMA引擎,該DMA引擎模塊因應(yīng)該著色器針對每一切片執(zhí)行的指令,當(dāng)已使用該比特流內(nèi)的預(yù)定數(shù)量的位,自動重復(fù)填入該預(yù)定數(shù)量的位,該位對應(yīng)于該視頻流。15.根據(jù)權(quán)利要求14所述的系統(tǒng),其中該CAVLC單元因應(yīng)該比特流緩沖器內(nèi)有向下溢位的可能,延遲該DMA引擎模塊。16.根據(jù)權(quán)利要求14所述的系統(tǒng),其中該DMA引擎模塊用于記錄該比特流緩沖器內(nèi)的已使用位數(shù)目,并因應(yīng)檢測到該位數(shù)目大于預(yù)定值,暫停該比特流緩沖器運算,并將控制權(quán)轉(zhuǎn)移至主處理器。17.一種解碼方法,其包括步驟將著色器加載具有CAVLC單元的可編程核心處理單元中;執(zhí)行該CAVLC單元上的該著色器,以CAVLC解碼視頻流;以及提供解碼數(shù)據(jù)輸出。18.根據(jù)權(quán)利要求17所述的方法,其中該CAVLC解碼是以圖形處理單元編程的內(nèi)容配合施行于圖形處理單元數(shù)據(jù)路徑內(nèi)的硬件所完成。19.根據(jù)權(quán)利要求17所述的方法,還包括步驟該CAVLC單元的系數(shù)符記(coeff_token)模塊接收巨圖塊信息;因應(yīng)該著色器的第一指令(CAVLC_TOTC),提供尾端1信息及全體系數(shù)信息;該CAVLC單元的層級(CAVLC_Level)模塊接收該尾端1信息及層級碼信息;因應(yīng)該著色器的第二指令(CAVLC_LVL),提供字尾長度信息及層級索引(Level[Idx])信息;該CAVLC單元的層級碼(CAVLC_LevelCode)模塊接收該字尾長度信息;以及因應(yīng)該著色器的第三指令(CAVLC_LC),提供該層級碼信息給該層級模塊。20.根據(jù)權(quán)利要求19所述的方法,其中該層級碼模塊從轉(zhuǎn)遞暫存器或執(zhí)行單元暫存器接收該字尾長度信息及該層級索引信息,該層級索引信息是經(jīng)過增量運算。21.根據(jù)權(quán)利要求19所述的方法,還包括步驟該CAVLC單元的層級0(CAVLC_L0)模塊接收該尾端1信息;以及因應(yīng)該著色器的第四指令(CAVLC_LVL0),提供第二層級索引信息(Level[Idx])給層級陣列。22.根據(jù)權(quán)利要求21所述的方法,還包括步驟該CAVLC模塊的零層級(CAVLC_ZL)模塊接收該全體系數(shù)信息及最大數(shù)目系數(shù)信息;因應(yīng)該著色器的第五指令(CAVLC_ZL),提供左方0信息及重置值給第一多工器及第二多工器;該CAVLC單元的運作(CAVLC_Run)模塊分別從該第一多工器及該第二多工器接收該左方0信息及第二索引信息;以及因應(yīng)該著色器的第六指令(CAVLC_RUN),提供運作索引(Run[Idx])給運作陣列。23.根據(jù)權(quán)利要求22所述的方法,其中該第一多工器及該第二多工器分別從第一轉(zhuǎn)遞暫存器及第二轉(zhuǎn)遞暫存器接收該左方0信息及該第二索引。24.根據(jù)權(quán)利要求22所述的方法,其中該層級陣列及該運作陣列因應(yīng)該著色器的第七指令(READ_LRUN)提供解碼層級值及解碼運作值。25.根據(jù)權(quán)利要求22所述的方法,其中該層級陣列及該運作陣列因應(yīng)該著色器的第八指令(CLR_LRUN)而清空。26.根據(jù)權(quán)利要求17所述的方法,還包括步驟該CAVLC單元使用指令內(nèi)的位,判斷儲存在內(nèi)部暫存器的前一次運算結(jié)果是否可用,或是來源操作數(shù)中的數(shù)據(jù)是否可供一個或多個模塊于目前運算中使用。27.根據(jù)權(quán)利要求17所述的方法,其中還包括步驟因應(yīng)該著色器針對每一切片執(zhí)行的指令,當(dāng)已使用該比特流內(nèi)的預(yù)定數(shù)量的位,自動重復(fù)填入該預(yù)定數(shù)量的位,該位對應(yīng)于該視頻流。28.根據(jù)權(quán)利要求27所述的方法,還包括步驟因應(yīng)該比特流緩沖器內(nèi)有向下溢位的可能,延遲使用該比特流緩沖器內(nèi)的該位。29.根據(jù)權(quán)利要求27所述的方法,還包括步驟記錄該比特流緩沖器內(nèi)的已使用位數(shù)目,并因應(yīng)檢測到該位數(shù)目大于預(yù)定值,暫停該比特流緩沖器運算,并將控制權(quán)轉(zhuǎn)移至主處理器。全文摘要本發(fā)明揭露一種解碼系統(tǒng)與方法,系統(tǒng)實施例包含軟件可編程核心處理單元,其具有內(nèi)容適應(yīng)性可變長度編碼(CAVLC)單元,用于執(zhí)行著色器,該著色器用于施行CAVLC解碼視頻流,并提供解碼數(shù)據(jù)輸出。文檔編號H04N7/30GK101072349SQ20071011029公開日2007年11月14日申請日期2007年6月8日優(yōu)先權(quán)日2006年6月8日發(fā)明者扎伊爾德·荷圣申請人:威盛電子股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1