專利名稱::譯碼方法
技術(shù)領(lǐng)域:
:本發(fā)明系有關(guān)于數(shù)據(jù)處理系統(tǒng),特別是有關(guān)于可編程圖形處理系統(tǒng)以及方法。
背景技術(shù):
:計(jì)算機(jī)圖形是用計(jì)算機(jī)產(chǎn)生圖像、影像或是其他圖形或圖像信息的一種技術(shù)。目前,許多的圖形系統(tǒng)是透過接口的使用而實(shí)施,例如微軟的Direct3D接口、OpenGL等,其可在執(zhí)行特定操作系統(tǒng)(例如微軟的窗口系統(tǒng))的計(jì)算機(jī)上對多媒體硬件(例如圖形加速器或是圖形處理單元(graphicsprocessingunit,GPU)提供控制。圖像或是影像的產(chǎn)生一般稱的為描繪成像(rendering),上述操作的細(xì)節(jié)主要是經(jīng)由圖形加速器所實(shí)施。一般而言,在三維(threedimensional,3D)計(jì)算機(jī)圖形中,場景內(nèi)物件表面(或容體)所表示的幾何被轉(zhuǎn)換成像素(圖像元素),并儲(chǔ)存在幀緩沖器(framebuffer)內(nèi),接著顯示于顯示裝置上。每個(gè)物件或是物件群都有與表面外觀有關(guān)的特定視覺性質(zhì)(例如材料、反射系數(shù)、形狀、紋理(texture)等),其可被定義成物件或物件群的描繪成像內(nèi)容(renderingcontext)。計(jì)算機(jī)圖形用以增加消費(fèi)者對游戲及其他多媒體產(chǎn)品的控制性及特色的要求、產(chǎn)生更加真實(shí)的影像以及改善處理速度及耗能?,F(xiàn)已發(fā)展出許多標(biāo)準(zhǔn),可以利用較少的位數(shù)來產(chǎn)生較佳品質(zhì)的影像。這些標(biāo)準(zhǔn)之一的H.264標(biāo)準(zhǔn)(亦為ISO動(dòng)畫專家群(motionpictureexpertsgroup,MPEG)-4的第十部分)為高壓縮數(shù)字視頻編碼譯碼(codec)標(biāo)準(zhǔn)。相較于MPEG-2編碼器,H.264相容的編碼譯碼器僅使用幾乎三分之一的位數(shù)來編碼視頻并維持相似的視頻品質(zhì)。H.264規(guī)格提供兩種型式的熵(entropy)編碼處理,包括內(nèi)容適應(yīng)二進(jìn)制算術(shù)編碼(context-adaptivebinaryarithmeticcoding,CABAC)以及內(nèi)容適應(yīng)可變長度編碼(context-adaptivevariablelengthcoding,CAVLC)。為了滿足這些連續(xù)變化的需要,已提出了許多不同的純軟件或是純硬件解決方式,然而,已知技術(shù)皆會(huì)導(dǎo)致較高的庫存、立即淘汰的技術(shù)以及在設(shè)計(jì)上缺乏彈性。
發(fā)明內(nèi)容本發(fā)明揭露用于圖形處理單元的多執(zhí)行序平行計(jì)算核心的譯碼系統(tǒng)以及方法。本發(fā)明提供一方法,包括提供配置有多個(gè)指令集的一著色器,以譯碼一視頻串流,其中上述視頻串流系根據(jù)多個(gè)不同編碼方法而得;載入具有上述多個(gè)指令集的一個(gè)的上述著色器至一軟件可編程核心處理單元的一可變長度譯碼單元,以供上述可變長度譯碼單元執(zhí)行;以及通過執(zhí)行上述可變長度譯碼單元的上述著色器譯碼上述視頻串流。本發(fā)明所述的譯碼方法,上述載入更包括初始化上述可變長度譯碼單元,上述譯碼于一圖形處理單元的內(nèi)容編程內(nèi),透過執(zhí)行于上述圖形處理單元數(shù)據(jù)路徑的硬件以及于一位流緩沖器中,用以自動(dòng)管理的額外硬件而完成,以及其中上述多個(gè)編碼方法包括內(nèi)容適應(yīng)二進(jìn)制算術(shù)編碼(CABAC)、內(nèi)容適應(yīng)可變長度編碼(CAVLC)、EXP-Golomb、動(dòng)畫專家群(MPEG-2)以及VC-1的二種或多種。本發(fā)明所述的譯碼方法,用以初始化的上述指令集包括至少一INIT_CTX以及INIT_ADE以供CABAC譯碼、INIT_CAVLC以供CAVLC譯碼、INIT_MPEG2以供MPEG-2譯碼、INIT_VC-1以供VC-1譯碼以及INIT_CTX或是INIT_CAVLC以供EXP-Golomb譯碼,以及更包括INIT_AVS用以根據(jù)-音頻視頻標(biāo)準(zhǔn)而譯碼。本發(fā)明所述的譯碼方法,上述初始化更包括至少初始化一內(nèi)容存儲(chǔ)器陣列、多個(gè)暫存器、多個(gè)內(nèi)容表以及一譯碼引擎之一;對應(yīng)于譯碼運(yùn)算更新上述暫存器的欄位或是初始化上述暫存器的欄位,其中上述更新包括在上述暫存器以及上述內(nèi)容存儲(chǔ)器陣列之間移動(dòng)值;以及讀取上述內(nèi)容存儲(chǔ)器陣列,其中,用以移動(dòng)或是初始化的上述指令集包括一CWRITE指令,而用以更新的上述指令集包括一INSERT指令,以及用以讀取的上述指令集包括一READ_NCM指令。本發(fā)明所述的譯碼方法,上述初始化更包括初始化一位流緩沖器以及相關(guān)暫存器,用以接收上述視頻串流的片段,其中用以初始化上述位流緩沖器以及相關(guān)暫存器的上述指令集包括一INIT_BSTR指令,用以載入對應(yīng)于上述視頻串流的數(shù)據(jù)至上述位流緩沖器,并開始上述位流緩沖器以及相關(guān)暫存器的自動(dòng)管理的一程序。本發(fā)明所述的譯碼方法,更包括以字節(jié)方式排列上述位流緩沖器的數(shù)據(jù),其中用以以字節(jié)方式排列的上述指令集包括一ABST指令。本發(fā)明所述的譯碼方法,更包括在譯碼期間當(dāng)數(shù)據(jù)被使用時(shí),從相關(guān)暫存器讀取數(shù)據(jù),其中用以讀取數(shù)據(jù)的上述指令集包括一READ指令。本發(fā)明所述的譯碼方法,更包括檢查上述位流緩沖器的一位流或是相關(guān)暫存器以供不需要執(zhí)行上述位流的特定圖型,其中用以檢查的上述指令集包括至少下列其中之一一INPSTR指令,對應(yīng)于相關(guān)暫存器的檢查,以及一既定數(shù)量的最高有效位至對應(yīng)于上述檢查的一目標(biāo)暫存器的一傳回;以及一INPTRB指令,對應(yīng)于相關(guān)暫存器的原始字節(jié)序列承載尾隨位的檢查。本發(fā)明提供另一方法,包括通過執(zhí)行一著色器譯碼一視頻串流,上述著色器是在內(nèi)嵌于一可編程核心處理單元的一可變長度譯碼單元內(nèi),以及上述譯碼系根據(jù)多個(gè)不同編碼方法;以及提供一已譯碼數(shù)據(jù)輸出。本發(fā)明所述的譯碼方法,上述譯碼系于圖形處理單元的內(nèi)容編程內(nèi),透過執(zhí)行于一圖形處理單元數(shù)據(jù)路徑的硬件以及自動(dòng)管理位流緩沖器的額外硬件而完成,以及其中上述多個(gè)編碼方法包括內(nèi)容適應(yīng)二進(jìn)制算術(shù)編碼(CABAC)、內(nèi)容適應(yīng)可變長度編碼(CAVLC)、EXP-Golomb、動(dòng)畫專家群(MPEG-2)以及VC-1的二種或多種。本發(fā)明所述的譯碼方法,根據(jù)CABAC的上述譯碼包括在一二進(jìn)制化模塊內(nèi),接收一第一信息,包括一語法成分以及一內(nèi)容區(qū)塊種類;對應(yīng)于由上述二進(jìn)制化模塊所執(zhí)行的上述著色器的一第一指令,根據(jù)用于內(nèi)容模型的上述第一信息而提供對應(yīng)于一或多個(gè)宏區(qū)塊參數(shù)的一第二信息;在一得到內(nèi)容模塊內(nèi),接收上述第二信息;對應(yīng)于由上述得到內(nèi)容模塊所執(zhí)行的上述著色器的一第二指令,提供用于二進(jìn)制譯碼的一二進(jìn)制信息以及一內(nèi)容識別信息,其中上述內(nèi)容識別信息對應(yīng)于一高可能性符號或是一低可能性符號機(jī)率;在一二進(jìn)制計(jì)算譯碼模塊內(nèi),接收上述二進(jìn)制信息、上述內(nèi)容識別信息、一偏移量以及一范圍;以及對應(yīng)于由上述二進(jìn)制計(jì)算譯碼模塊所執(zhí)行的上述著色器的一第三指令,譯碼一或多個(gè)二進(jìn)制符號。本發(fā)明所述的譯碼方法,根據(jù)CABAC的上述譯碼更包括下列的結(jié)合接收一或多個(gè)譯碼過的二進(jìn)制符號在一二進(jìn)制字串暫存器內(nèi),上述一或多個(gè)譯碼過的二進(jìn)制符號代表一譯碼過的語法成分;提供更新過的內(nèi)容信息;以及寫入至一內(nèi)容存儲(chǔ)器陣列,上述寫入系根據(jù)包含由供應(yīng)上述內(nèi)容存儲(chǔ)器的暫存器至上述內(nèi)容存儲(chǔ)器陣列的數(shù)值轉(zhuǎn)換的布林邏輯運(yùn)算。本發(fā)明所述的譯碼方法,更包括至少下列之一者使用一指令中的位而決定是否使用儲(chǔ)存于一內(nèi)部暫存器的一前一運(yùn)算的一結(jié)果,或是在一來源運(yùn)算元的一數(shù)據(jù)應(yīng)使用于在一或多個(gè)模塊的一目前運(yùn)算;當(dāng)一既定數(shù)量的位被使用于譯碼時(shí),重復(fù)地且自動(dòng)地在一位流緩沖器緩沖上述既定數(shù)量的位,上述位數(shù)對應(yīng)于上述視頻串流;延遲對應(yīng)于在上述位流緩沖器中的預(yù)期向下溢位的緩沖;以及追蹤在上述位流緩沖器中所使用的位數(shù),對應(yīng)于上述位數(shù)系大于一既定數(shù)量的偵測,停止上述位流緩沖器運(yùn)算,并轉(zhuǎn)換控制至一主機(jī)處理器。本發(fā)明所述的譯碼方法,根據(jù)CAVLC的上述譯碼包括在CAVLC單元的一系數(shù)符記模塊內(nèi),接收一宏區(qū)塊信息;對應(yīng)于上述著色器的一第四指令(CAVLC_TOTC),提供一拖尾系數(shù)(TrailingOnes)信息以及一非零系數(shù)(TotalCoeff)信息;在CAVLC單元的一電平模塊內(nèi),接收上述拖尾系數(shù)信息以及一電平碼信息;對應(yīng)于上述著色器的一第五指令(CAVLC_LVL),提供一字尾長度信息以及一電平索引(Level[Idx])信息;在CAVLC單元的一電平碼模塊內(nèi),接收上述字尾長度信息;以及對應(yīng)于上述著色器的一第六指令(CAVLC_LC),提供上述電平碼信息至上述電平模塊。本發(fā)明所述的譯碼方法,上述字尾長度信息以及上述電平索引信息系經(jīng)由一轉(zhuǎn)發(fā)暫存器以及一執(zhí)行單元暫存器之一者在電平模塊內(nèi)被接收,其中上述電平索引信息為遞增。本發(fā)明所述的譯碼方法,根據(jù)CAVLC的上述譯碼更包括下列的結(jié)合在CAVLC單元的一電平0模塊內(nèi),接收上述拖尾系數(shù)信息,以及對應(yīng)于上述著色器的一第七指令(CAVLC_LVL0),提供一第二電平索引信息至一電平陣列;在CAVLC單元的一零電平模塊內(nèi),接收上述非零系數(shù)信息以及拖尾系數(shù)信息的一最大值;對應(yīng)于上述著色器的一第八指令(CAVLC_ZL),提供一零剩余信息以及一重置值至一第一多工器以及一第二多工器;在CAVLC單元的一運(yùn)行模塊,分別接收來自上述第一以及第二多工器的上述零剩余信息以及上述第二電平索引信息;對應(yīng)于上述著色器的一第九指令(CAVLC_RUN),提供一運(yùn)行索引至一運(yùn)行陣列;對應(yīng)于上述著色器的一第十指令(READ_LRUN),分別由上述電平陣列以及上述運(yùn)行陣列提供一譯碼過的電平值以及一譯碼過的運(yùn)行值;以及對應(yīng)于上述著色器的一第十一指令(CLR_LRUN),清除上述電平陣列以及上述運(yùn)行陣列。本發(fā)明所述的譯碼方法,上述第一多工器用以接收來自一第一轉(zhuǎn)發(fā)暫存器的上述零剩余信息,而上述第二多工器用以接收來自一第二轉(zhuǎn)發(fā)暫存器的上述第二電平索引信息。本發(fā)明所述的譯碼方法,根據(jù)EXP-Golomb的上述譯碼包括偵測以及追蹤在結(jié)合一位流緩沖器的一暫存器中引導(dǎo)0以及引導(dǎo)1的數(shù)量,其中根據(jù)EXP-Golomb的上述譯碼使用一單一運(yùn)算碼執(zhí)行多個(gè)EXP-Golomb運(yùn)算,每一上述多個(gè)EXP-Golomb運(yùn)算可使用在一著色器指令中的一立即數(shù)據(jù)欄位值的個(gè)別值來加以區(qū)別,其中上述偵測以及追蹤引導(dǎo)0根據(jù)一計(jì)算引導(dǎo)0(CLZ)指令,而上述偵測以及追蹤引導(dǎo)1根據(jù)一計(jì)算引導(dǎo)0(CLO)指令,以及其中對應(yīng)于EXP-Golomb譯碼的上述著色器指令包括一EXP_GOLOMB_D指令。本發(fā)明所述的譯碼方法,根據(jù)MPEG-2的上述譯碼包括使用一或多個(gè)MatchVLC函數(shù)執(zhí)行MPEG標(biāo)準(zhǔn)表格,每一上述一或多個(gè)MatchVLC函數(shù)對應(yīng)于一個(gè)別語法成分,上述表格選擇依據(jù)上述著色器的一指令,其中對應(yīng)于MatchVLC函數(shù)的上述著色器指令包括一VLC_MPEG2指令。本發(fā)明所述的譯碼方法,根據(jù)VC-1的上述譯碼包括選擇性地載入VC-1表格至一內(nèi)容存儲(chǔ)器陣列,其中上述譯碼根據(jù)上述選擇性載入的表格。本發(fā)明所述的譯碼方法,可將指令延遲減縮到最小。圖1系顯示圖形處理器系統(tǒng)實(shí)施例的方塊圖,其中可執(zhí)行不同的譯碼系統(tǒng)(及方法);圖2系顯示示范處理環(huán)境的方塊圖,其中可執(zhí)行譯碼系統(tǒng)的不同實(shí)施例;圖3系顯示圖2所顯示的示范處理環(huán)境的選擇元件方塊圖;圖4系顯示圖2、圖3所顯示的示范處理環(huán)境的計(jì)算核心方塊圖,其中可執(zhí)行譯碼系統(tǒng)的不同實(shí)施例;圖5A系顯示圖4中計(jì)算核心的執(zhí)行單元的選擇元件方塊圖,其中可執(zhí)行譯碼系統(tǒng)的不同實(shí)施例;圖5B系顯示執(zhí)行單元數(shù)據(jù)路徑的方塊圖,其中可執(zhí)行譯碼系統(tǒng)的不同實(shí)施例;圖5C系顯示圖5B中譯碼系統(tǒng)實(shí)施例的方塊圖,其適用于多個(gè)編碼標(biāo)準(zhǔn),以及更顯示對應(yīng)的位流緩沖器的實(shí)施例;圖6A系顯示圖5C中譯碼系統(tǒng)實(shí)施例的方塊圖,用以進(jìn)行CABAC譯碼;圖6B系顯示圖6A中譯碼系統(tǒng)實(shí)施例的方塊圖;圖6C系顯示圖6A中譯碼系統(tǒng)的內(nèi)容存儲(chǔ)結(jié)構(gòu)及相關(guān)暫存器實(shí)施例的方塊圖;圖6D系顯示使用圖6A中譯碼系統(tǒng)的宏區(qū)塊劃分機(jī)制;圖6E系顯示使用圖6A中譯碼系統(tǒng)所執(zhí)行的示范宏區(qū)塊譯碼機(jī)制的方塊圖;圖7A系顯示圖5C中譯碼系統(tǒng)實(shí)施例的方塊圖,用以進(jìn)行CABAC譯碼;圖7B系顯示圖7A中譯碼系統(tǒng)所使用的表格結(jié)構(gòu)實(shí)施例的方塊圖。具體實(shí)施例方式為讓本發(fā)明的上述和其他目的、特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉出較佳實(shí)施例,并配合所附圖式,作詳細(xì)說明如下。本發(fā)明揭露譯碼系統(tǒng)以及方法的許多實(shí)施例(其中,上述系統(tǒng)及方法將統(tǒng)稱為譯碼系統(tǒng))。在一實(shí)施例中,譯碼系統(tǒng)系內(nèi)嵌于圖形處理單元(graphicsprocessingunit,GPU)的可編程、多執(zhí)行序(multithread)以及平行計(jì)算核心的一或多個(gè)執(zhí)行單元中。使用軟件或硬件的結(jié)合以實(shí)施譯碼功能。即視頻譯碼是在圖形處理單元程序設(shè)計(jì)(programming)的內(nèi)容(context)以及圖形處理單元數(shù)據(jù)路徑內(nèi)的硬件實(shí)施所完成。例如,在一實(shí)施例中,譯碼運(yùn)算或方法系由具有擴(kuò)充指令集(extendedinstructionset)的著色器(shader)(例如頂點(diǎn)著色器)、圖形處理單元的執(zhí)行單元數(shù)據(jù)路徑、以及用于位流緩沖器的自動(dòng)管理的額外硬件所實(shí)施。相較于現(xiàn)有系統(tǒng),現(xiàn)有系統(tǒng)為處理純硬件或純軟件為主的解決方式,因此會(huì)遇到于
背景技術(shù):
中所提到的一些問題。在本文所描述的譯碼系統(tǒng)中,可實(shí)施使用多個(gè)熵編碼技術(shù)的信息譯碼的編碼動(dòng)作。譯碼系統(tǒng)可根據(jù)著名的國際電信聯(lián)盟通訊標(biāo)準(zhǔn)部門(internationaltelecommunicationuniontelecommunicationstandardizationsector,ITU-T)H.264標(biāo)準(zhǔn)的CABAC以及CAVLC進(jìn)行譯碼,亦可根據(jù)MPEG-2以及VC-1標(biāo)準(zhǔn)進(jìn)行譯碼。不同的譯碼系統(tǒng)實(shí)施例系根據(jù)多個(gè)模式之一而操作,其中各模式系對應(yīng)于先前所描述的標(biāo)準(zhǔn)之一并根據(jù)執(zhí)行一或多個(gè)從圖形處理單元幀緩沖存儲(chǔ)器或?qū)?yīng)于主機(jī)處理器的存儲(chǔ)器(例如主機(jī)中央處理單元(centralprocessingunit,CPU))所接收到的指令集(例如經(jīng)由預(yù)先載入(preload)等已知機(jī)制或是快取失敗)??芍匦率褂糜布蕴峁┒喾N型式的譯碼標(biāo)準(zhǔn)(即根據(jù)所選擇的模式)。再者,所選擇的模式亦會(huì)對初始化、使用和/或更新內(nèi)容存儲(chǔ)器的方式造成影響。根據(jù)譯碼的啟動(dòng)模式,譯碼系統(tǒng)可使用如Exp-Golomb編碼、像霍夫曼(Huffman)的編碼(例如CAVLV、MPEG-2以及VC-1)和/或算術(shù)編碼(例如CABAC)。通過延伸對應(yīng)于一或多執(zhí)行單元的指令集,以及提供額外的自動(dòng)管理位流的硬件來執(zhí)行熵譯碼方法,以在CAVLV譯碼以及CABAC譯碼中執(zhí)行內(nèi)容模型。在一實(shí)施例中,熵編碼表系使用不同的存儲(chǔ)器表格或是其他的數(shù)據(jù)結(jié)構(gòu)(例如只讀存儲(chǔ)器(readonlymemory,ROM)表)。此外,自動(dòng)位流緩沖器具備一些優(yōu)點(diǎn),例如,一旦位流緩沖器的直接存儲(chǔ)器存取(directmemoryaccess,DMA)引擎得知位流的位置(地址),便會(huì)自動(dòng)管理位流而不需要進(jìn)一步的指令。相較于傳統(tǒng)的微處理器/數(shù)字信號處理器(digitalsignalprocessor,DSP)系統(tǒng),位流管理代表了大量的間接費(fèi)用。再者,透過追蹤所使用的位數(shù)量,位流緩沖器機(jī)制可以偵測和處理錯(cuò)誤的位流。本發(fā)明譯碼系統(tǒng)實(shí)施例的另一優(yōu)點(diǎn)是將指令延遲(latency)減縮到最小。例如,因?yàn)镃ABAC譯碼是非常連續(xù)的動(dòng)作且不易利用多執(zhí)行序處理,因此在不同實(shí)施例中使用一種轉(zhuǎn)發(fā)(forwarding)機(jī)制(例如暫存轉(zhuǎn)發(fā))以減少有效相依延遲。進(jìn)一步解釋,許多深管線(deep-pipeline)以及多執(zhí)行序處理器的限制是無法在同一執(zhí)行序(thread)中每一周期內(nèi)執(zhí)行指令。有些系統(tǒng)可使用一般轉(zhuǎn)發(fā),其系通過檢查先前結(jié)果的運(yùn)算元(operand)地址以及指令運(yùn)算元地址,當(dāng)兩者相同時(shí),則使用先前結(jié)果的運(yùn)算元。傳統(tǒng)上,一般轉(zhuǎn)發(fā)需要復(fù)雜的比較和多工。在譯碼系統(tǒng)的部分實(shí)施例中,不管是使用先前的計(jì)算結(jié)果(例如儲(chǔ)存在內(nèi)部的暫存器)或是原始運(yùn)算元的數(shù)據(jù),將利用不同的轉(zhuǎn)發(fā)型式來使用指令中的位以編碼,例如總共2位而每一運(yùn)算元使用1位。通過這種方式,可以減少整體的延遲而改善處理器管線的效率。圖1系顯示圖形處理系統(tǒng)100的一實(shí)施例的方塊圖,其中譯碼系統(tǒng)以及方法的實(shí)施例于圖形處理系統(tǒng)100中實(shí)施。在部分實(shí)施例中,圖形處理系統(tǒng)100可以是計(jì)算機(jī)系統(tǒng)。圖形處理器系統(tǒng)100可包括由顯示接口單元(displayinterfaceunit,DIU)104驅(qū)動(dòng)的顯示裝置102以及局部存儲(chǔ)器106(例如可包括顯示緩沖器、幀緩沖器、紋理緩沖器、命令緩沖器等)。局部存儲(chǔ)器106亦可取代為幀緩沖器或是儲(chǔ)存單元。局部存儲(chǔ)器106經(jīng)由一或多個(gè)存儲(chǔ)接口單元(memoryinterfaceunit,MIU)110耦接于圖形處理單元114。在一實(shí)施例中,存儲(chǔ)接口單元110、圖形處理單元114以及顯示接口單元104皆耦接至與高速外圍設(shè)備互連(peripheralcomponentinterconnectexpress,PCI-E)相容的總線接口單元(businterfaceunit,BIU)118。在一實(shí)施例中,總線接口單元118可使用圖形地址重新映射表(graphicsaddressremappingtable,GART),然而亦可使用其他的存儲(chǔ)映射(mapping)機(jī)制。圖形處理單元114包括譯碼系統(tǒng)200,其將描述于后。在部分實(shí)施例中,雖然譯碼系統(tǒng)200系顯示為圖形處理單元114內(nèi)的一個(gè)元件,譯碼系統(tǒng)200亦可包括所顯示的圖形處理系統(tǒng)100的一或多個(gè)額外元件或是不同元件??偩€接口單元118耦接于芯片組122(例如北橋芯片組)或開關(guān)。芯片組122包括接口電子電路以增強(qiáng)來自中央處理單元126(又稱主機(jī)處理器)的信號,并分離從系統(tǒng)存儲(chǔ)器124進(jìn)出的信號以及從輸入輸出(I/O)裝置(未顯示)進(jìn)出的信號。雖然提到了PCI-E總線協(xié)議,然而在部分實(shí)施例中亦可在主機(jī)處理器與圖形處理單元114之間使用其他的連接和/或通訊方式,例如PCI、專屬高速總線等。系統(tǒng)存儲(chǔ)器124亦包括驅(qū)動(dòng)軟件128,其可使用中央處理單元126將指令集或命令傳送至圖形處理單元114內(nèi)的暫存器。在部分實(shí)施例中,可透過芯片組122使用額外的圖形處理單元經(jīng)由PCI-E總線協(xié)議耦接至圖1中的元件。在一實(shí)施例中,圖形處理系統(tǒng)100可包括圖1所顯示的所有元件,或是較少元件和/或不同于圖1所顯示的元件。再者,在部分實(shí)施例中,可使用額外的元件,例如耦接至芯片組122的南橋芯片組。參考圖2,圖2系顯示實(shí)施譯碼系統(tǒng)200的一實(shí)施例的處理環(huán)境的方塊圖。特別是圖形處理單元114包括圖形處理器202。圖形處理器202包括多執(zhí)行單元(executionunit,EU)及計(jì)算核心204(亦稱為軟件可編程核心處理單元)。在一實(shí)施例中,計(jì)算核心204包括內(nèi)嵌于執(zhí)行單元數(shù)據(jù)路徑(executionunitdatapath,EUDP)的譯碼系統(tǒng)200(亦稱為VLD單元),其中執(zhí)行單元數(shù)據(jù)路徑被分配至一或多個(gè)執(zhí)行單元。圖形處理器202亦包括執(zhí)行單元集合(executionunitpool,EUP)控制、頂點(diǎn)/串流快取單元206(這里稱為執(zhí)行單元集合控制單元206)以及具有固定功能邏輯單元(例如包含三角形設(shè)定單元(triangleset-upunit,TSU)、柵格-圖塊產(chǎn)生器(span-tilegenerator,STG)等)的圖形管線208,其將描述于后。計(jì)算核心204包括多執(zhí)行單元的集合以符合不同著色器程序的著色任務(wù)的計(jì)算要求,其中著色器程序包括頂點(diǎn)著色器、幾何著色器和/或像素著色器處理圖形管線208的數(shù)據(jù)。在一實(shí)施例中,當(dāng)著色器透過計(jì)算核心204執(zhí)行譯碼系統(tǒng)200的功能時(shí),圖形處理器實(shí)施例的說明將被描述,接著說明譯碼系統(tǒng)200的特定實(shí)施例。譯碼系統(tǒng)200可以用硬件、軟件、韌體或其組合等方式而實(shí)施。在較佳實(shí)施例中,譯碼系統(tǒng)200系以硬件以及軟件的方式實(shí)施,其包括下列已知技術(shù)的任何技術(shù)或是結(jié)合具有邏輯門且可對數(shù)據(jù)信號進(jìn)行邏輯功能的離散邏輯電路、具有適當(dāng)組合邏輯門的專用集成電路(applicationspecificintegratedcircuit,ASIC)、可編程門陣列(programmablegatearray,PGA)、現(xiàn)場可編程門陣列(fieldprogrammablegatearray,F(xiàn)PGA)以及狀態(tài)機(jī)(statemachine)等。參考圖3以及圖4,其分別為圖形處理器202的實(shí)施例中選擇元件的方塊圖。如前所述,譯碼系統(tǒng)200的一實(shí)施例可以是具有擴(kuò)充指令集以及額外硬件元件的圖形處理器202內(nèi)的著色器,圖形處理器202的一實(shí)施例以及對應(yīng)的處理將描述于后。雖然圖3與圖4并未顯示圖形處理的全部元件,但是圖3與圖4所顯示的元件已足夠使本領(lǐng)域技術(shù)人員理解到相關(guān)圖形處理器的功能及架構(gòu)。參考圖3,可編程處理環(huán)境的中心為計(jì)算核心204,其包括譯碼系統(tǒng)200并可處理各種指令。不同型式的著色器程序可執(zhí)行或映射到計(jì)算核心204,例如頂點(diǎn)、幾何、像素著色器程序。多重事件(multi-issue)處理器的計(jì)算核心204可以在單一時(shí)脈周期內(nèi)處理多個(gè)指令。參考圖3,圖形處理器202的相關(guān)元件包括計(jì)算核心204、紋理過濾(filtering)單元302、像素包裝器(packer)304、命令流處理器306、寫回單元308、以及紋理地址產(chǎn)生器310。圖3亦包括執(zhí)行單元集合控制單元206,其中執(zhí)行單元集合控制單元206亦包括頂點(diǎn)快取存儲(chǔ)器和/或串流(stream)快取存儲(chǔ)器。舉例來說,如圖3所顯示,紋理過濾單元302提供紋素(texel)數(shù)據(jù)給計(jì)算核心204(輸入A以及輸入B)。在部分實(shí)施例中,紋素?cái)?shù)據(jù)為512位數(shù)據(jù)。像素包裝器304提供像素著色輸入給計(jì)算核心204(輸入C以及輸入D),像素著色輸入亦為512位數(shù)據(jù)格式。此外,像素包裝器304向執(zhí)行單元集合控制單元206請求像素著色任務(wù),而執(zhí)行單元集合控制單元206便會(huì)提供指定執(zhí)行單元號碼及執(zhí)行緒號碼給像素包裝器304。像素包裝器304及紋理過濾單元302為已知的技術(shù),因此將不再進(jìn)一步描述于此。雖然圖3所顯示的像素及紋素包為512位的數(shù)據(jù)包,但是依據(jù)圖形處理器202所需的效能特征,可在部分實(shí)施例中改變包的大小。命令流處理器306提供三角形頂點(diǎn)索引給執(zhí)行單元集合控制單元206。在圖3的實(shí)施例中,索引為256位的數(shù)據(jù)。執(zhí)行單元集合控制單元206組合來自串流快取存儲(chǔ)器的頂點(diǎn)著色輸入,并傳送數(shù)據(jù)至計(jì)算核心204(輸入E)。執(zhí)行單元集合控制單元206亦組合幾何著色輸入并傳送至計(jì)算核心204(輸入F)。執(zhí)行單元集合控制單元206亦控制執(zhí)行單元輸入402及執(zhí)行單元輸出404(圖4)。換句話說,執(zhí)行單元集合控制單元206控制各輸入流以及各輸出流至計(jì)算核心204。經(jīng)過處理之后,計(jì)算核心204提供像素著色輸出(輸出J1與輸出J2)至寫回單元308。像素著色輸出包括色彩信息,例如紅/綠/藍(lán)/透明度(RGBA)信息,其為本領(lǐng)域技術(shù)人員所熟知。像素著色輸出可以是兩條512位的數(shù)據(jù)流。其他實(shí)施例亦可使用其他的位寬度。相似于像素著色輸出,計(jì)算核心204亦輸出包括UVRQ信息的紋理坐標(biāo)(輸出K1以及輸出K2)至紋理地址產(chǎn)生器310。紋理地址產(chǎn)生器310發(fā)出紋理描述符號請求至計(jì)算核心204的L2快取存儲(chǔ)器408(輸入X),而計(jì)算核心204的L2快取存儲(chǔ)器408(輸出W)會(huì)輸出紋理描述符號數(shù)據(jù)至紋理地址產(chǎn)生器310。紋理地址產(chǎn)生器310及寫回單元308為已知的技術(shù),因此將不再進(jìn)一步描述于此。再者,雖然URVQ及RGBA是顯示為512位的數(shù)據(jù),但是此參數(shù)亦可隨不同實(shí)施例而改變。在圖3的實(shí)施例中,總線分成兩條512位通道,其中各通道保持四像素的128位RGBA色彩值及128位UVRQ紋理坐標(biāo)。圖形管線208包括固定功能的圖形處理功能?;貞?yīng)來自驅(qū)動(dòng)軟件128的命令,例如繪出三角形,則頂點(diǎn)信息通過計(jì)算核心204內(nèi)的頂點(diǎn)著色邏輯單元以實(shí)施頂點(diǎn)轉(zhuǎn)換。尤其是從物件空間轉(zhuǎn)換物件成為工作空間和/或屏幕空間的三角形。三角形通過計(jì)算核心204至圖形管線208的三角形設(shè)定單元,其中圖形管線208結(jié)合基元(primitive),并亦執(zhí)行已知的任務(wù),例如邊界盒(boundingbox)產(chǎn)生、揀選(culling)、邊緣功能產(chǎn)生(edgefunctiongeneration)以及三角形層級剔除(trianglelevelrejection)。三角形設(shè)定單元傳遞數(shù)據(jù)至圖形管線208中具有圖塊產(chǎn)生功能的柵格及圖塊產(chǎn)生單元。因此,數(shù)據(jù)物件被分割成圖塊(例如8×8、16×16等),并傳遞至其他的固定功能單元以執(zhí)行深度(例如z-值)處理,例如z-值的高階(例如在相似的程序下,高階使用的位數(shù)比低階少)剔除。然后,根據(jù)所接收的紋理及管線數(shù)據(jù),將z-值傳回至計(jì)算核心204的像素著色邏輯元件以作為像素著色功能的效能。計(jì)算核心204將已處理的值輸出至位于圖形管線208內(nèi)的目的單元。在不同快取存儲(chǔ)器需要更新內(nèi)部值之前,目的單元用以執(zhí)行α測試及模板測試。值得注意的是,計(jì)算核心204的L2快取存儲(chǔ)器408以及執(zhí)行單元集合控制單元206之間亦有512位的頂點(diǎn)快取存儲(chǔ)器溢出數(shù)據(jù)的傳輸。此外,從計(jì)算核心204輸出兩個(gè)512位頂點(diǎn)快取存儲(chǔ)器寫入數(shù)據(jù)(輸出M1及輸出M2)至執(zhí)行單元集合控制單元206做進(jìn)一步的處理。參考圖4,圖4系顯示計(jì)算核心204的附加元件以及相關(guān)元件。計(jì)算核心204包括執(zhí)行單元集合412。在一實(shí)施例中,執(zhí)行單元集合412包括一或多個(gè)執(zhí)行單元420a-420h(統(tǒng)稱為執(zhí)行單元420)。每一個(gè)執(zhí)行單元420可以在一個(gè)時(shí)脈周期內(nèi)處理多個(gè)指令。因此,執(zhí)行單元集合412在尖峰時(shí)可同時(shí)或是大體上同時(shí)處理多個(gè)執(zhí)行緒。雖然圖4顯示了8個(gè)執(zhí)行單元420(標(biāo)示為EU0-EU7),可以了解的是其并非用以限定執(zhí)行單元的數(shù)量為8,在部分實(shí)施例中可增加或是減少執(zhí)行單元的數(shù)量。至少一個(gè)執(zhí)行單元(例如執(zhí)行單元420a,EU0)包含譯碼系統(tǒng)200的一實(shí)施例,其將進(jìn)一步描述于后。計(jì)算核心204亦包括存儲(chǔ)器存取單元(memoryaccessunit,MXU)406,其中存儲(chǔ)器存取單元406經(jīng)由存儲(chǔ)器接口仲裁器410耦接于L2快取存儲(chǔ)器408。L2快取存儲(chǔ)器408從執(zhí)行單元集合控制單元206接收頂點(diǎn)快取存儲(chǔ)器溢出數(shù)據(jù)(輸入G),并提供頂點(diǎn)快取存儲(chǔ)器溢出數(shù)據(jù)(輸出H)給執(zhí)行單元集合控制單元206。此外,L2快取存儲(chǔ)器408從紋理地址產(chǎn)生器310接收紋理描述符號請求(輸入X),并對所接收到的請求提供紋理描述符號數(shù)據(jù)(輸出W)給紋理地址產(chǎn)生器310。存儲(chǔ)器接口仲裁器410對局部視頻存儲(chǔ)器提供控制接口(例如畫面緩沖器或是局部存儲(chǔ)器106)??偩€接口單元118對系統(tǒng)提供如PCI-E總線的接口。存儲(chǔ)器接口仲裁器410以及總線接口單元118提供了存儲(chǔ)器以及L2快取存儲(chǔ)器408之間的接口。在部分實(shí)施例中,L2快取存儲(chǔ)器408經(jīng)由存儲(chǔ)器存取單元406耦接至存儲(chǔ)器接口仲裁器410與總線接口單元118。存儲(chǔ)器存取單元406將從L2快取存儲(chǔ)器408以及其他區(qū)塊得到的虛擬存儲(chǔ)器地址轉(zhuǎn)換成實(shí)際存儲(chǔ)器地址。存儲(chǔ)器接口仲裁器410對L2快取存儲(chǔ)器408提供存儲(chǔ)器存取(例如讀出/寫入存取)、指令/常數(shù)/數(shù)據(jù)/紋理的提取、直接存儲(chǔ)器存取(例如載入/儲(chǔ)存)、暫存存取的索引、暫存器溢出以及頂點(diǎn)快取存儲(chǔ)器內(nèi)容溢出等。計(jì)算核心204更包括執(zhí)行單元輸入402以及執(zhí)行單元輸出404,并分別用于提供輸入給執(zhí)行單元集合412以及接收來自執(zhí)行單元集合412的輸出。執(zhí)行單元輸入402以及執(zhí)行單元輸出404可以是交叉開關(guān)(crossbar)或是其他總線,或是其他已知的輸入與輸出架構(gòu)。執(zhí)行單元輸入402接收來自于執(zhí)行單元集合控制單元206的頂點(diǎn)著色輸入(輸入E)以及幾何著色輸入(輸入F),并提供信息給執(zhí)行單元集合412以供各執(zhí)行單元420進(jìn)行處理。此外,執(zhí)行單元輸入402接收像素著色輸入(輸入C與輸入D)以及紋素包(輸入A與輸入B),并將這些包傳送至執(zhí)行單元集合412以供各執(zhí)行單元420進(jìn)行處理。再者,執(zhí)行單元輸入402從L2快取存儲(chǔ)器408接收信息(L2讀取),以及當(dāng)需要時(shí)將這些信息提供給執(zhí)行單元集合412。在圖4的實(shí)施例中,執(zhí)行單元輸出404被分配成偶輸出404a以及奇輸出404b。相似于執(zhí)行單元輸入402,執(zhí)行單元輸出404可以是交叉開關(guān)、總線或是其他已知的架構(gòu)。執(zhí)行單元偶輸出404a處理偶執(zhí)行單元420a、420c、420e以及420g的輸出,而執(zhí)行單元奇輸出404b處理奇執(zhí)行單元420b、420d、420f以及420h的輸出。執(zhí)行單元偶輸出404a以及執(zhí)行單元奇輸出404b共同地接收來自于執(zhí)行單元集合412的輸出,例如UVRQ以及RGBA。這些輸出可回傳至L2快取存儲(chǔ)器408、或是從計(jì)算核心204經(jīng)由輸出J1以及輸出J2輸出至寫回單元308,或是經(jīng)由輸出K1及輸出K2輸出至紋理地址產(chǎn)生器310。執(zhí)行單元集合412的執(zhí)行單元流程通常包括多個(gè)層級,其包括描繪內(nèi)容層級、執(zhí)行緒或任務(wù)層級,以及指令或執(zhí)行層級。在任一時(shí)間點(diǎn),各執(zhí)行單元420可準(zhǔn)許兩個(gè)描繪內(nèi)容,其中通過使用一位標(biāo)志或是其他機(jī)制來識別內(nèi)容。在屬于這個(gè)內(nèi)容的任務(wù)開始之前,從執(zhí)行單元集合控制單元206傳遞內(nèi)容信息。內(nèi)容層級信息可包括著色器種類、輸入/輸出暫存器的數(shù)量、指令起始地址、輸出映射表、頂點(diǎn)識別符以及各個(gè)常數(shù)緩沖器內(nèi)的常數(shù)。執(zhí)行單元集合412的各執(zhí)行單元420可同時(shí)儲(chǔ)存多個(gè)任務(wù)或執(zhí)行緒(例如在部分實(shí)施例中有32個(gè)執(zhí)行緒)。在一實(shí)施例中,各執(zhí)行緒系根據(jù)程序計(jì)數(shù)器來提取指令。執(zhí)行單元集合控制單元206可作為任務(wù)的總排程,并利用數(shù)據(jù)驅(qū)動(dòng)(data-driven)方法(例如在輸入內(nèi)的頂點(diǎn)、像素以及幾何包)來指派執(zhí)行單元420內(nèi)的適當(dāng)執(zhí)行緒。舉例來說,執(zhí)行單元集合控制單元206指派一執(zhí)行緒給執(zhí)行單元集合412的各執(zhí)行單元420內(nèi)的一空執(zhí)行緒槽(slot)。當(dāng)開始執(zhí)行執(zhí)行緒之后,由頂點(diǎn)快取存儲(chǔ)器、其他元件或是模塊(根據(jù)著色器種類)所提供的數(shù)據(jù)將放置在通用暫存緩沖器中。通常,圖形處理器202系使用可編程頂點(diǎn)、幾何以及像素緩沖器。不把這些元件當(dāng)成具有不同設(shè)計(jì)以及指令集的各個(gè)固定功能單元而實(shí)施這些元件的功能或是操作,而是通過具有統(tǒng)一指令集的執(zhí)行單元420a、420b...420n的集合來執(zhí)行這些操作。除了執(zhí)行單元420a(其包括譯碼系統(tǒng)200,因此具有額外的功能)之外,各執(zhí)行單元420的設(shè)計(jì)相同并且用于編程操作。在一實(shí)施例中,各執(zhí)行單元420可同時(shí)地進(jìn)行多執(zhí)行緒操作。當(dāng)頂點(diǎn)著色器、幾何著色器以及像素著色器產(chǎn)生不同的著色任務(wù)時(shí),這些著色任務(wù)將傳送至各自的執(zhí)行單元420去執(zhí)行。在使用頂點(diǎn)著色器的一實(shí)施例中,譯碼系統(tǒng)200可以被實(shí)施,其具有部分修改和/或與其他執(zhí)行單元420有差別。舉例來說,包含譯碼系統(tǒng)200的執(zhí)行單元(例如執(zhí)行單元420a)與其他執(zhí)行單元(例如執(zhí)行單元420b)之間的差異是執(zhí)行單元420a使用一譯碼系統(tǒng)200。而其他執(zhí)行單元與執(zhí)行單元420a不同的地方是在于一或多個(gè)對應(yīng)的內(nèi)部緩沖器中譯碼系統(tǒng)200安排。譯碼系統(tǒng)200的數(shù)據(jù)系通過連接413以及執(zhí)行單元輸入402從存儲(chǔ)器存取單元406所接收。當(dāng)各個(gè)任務(wù)產(chǎn)生時(shí),執(zhí)行單元集合控制單元206會(huì)指派這些任務(wù)給不同執(zhí)行單元420中可使用的執(zhí)行緒。當(dāng)任務(wù)完成時(shí),執(zhí)行單元集合控制單元206進(jìn)一步管理相關(guān)執(zhí)行緒的釋放。就這點(diǎn)而言,執(zhí)行單元集合控制單元206指派頂點(diǎn)著色器、幾何著色器以及像素著色器的任務(wù)給不同執(zhí)行單元420的執(zhí)行緒,并記錄相關(guān)的任務(wù)以及執(zhí)行緒。具體地,執(zhí)行單元集合控制單元206會(huì)維持全部執(zhí)行單元420的執(zhí)行緒以及存儲(chǔ)器的資源表(未顯示)。執(zhí)行單元集合控制單元206會(huì)明確知道哪一個(gè)執(zhí)行緒被指派給任務(wù)并使用、當(dāng)執(zhí)行緒結(jié)束后哪一個(gè)執(zhí)行緒會(huì)被釋放、多少共用暫存器文件存儲(chǔ)器暫存器(registerfilememoryregister)在使用中,以及每一個(gè)執(zhí)行單元有多少閑置空間可使用。因此,當(dāng)指派任務(wù)給執(zhí)行單元(例如執(zhí)行單元420a)時(shí),執(zhí)行單元集合控制單元206將標(biāo)示此執(zhí)行緒為忙碌,并將全部可使用的共用暫存器文件存儲(chǔ)器減去各執(zhí)行緒所占用的暫存器文件覆蓋區(qū)(footprint)的數(shù)量。覆蓋區(qū)是由頂點(diǎn)著色器、幾何著色器及像素著色器的狀態(tài)而設(shè)定或決定。再者,各著色器狀態(tài)可以有不同的覆蓋區(qū)大小。例如,頂點(diǎn)著色器執(zhí)行緒可以要求10個(gè)共用暫存器文件暫存器,而像素著色器執(zhí)行緒可以僅要求5個(gè)共用暫存器文件暫存器。當(dāng)執(zhí)行緒完成其被指派的工作時(shí),執(zhí)行該執(zhí)行緒的執(zhí)行單元420會(huì)發(fā)出信號給執(zhí)行單元集合控制單元206。接著,執(zhí)行單元集合控制單元206會(huì)更新資源表以標(biāo)注該執(zhí)行緒未使用,并將全部執(zhí)行緒共用暫存器文件空間的數(shù)量加回至可用空間。當(dāng)所有的執(zhí)行緒都是忙碌或是所有的共用暫存器文件存儲(chǔ)器都被分配時(shí)(或是剩下的暫存器空間太小而無法容納額外的執(zhí)行緒時(shí)),執(zhí)行單元420被視為已全滿,以及執(zhí)行單元集合控制單元206將不會(huì)指派任何額外或是新的執(zhí)行緒給該執(zhí)行單元。在各執(zhí)行單元420內(nèi)部亦有一個(gè)執(zhí)行緒控制器以負(fù)責(zé)管理或標(biāo)示各執(zhí)行緒為使用中(例如執(zhí)行中)或是可使用。就這點(diǎn)而言,至少在一實(shí)施例中,當(dāng)頂點(diǎn)著色器正在執(zhí)行譯碼系統(tǒng)200的功能時(shí),執(zhí)行單元集合控制單元206可以避免幾何著色器以及像素著色器在同一時(shí)間被執(zhí)行。圖5A系顯示具有前述圖形處理器202以及計(jì)算核心204特征的執(zhí)行單元420a,其包括內(nèi)嵌譯碼系統(tǒng)200的執(zhí)行單元數(shù)據(jù)路徑512。具體來說,圖5A是執(zhí)行單元420a的方塊圖。在一實(shí)施例中,執(zhí)行單元420a包括指令快取存儲(chǔ)器控制器504、耦接于指令快取存儲(chǔ)器控制器504的執(zhí)行緒控制器506、緩沖器508(例如常數(shù)緩沖器)、共用暫存器文件(commonregisterfile,CRF)510、耦接于執(zhí)行緒控制器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以及執(zhí)行緒任務(wù)接口524。如前所述,執(zhí)行單元420從執(zhí)行單元輸入402接收輸入,并提供輸出給執(zhí)行單元輸出404。執(zhí)行緒控制器506提供執(zhí)行單元420a的控制功能,其包括管理各執(zhí)行緒的功能以及判斷功能,例如決定如何執(zhí)行執(zhí)行緒。執(zhí)行單元數(shù)據(jù)路徑512包括譯碼系統(tǒng)200,將進(jìn)一步描述于后,其通常包括執(zhí)行不同計(jì)算的功能,并包含像是浮點(diǎn)以及整數(shù)計(jì)算邏輯單元(arithmeticlogicunit,ALU)、移位邏輯功能等的邏輯電路。數(shù)據(jù)輸出控制器520將已完成的數(shù)據(jù)移至耦接于執(zhí)行單元輸出404的某些元件,例如執(zhí)行單元集合控制單元206的頂點(diǎn)快取存儲(chǔ)器、寫回單元308等。執(zhí)行單元數(shù)據(jù)路徑512傳送“任務(wù)結(jié)束”的信息給數(shù)據(jù)輸出控制器520,并告知任務(wù)已完成。數(shù)據(jù)輸出控制器520包含儲(chǔ)存器以儲(chǔ)存完成的任務(wù)(例如32項(xiàng)目(entry))以及多個(gè)寫入端口。數(shù)據(jù)輸出控制器520從儲(chǔ)存器選擇任務(wù),并通過著色描繪內(nèi)容所指定的暫存器位置,從共用暫存器文件510讀取所有的輸出數(shù)據(jù)項(xiàng)目,并將數(shù)據(jù)發(fā)送至執(zhí)行單元輸出404。執(zhí)行緒任務(wù)接口524送出執(zhí)行單元420a完成的任務(wù)識別符給執(zhí)行單元集合控制單元206。任務(wù)識別符會(huì)通知執(zhí)行單元集合控制單元206以指派新任務(wù)給一特定執(zhí)行單元(例如執(zhí)行單元420a)。在一實(shí)施例中,緩沖器508可分成16個(gè)區(qū)塊,其中各區(qū)塊有16槽,而每一槽有128位的水平向量常數(shù)。著色器使用運(yùn)算元以及索引以存取常數(shù)緩沖器槽。舉例來說,索引可以是包括32位不具正負(fù)號的整數(shù)或是接近32位不具正負(fù)號的常數(shù)的暫時(shí)暫存器。指令快取存儲(chǔ)器控制器504是到執(zhí)行緒控制器506的接口區(qū)塊。當(dāng)執(zhí)行緒控制器讀取請求存在時(shí)(例如從指令存儲(chǔ)器提取可執(zhí)行著色器碼),指令快取存儲(chǔ)器控制器504較佳地通過查找標(biāo)簽表(未顯示)以執(zhí)行命中/未命中(hit/miss)測試。舉例來說,當(dāng)請求的指令是位于指令快取存儲(chǔ)器控制器504的快取存儲(chǔ)器中時(shí),則命中發(fā)生。當(dāng)所請求的指令將從L2快取存儲(chǔ)器408或是存儲(chǔ)器106中提取時(shí),則未命中發(fā)生。當(dāng)命中發(fā)生時(shí),如果沒有來自執(zhí)行單元輸入402的請求,則指令快取存儲(chǔ)器控制器504即可同意請求,這是因?yàn)橹噶羁烊〈鎯?chǔ)器控制器504的指令快取存儲(chǔ)器只有一個(gè)讀寫端口,而執(zhí)行單元輸入402具有最高的優(yōu)先權(quán)。否則,如果未命中發(fā)生時(shí),當(dāng)快取存儲(chǔ)器408內(nèi)有可取代的區(qū)塊以及有空間存在于暫停請求的執(zhí)行單元數(shù)據(jù)路徑先進(jìn)先出緩沖器514中,指令快取存儲(chǔ)器控制器504可同意請求。在一實(shí)施例中,指令快取存儲(chǔ)器控制器504的快取存儲(chǔ)器具有32組,其中每一組有4個(gè)區(qū)塊。各區(qū)塊帶有2位狀態(tài)信號以指示三種狀態(tài),其分別是無效、載入、或是有效狀態(tài)。在區(qū)塊載入L2數(shù)據(jù)之前,區(qū)塊為“無效”狀態(tài);當(dāng)?shù)群騆2數(shù)據(jù)時(shí),區(qū)塊變?yōu)椤拜d入”狀態(tài);以及當(dāng)L2數(shù)據(jù)載入后,區(qū)塊變?yōu)椤坝行А睜顟B(tài)。經(jīng)由執(zhí)行單元數(shù)據(jù)路徑512可對述詞暫存器文件516進(jìn)行讀寫。執(zhí)行單元輸入402作為進(jìn)入數(shù)據(jù)與執(zhí)行單元420a的接口。在一實(shí)施例中,執(zhí)行單元輸入402包含一個(gè)8項(xiàng)目先進(jìn)先出緩沖器以緩沖進(jìn)入數(shù)據(jù)。執(zhí)行單元輸入402亦可傳送數(shù)據(jù)至指令快取存儲(chǔ)器控制器504的指令快取存儲(chǔ)器以及常數(shù)緩沖器508。執(zhí)行單元輸入402亦維持著色器內(nèi)容。執(zhí)行單元輸出404作為從執(zhí)行單元420a送出數(shù)據(jù)至執(zhí)行單元集合控制單元206、L2快取存儲(chǔ)器408、以及寫回單元308的接口。在一實(shí)施例中,執(zhí)行單元輸出404包含一個(gè)4項(xiàng)目先進(jìn)先出緩沖器,用以接收仲裁的請求,并緩沖執(zhí)行單元集合控制單元206的數(shù)據(jù)。執(zhí)行單元輸出404包含多種功能,其包括仲裁指令快取存儲(chǔ)器讀取請求、數(shù)據(jù)輸出寫入請求以及執(zhí)行單元數(shù)據(jù)路徑讀出/寫入請求的功能。共用暫存器文件510用于儲(chǔ)存輸入、輸出、以及暫存數(shù)據(jù)。在一實(shí)施例中,共用暫存器文件510包括具有128×128位暫存器文件的一讀一寫端口和一讀寫端口的八個(gè)存儲(chǔ)庫(bank)。一讀一寫端口是由執(zhí)行單元數(shù)據(jù)路徑512所使用,以供由指令執(zhí)行所初始的讀出以及寫入存取。存儲(chǔ)庫0、2、4以及6系由偶數(shù)執(zhí)行緒所共用,而存儲(chǔ)庫1、3、5以及7系由奇數(shù)執(zhí)行緒所共用。執(zhí)行緒控制器506比對不同執(zhí)行緒的指令,并確認(rèn)共用暫存器文件的存儲(chǔ)器沒有讀出或?qū)懭氪鎯?chǔ)庫的沖突。一讀寫端口是由執(zhí)行單元輸入402以及數(shù)據(jù)輸出控制器520所使用,用以載入初始執(zhí)行緒輸入數(shù)據(jù)并將最后執(zhí)行緒輸出寫至執(zhí)行單元集合控制單元數(shù)據(jù)緩沖器及L2快取存儲(chǔ)器408或是其他模塊。執(zhí)行單元輸入402以及執(zhí)行單元輸出404共用一個(gè)讀寫輸入/輸出端口,以及在一實(shí)施例中,寫入比讀出具有較高的優(yōu)先權(quán)。512位的輸入數(shù)據(jù)進(jìn)入四個(gè)不同的存儲(chǔ)庫以避免將數(shù)據(jù)載入至共用暫存器文件510時(shí)會(huì)發(fā)生沖突。傳送2位通道索引、數(shù)據(jù)以及512位對齊基準(zhǔn)地址(alignedbaseaddress)以指定輸入數(shù)據(jù)的開始存儲(chǔ)庫。舉例來說,當(dāng)開始通道索引為1時(shí),假設(shè)執(zhí)行緒基準(zhǔn)存儲(chǔ)庫偏移量(offset)為0,則從最低有效位(lestsignificantbit,LSB)起算的第一個(gè)128位被載入至存儲(chǔ)庫1,下一個(gè)128位被載入至存儲(chǔ)庫2...等,以及最后一個(gè)128位被載入至存儲(chǔ)庫0。值得注意的是,使用執(zhí)行緒ID的兩個(gè)最低有效位來產(chǎn)生存儲(chǔ)庫偏移量,以隨機(jī)排列每一個(gè)執(zhí)行緒的開始存儲(chǔ)庫位置??墒褂霉灿脮捍嫫魑募捍嫫魉饕约皥?zhí)行緒ID以建立唯一的邏輯地址,使標(biāo)簽?zāi)鼙葘灿脮捍嫫魑募?10所寫入以及讀出的數(shù)據(jù)。舉例來說,地址可以排成128位,即共用暫存器文件存儲(chǔ)庫的寬度。通過結(jié)合8位的共用暫存器文件暫存器索引以及5位的執(zhí)行緒ID,可以建立13位的地址以產(chǎn)生唯一的地址。每一個(gè)1024位線具有一標(biāo)簽,以及每一位線有兩個(gè)512位項(xiàng)目(字元)。各字元儲(chǔ)存于4個(gè)存儲(chǔ)庫中,以及將共用暫存器文件索引的兩個(gè)最低有效位加入至目前執(zhí)行緒的存儲(chǔ)庫偏移量以建立存儲(chǔ)庫選擇。標(biāo)簽比對方法可讓不同執(zhí)行緒的暫存器共同使用共用暫存器文件510以有效利用存儲(chǔ)器,因?yàn)閳?zhí)行單元集合控制單元206記錄共用暫存器文件510的存儲(chǔ)器使用程度,并確保對執(zhí)行單元420a的新任務(wù)進(jìn)行排程之前有足夠的空間。對照于目前執(zhí)行緒的全部共用暫存器文件暫存器的大小以檢查目標(biāo)共用暫存器文件索引。在執(zhí)行緒控制器506著手進(jìn)行執(zhí)行緒以及著色器執(zhí)行開始之前,輸入數(shù)據(jù)就被預(yù)期存放在共用暫存器文件510內(nèi)。當(dāng)執(zhí)行緒執(zhí)行結(jié)束后,通過數(shù)據(jù)輸出控制器520從共用暫存器文件510讀取輸出數(shù)據(jù)。前述執(zhí)行單元420的實(shí)施例包括內(nèi)含譯碼系統(tǒng)200的實(shí)施例的執(zhí)行單元數(shù)據(jù)路徑512,圖5B系顯示執(zhí)行單元數(shù)據(jù)路徑512的一實(shí)施例。執(zhí)行單元數(shù)據(jù)路徑512包含暫存器文件526、多工器528、向量浮點(diǎn)單元532、向量整數(shù)計(jì)算邏輯單元534、特殊目的單元536、多工器538、暫存器文件540,以及譯碼系統(tǒng)200。譯碼系統(tǒng)200包含一或多個(gè)可變長度譯碼(variablelengthdecoding,VLD)單元530,其可以譯碼一或多個(gè)串流。例如,單一可變長度譯碼單元530可以譯碼單一串流,兩個(gè)可變長度譯碼單元530(如虛線所顯示,因簡潔之故而未顯示其連接關(guān)系)可以同時(shí)譯碼兩個(gè)串流等等。為了說明,之后的敘述僅針對使用單一可變長度譯碼單元530的譯碼系統(tǒng)200的操作,可以了解的是其原則可推衍至超過一個(gè)可變長度譯碼單元。如圖所示,執(zhí)行單元數(shù)據(jù)路徑512包含對應(yīng)于可變長度譯碼單元530、向量浮點(diǎn)單元532、向量整數(shù)計(jì)算邏輯單元534以及特殊目的單元536的一些平行數(shù)據(jù)路徑,其根據(jù)所接收到的指令執(zhí)行對應(yīng)的操作。暫存器文件526接收運(yùn)算元(標(biāo)示為SRC1與SRC2)。在一實(shí)施例中,暫存器文件526可對應(yīng)于圖5A所顯示的共用暫存器文件510、述詞暫存器文件516,和/或純量暫存器文件518。值得注意的是在某些實(shí)施例中,可使用額外的運(yùn)算元。操作(功能)信號線542提供各單元530-536接收運(yùn)算信號的媒介(medium)。當(dāng)前信號線544耦接至多工器528,傳送編碼成指令的當(dāng)前值以供各單元530-536完成小整數(shù)值的整數(shù)運(yùn)算。指令譯碼器(未顯示)提供運(yùn)算元、運(yùn)算(功能)信號以及當(dāng)前信號。數(shù)據(jù)路徑(可包含寫回階段)末端的多工器538選擇已被選擇的正確數(shù)據(jù)路徑的輸出結(jié)果并提供輸出給暫存器文件540。輸出暫存器文件540包括目標(biāo)元件,其可以是相同于暫存器文件526或是不同暫存器的元件。值得注意的是在實(shí)施例中,當(dāng)來源以及目標(biāo)暫存器包含相同元件時(shí),指令提供的位具有由多共器所使用的來源與目標(biāo)選擇以多路傳輸數(shù)據(jù)至/來自適當(dāng)暫存器文件。因此,執(zhí)行單元420a可視為多階管線(例如4階管線,具有4個(gè)計(jì)算邏輯單元),并在4個(gè)執(zhí)行階段中發(fā)生譯碼操作。需要實(shí)施延遲以允許執(zhí)行譯碼執(zhí)行緒。舉例來說,當(dāng)位流緩沖器發(fā)生向下溢位(underflow)、等候初始內(nèi)容存儲(chǔ)器、等候?qū)⑽涣鬏d入至先進(jìn)先出緩沖器以及SREG暫存器(解釋于后),和/或處理時(shí)間已超過時(shí)間的既定定限(threshold)時(shí),可以在執(zhí)行階段加入延遲。如前所述,在部分實(shí)施例中,譯碼系統(tǒng)200能使用單一執(zhí)行單元420a同時(shí)譯碼兩個(gè)位流。舉例來說,根據(jù)一個(gè)擴(kuò)充指令集,譯碼系統(tǒng)可以使用兩個(gè)數(shù)據(jù)路徑(例如新增另一可變長度譯碼單元530)以同時(shí)進(jìn)行兩個(gè)串流的譯碼,然而可一次譯碼較多或較少的串流(因此會(huì)使用較多或較少的數(shù)據(jù)路徑)。當(dāng)需要多個(gè)串流時(shí),譯碼系統(tǒng)200的部分實(shí)施例并未限定于同時(shí)譯碼。再者,在部分實(shí)施例中,單一可變長度譯碼單元530可以執(zhí)行串流的多個(gè)同時(shí)發(fā)生的譯碼。在實(shí)施例中,當(dāng)譯碼系統(tǒng)200使用兩個(gè)數(shù)據(jù)路徑時(shí),兩個(gè)執(zhí)行緒可以同時(shí)運(yùn)行。例如,在兩串流譯碼的實(shí)施例中,執(zhí)行緒的數(shù)量限制為兩個(gè),其中指派第一執(zhí)行緒(例如執(zhí)行緒0)給譯碼系統(tǒng)200的第一存儲(chǔ)庫(即可變長度譯碼單元530),而指派第二執(zhí)行緒(例如執(zhí)行緒1)給譯碼系統(tǒng)200的第二存儲(chǔ)庫(例如圖5B虛線所顯示的可變長度譯碼單元)。在部分實(shí)施例中,兩個(gè)或多個(gè)執(zhí)行緒可運(yùn)作在單一存儲(chǔ)庫。在部分實(shí)施例中,雖然顯示譯碼系統(tǒng)200是內(nèi)嵌于執(zhí)行單元數(shù)據(jù)路徑512內(nèi),其亦可包含其他的元件,例如執(zhí)行單元集合控制單元206內(nèi)的邏輯電路。在下面的描述中,可變長度譯碼單元530以及譯碼系統(tǒng)200可交換使用,而可以了解到譯碼系統(tǒng)200可包括一或多個(gè)可變長度譯碼單元530。將描述位于譯碼系統(tǒng)200下的結(jié)構(gòu),而各單獨(dú)譯碼系統(tǒng)模式描述如下。特別地,在一實(shí)施例中,由驅(qū)動(dòng)軟件128所提出的下列指令可設(shè)定不同模式。進(jìn)一步描述如下指令I(lǐng)NIT_CTX(設(shè)置譯碼系統(tǒng)200為CABAC處理模式)、指令I(lǐng)NIT_CAVLC(設(shè)置譯碼系統(tǒng)200為CAVLC處理模式)、指令I(lǐng)NIT_MPEG2(設(shè)置譯碼系統(tǒng)200為MPEG-2處理模式),以及指令I(lǐng)NIT_VC1(設(shè)置譯碼系統(tǒng)200為VC-1/WMV9處理模式)。在部分實(shí)施例中,經(jīng)由指令I(lǐng)NIT_AVS可提供額外的初始化,其可初始化音頻視頻標(biāo)準(zhǔn)(audiovideostandard,AVS)位流編碼。對EXP-Golomb系統(tǒng)而言,在CABAC以及CAVLC編碼下使用EXP-Golomb編碼符號,因此指令I(lǐng)NIT_CTX以及指令I(lǐng)NIT_CAVLC下載EXP-Golomb系統(tǒng)的位流。其中,不需要對EXP-Golomb系統(tǒng)進(jìn)行初始。舉例來說,對要被編碼的符號而言,在位流(例如在片段標(biāo)頭電平的位設(shè)定)所接收的計(jì)算編碼標(biāo)志會(huì)顯示符號為EXP-Golomb編碼、CABAC編碼以及CAVLC編碼。當(dāng)使用EXP-Golomb編碼時(shí),執(zhí)行下列所提出的適當(dāng)?shù)腅XP-Golomb編碼指令。雖然這些模式會(huì)影響編碼引擎的實(shí)施,其亦會(huì)影響初始、使用以及更新存儲(chǔ)器的方法,進(jìn)一步描述于后。參考圖5C,圖5C系顯示可變長度譯碼單元530的功能方塊圖,用以根據(jù)所選擇的模式完成任何多個(gè)譯碼操作的一。可變長度譯碼單元530包括可變長度譯碼邏輯電路550,其中可變長度譯碼邏輯電路550耦接于由SREG串流緩沖器/DMA引擎562(于此亦稱為DMA引擎模塊)所組成的位流緩沖器管理以及鄰近內(nèi)容存儲(chǔ)器(neighborhoodcontextmemory,NCM)564(亦稱為內(nèi)容存儲(chǔ)器)??勺冮L度譯碼單元530亦包括一或多個(gè)暫存器566,其包括用以儲(chǔ)存來自執(zhí)行單元420(“CONTROL”,例如使用來自執(zhí)行單元的譯碼器的控制信號以選擇可變長度譯碼邏輯電路550的模塊)有關(guān)給定模式的選擇的譯碼數(shù)據(jù)的暫存器、運(yùn)算元(例如“SRC1”以及“SRC2”),以及轉(zhuǎn)發(fā)暫存器(例如“F1”以及“F2”)。SREG串流緩沖器/DMA引擎562包括SREG暫存器562a以及位流緩沖器562b,將進(jìn)一步解釋于后。在一實(shí)施例中,可變長度譯碼邏輯電路550包括圖5C所顯示的模塊(亦稱為邏輯電路)。可變長度譯碼邏輯電路550包括硬件,其包括暫存器和/或布林或是計(jì)算邏輯電路,用以執(zhí)行指令并根據(jù)所選擇的模式執(zhí)行譯碼。進(jìn)一步解釋,可變長度譯碼邏輯電路550包括讀取鄰近內(nèi)容存儲(chǔ)器模塊(read_NCM)568、檢查字串(INPSTR)模塊570、讀取模塊572、計(jì)算前導(dǎo)1(CLO)模塊574、計(jì)算前導(dǎo)0(CLZ)模塊576、MPEG模塊578、CABAC模塊580、CAVLC模塊582,以及耦接于計(jì)算前導(dǎo)0(CLZ)模塊576的Exp-Golomb模塊584。計(jì)算前導(dǎo)0(CLZ)模塊576以及計(jì)算前導(dǎo)1(CLO)模塊574包括可譯碼MPEG-2以及VC-1位流的指令。關(guān)于Exp-Golomb模塊584,Exp-Golomb符號由跟在1之后的一些前導(dǎo)零所編碼,接著一些位會(huì)等于零的數(shù)量。計(jì)算前導(dǎo)0(CLZ)模塊576偵測前導(dǎo)零的數(shù)量,接著移動(dòng)這些位加上1以記錄前導(dǎo)零的數(shù)量。Exp-Golomb模塊584讀取尾隨位(trailingbit)的數(shù)量,并根據(jù)Exp-Golomb模式而執(zhí)行計(jì)算以判斷值。讀取鄰近內(nèi)容存儲(chǔ)器模塊568包括對應(yīng)于產(chǎn)生地址以及請求存儲(chǔ)器讀取操作的邏輯電路。在存儲(chǔ)器讀取操作中,從鄰近內(nèi)容存儲(chǔ)器564讀取固定的位數(shù)并輸出數(shù)據(jù)至目標(biāo)暫存器。鄰近內(nèi)容存儲(chǔ)器指令為從內(nèi)容存儲(chǔ)器564讀取32位的數(shù)據(jù)并經(jīng)由多工器685傳回所讀取的值給執(zhí)行單元420a的目標(biāo)暫存器。CABAC以及CAVLC編碼沒有使用到鄰近內(nèi)容存儲(chǔ)器指令,然而對其他可變長度譯碼運(yùn)算而言(例如VC-1、MPEG-4ASP(DivX)),可使用內(nèi)容存儲(chǔ)器564以維持可變長度譯碼表,以及可使用讀取鄰近內(nèi)容存儲(chǔ)器模塊以讀取可變長度譯碼表內(nèi)的值。讀取模塊572包含邏輯電路以讀取SREG暫存器562a,且從SREG暫存器562a的最高有效位(mostsignificantbit,MSB)部分?jǐn)X取特定位數(shù),零延伸(zeroextend),并將值放入暫存器內(nèi)。因此,讀取模塊572包含邏輯電路以執(zhí)行讀取操作,其讀取特定位數(shù)并從SREG暫存器562a移除以傳回不具正負(fù)號數(shù)值的值給目標(biāo)暫存器。檢查字串模塊570從SREG暫存器562a讀取固定位數(shù),但沒有從SREG暫存器562a移除任何位(例如不改變指標(biāo)位置),并傳回不具正負(fù)號數(shù)值的值給目標(biāo)暫存器。各模塊568-584皆耦接至多工器586,其中多工器586根據(jù)各自的命令而選擇一模式。在一實(shí)施例中,多工器586的輸出提供至目標(biāo)暫存器以進(jìn)一步處理。模塊569-582的輸出亦提供至多工器586,其對應(yīng)于一命令,選擇模塊569-582的輸出并提供至SREG暫存器562a以作為輸入。在各個(gè)相同的運(yùn)算期間,提供來自轉(zhuǎn)發(fā)、控制以及運(yùn)算暫存器566的數(shù)據(jù)給CABAC模塊580以及CAVLC模塊582使用。經(jīng)由接收控制信號(標(biāo)示為圖5C的EXP_GOLOMB_OP)以致能Exp-Golomb模塊584。Exp-Golomb模塊584接收來自計(jì)算前導(dǎo)0(CLZ)模塊576的輸入并提供輸出至多工器586。CABAC模塊580以及CAVLC模塊582可使用內(nèi)容存儲(chǔ)器564。對除了CABAC以及CAVLC模式之外的全部模式而言,讀取指令為從SREG暫存器562a讀取n位,并經(jīng)由多工器586傳回所讀取的值至執(zhí)行單元420a的目標(biāo)暫存器。對除了CABAC以及CAVLC模式的模式而言,使用內(nèi)容存儲(chǔ)器564以維持上方以及左方的內(nèi)容值,其為自動(dòng)讀取以作為譯碼程序的部分。這些元件以及可變長度譯碼單元530的其他元件將結(jié)合不同模式而進(jìn)一步描述于后。值的注意的是在部分實(shí)施例中,可變長度譯碼邏輯電路550可包括少于(或多于)全部所顯示的模塊和/或多工器。將描述可變長度譯碼單元530的一般功能,而可變長度譯碼單元530配置在不同模式下的操作將進(jìn)一步描述于后。CABAC譯碼下面簡單解釋CABAC譯碼,然后說明譯碼系統(tǒng)200的一些實(shí)施例。通常,H.264標(biāo)準(zhǔn)的CABAC譯碼程序可以說明為包括解析第一語法成分的已編碼位流、初始化一片段的內(nèi)容變量以及第一語法成分的譯碼引擎,以及二進(jìn)制化(binarization)。接著,對每一個(gè)二進(jìn)制值(bin)進(jìn)行譯碼,其程序包括獲得內(nèi)容模塊以及各語法成分的二進(jìn)制值的譯碼,直到獲得有意義的字碼(codeword)比對。更進(jìn)一步解釋,譯碼系統(tǒng)200對語法成分進(jìn)行譯碼,其中每一語法成分可以代表量子化系數(shù)、動(dòng)作向量、和/或預(yù)測模式、或其他有關(guān)宏區(qū)塊(macroblock)的參數(shù),用以表示影像或是視頻的特定圖場(field)或是幀(frame)。每一個(gè)語法成分可以包含連續(xù)的一或多個(gè)二進(jìn)制符號或是二進(jìn)制值,而每一個(gè)二進(jìn)制符號會(huì)被譯碼成0或1值。譯碼系統(tǒng)200根據(jù)輸入二進(jìn)制符號的發(fā)生機(jī)率控制輸出位長度。當(dāng)某些符號(稱為主要符號)比其他符號更可能發(fā)生,CABAC編碼器可提供高效率編碼方法。這些主要符號可用較小位/符號比例來進(jìn)行編碼。編碼器持續(xù)更新進(jìn)入數(shù)據(jù)的頻率統(tǒng)計(jì),并適當(dāng)?shù)卣{(diào)整編碼演算的計(jì)算以及內(nèi)容模型。具有較高可能性的二進(jìn)制符號稱為高可能性符號(mostprobablesymbol,MPS),而其他符號則為低可能性符號(leastprobablesymbol,LPS)。二進(jìn)制符號與其內(nèi)容模型結(jié)合,具有對應(yīng)于低可能性符號的可能性以及高可能性符號值的各內(nèi)容模型。為了對各二進(jìn)制符號進(jìn)行譯碼,譯碼系統(tǒng)200決定或是接收一對應(yīng)范圍、偏移量以及內(nèi)容模型。內(nèi)容模型是根據(jù)符號種類以及由鄰近空間(例如目前宏區(qū)塊或是屬于前次譯碼的相鄰宏區(qū)塊)所決定的內(nèi)容而從多個(gè)個(gè)可能的內(nèi)容模型中所選擇??捎蓛?nèi)容模型決定內(nèi)容辨識符號,從而并使用以得到高可能性符號值以及用于譯碼程序的譯碼引擎的目前狀態(tài)。范圍表示一個(gè)區(qū)間(interval),每經(jīng)過一次二進(jìn)制譯碼就會(huì)縮小一次范圍。區(qū)間分為兩個(gè)子范圍,分別對應(yīng)于高可能性符號值以及低可能性符號值。通過將范圍以及已知內(nèi)容模型所指定的低可能性符號可能性相乘則可計(jì)算出低可能性符號子范圍。通過將范圍減去低可能性符號子范圍可計(jì)算出高可能性符號子范圍。偏移量是決定譯碼二進(jìn)制值的標(biāo)準(zhǔn),且通常是從編碼位流中取出前9位進(jìn)行初始化。對于已知二進(jìn)制符號譯碼及內(nèi)容模型,當(dāng)偏移量小于高可能性符號子范圍時(shí),二進(jìn)制值為高可能性符號值,而下一次譯碼所使用的范圍會(huì)設(shè)為高可能性符號子范圍。反之,二進(jìn)制值由低可能性符號決定、高可能性符號值的反向值會(huì)包含在相關(guān)的內(nèi)容模型中,以及下一個(gè)范圍會(huì)設(shè)為低可能性符號子范圍。譯碼程序的結(jié)果為連續(xù)的已譯碼二進(jìn)制值,其被評估以判斷此序列是否符合有意義的字碼。概括敘述譯碼系統(tǒng)200的操作與CABAC譯碼的關(guān)系,下列敘述提出在CABAC譯碼程序的內(nèi)容中譯碼系統(tǒng)200的各種元件,可將符合實(shí)際應(yīng)用的各種變動(dòng)列入考慮。本領(lǐng)域技術(shù)人員可知下列所使用的許多術(shù)語是出自H.264規(guī)格,為了簡潔不再贅述,除非是有助于了解所述的不同程序和/或元件,才會(huì)再做進(jìn)一步的說明。圖6A至圖6F系顯示譯碼系統(tǒng)200及相關(guān)元件的具體實(shí)施例的方塊圖。如圖所顯示,譯碼系統(tǒng)200具有單一CABAC單元530(在圖6A至第6F圖,所使用的CABAC單元530可與譯碼系統(tǒng)200互換),因此在實(shí)施例中,譯碼系統(tǒng)200可譯碼單一位流。同樣的原理可應(yīng)用至具有額外可變長度譯碼單元的譯碼系統(tǒng)200,可同時(shí)譯碼多個(gè)(例如兩個(gè))串流。簡單地說,圖6A系顯示譯碼系統(tǒng)200的選擇元件的方塊圖,而圖6B系顯示圖6A所顯示的選擇元件加上其他元件的功能方塊圖。圖6C以及圖6E系顯示譯碼系統(tǒng)200的內(nèi)容存儲(chǔ)器功能的方塊圖;以及圖6D系顯示使用于譯碼宏區(qū)塊的示范機(jī)制的方塊圖。雖然下列敘述是有關(guān)宏區(qū)塊譯碼的內(nèi)容,但是本發(fā)明所提出的原理可應(yīng)用到各種區(qū)塊譯碼。參考圖6A,可變長度譯碼單元530a包括CABAC邏輯模塊580以及存儲(chǔ)器模塊650。在一實(shí)施例中,CABAC邏輯模塊580包含三個(gè)模塊,其分別是二進(jìn)制化(BIND)模塊620、取得內(nèi)容(GCTX)模塊622、以及二進(jìn)制計(jì)算譯碼(BARD)引擎624。二進(jìn)制計(jì)算譯碼引擎624更包含狀態(tài)索引(pStateldx)暫存器602、高可能性符號值(valMPS)暫存器604、碼長范圍(codlRange)暫存器606,以及碼長偏移量暫存器(codlOffset)608。可變長度譯碼單元530a更包括存儲(chǔ)器模塊650,其包括內(nèi)容存儲(chǔ)器564(亦稱為宏區(qū)塊鄰近內(nèi)容(mbNeighCtx)存儲(chǔ)器或是內(nèi)容存儲(chǔ)器陣?yán)?、局部暫存器612、總體暫存器614,以及SREG串流緩沖器/DMA引擎562(亦稱為DMA引擎模塊,將于圖6C中做進(jìn)一步說明),另外還有未顯示的暫存器。在一實(shí)施例中,內(nèi)容存儲(chǔ)器564包含如圖6C的陣列結(jié)構(gòu),之后會(huì)有更進(jìn)一步的說明。存儲(chǔ)器模塊650亦包括二進(jìn)制字串(binstring)暫存器616??勺冮L度譯碼單元530a與執(zhí)行單元420a的接口包括目標(biāo)(DST)總線628、兩個(gè)來源總線SRC1632以及SRC2630、共用以及執(zhí)行緒信息總線634,以及延遲/重置總線636。目標(biāo)總線628上的數(shù)據(jù)可以直接或間接(例如經(jīng)由中間快取存儲(chǔ)器、暫存器、緩沖器、或存儲(chǔ)器)傳送至圖形處理單元114內(nèi)部或外部的視頻處理單元。目標(biāo)總線628上的數(shù)據(jù)可以是多個(gè)不同格式的一,包括微軟的DXAPI格式或是其他格式。這些數(shù)據(jù)可包含系數(shù)、宏區(qū)塊參數(shù)、動(dòng)作信息,和/或IPCM采樣或是其他數(shù)據(jù)??勺冮L度譯碼單元530a亦包括具有地址總線638和數(shù)據(jù)總線640的存儲(chǔ)器接口。通過從地址總線638得到地址,存儲(chǔ)器接口可存取位流數(shù)據(jù)以供存取數(shù)據(jù)總線640所接收的數(shù)據(jù)。在一實(shí)施例中,數(shù)據(jù)總線640上的數(shù)據(jù)可以包括未編碼視頻串流,其包括各種信號參數(shù)以及其他數(shù)據(jù)與格式。于部分實(shí)施例中,可以使用載入-儲(chǔ)存操作來存取位流數(shù)據(jù)。在開始說明可變長度譯碼單元530a的不同元件之前,簡單說明有關(guān)CABAC譯碼的執(zhí)行單元420a的整體操作。通常,根據(jù)片段(slice)的種類,驅(qū)動(dòng)軟件128(圖1)準(zhǔn)備并載入CABAC著色器至執(zhí)行單元420a。CABAC著色器使用標(biāo)準(zhǔn)指令集,再加上二進(jìn)制化指令、取得內(nèi)容指令以及二進(jìn)制計(jì)算譯碼指令以譯碼位流。因?yàn)榭勺冮L度譯碼單元530a使用的內(nèi)容表可根據(jù)片段種類改變,其中每一片段均要載入。在一實(shí)施例中,在發(fā)出其他指令前,CABAC著色器所執(zhí)行的第一個(gè)指令包含INIT_CTX指令和INIT_ADE指令。這兩個(gè)指令使CABAC單元530開始譯碼CABAC位流,并從自動(dòng)安排串流譯碼的指標(biāo)載入位流至先進(jìn)先出緩沖器,稍后將說明這兩個(gè)指令。關(guān)于解析位流,從存儲(chǔ)器接口的數(shù)據(jù)總線640接收位流,然后由SREG串流緩沖器/DMA引擎562進(jìn)行緩沖。從片段數(shù)據(jù)解析階段提供位流譯碼。亦即,位流(例如NAL位流)包括一或多張圖片,其將切割成圖片檔頭(header)以及許多片段。片段通常與連續(xù)的宏區(qū)塊有關(guān)。在一實(shí)施例中,外部程序(即可變長度譯碼單元530a外部)解析NAL位流、譯碼片段檔頭并傳送指向該片段數(shù)據(jù)(例如片段開始處)位置的指標(biāo)。硬件(加上軟件)可以從圖形來解析H264位流。不過,在一實(shí)施例中,CABAC編碼僅出現(xiàn)于片段數(shù)據(jù)與宏區(qū)塊階段。通常,驅(qū)動(dòng)軟件128從片段數(shù)據(jù)階段處理位流,因?yàn)檫@是應(yīng)用程序以及AP所I提供的功能。指向片段數(shù)據(jù)位置的指標(biāo)還包含片段數(shù)據(jù)的第一字節(jié)(例如RBSPbyeAddress)以及指出是位流開始或標(biāo)頭位置(例如sREGptr)的位偏移量指標(biāo)(例如一或多個(gè)位)。位流的初始化將于稍后解釋`。在某些實(shí)施例中,可以利用主機(jī)處理器(例如圖1的中央處理單元126)處理外部程序以提供圖片階段譯碼以及片段標(biāo)頭譯碼。在部分實(shí)施例中,由于譯碼系統(tǒng)200的編程特性,可以在任何階段中進(jìn)行譯碼。參考圖5C以及圖6A,SREG串流緩沖器/DMA引擎562用以分別接收總線632以及總線630的總線SRC1值以及總線SRC2值,以及對應(yīng)于轉(zhuǎn)發(fā)暫存器以及控制暫存器的數(shù)據(jù)。SREG串流緩沖器/DMA引擎562包含內(nèi)部位流緩沖器562b,在一實(shí)施例中可為BigEndian格式的32位暫存器以及8個(gè)128位(8×128)暫存器。經(jīng)由驅(qū)動(dòng)軟件發(fā)出如前述的初始化指令可初始設(shè)定SREG串流緩沖器/DMA引擎562。一旦初始化,便自動(dòng)管理SREG串流緩沖器/DMA引擎562的內(nèi)部緩沖器562b。使用SREG串流緩沖器/DMA引擎562以保留解析位的位置。在一實(shí)施例中,SREG串流緩沖器/DMA引擎562使用兩個(gè)暫存器,一快速32位觸發(fā)器與一較慢512或1024位存儲(chǔ)器。位流會(huì)使用位。SREG暫存器562a以位進(jìn)行操作,而位流緩沖器562b以字節(jié)進(jìn)行操作,其可以節(jié)省電源。通常,指令操作在SREG暫存器562a中,并使用少許位(例如1-3位)。當(dāng)SREG暫存器562a使用超過一字節(jié)的數(shù)據(jù)時(shí),數(shù)據(jù)(以字節(jié)片段)將從位流緩沖器562b傳送給SREG暫存器562a,然后緩沖器指標(biāo)會(huì)減少所傳送的字節(jié)數(shù)量。當(dāng)SREG串流緩沖器/DMA引擎562的DMA偵測到使用256位或是更多位時(shí),從存儲(chǔ)器提取256位以再填滿位流緩沖器562b。因此,可變長度譯碼單元530a實(shí)施一個(gè)簡單的循環(huán)緩沖器(256位片段×4)以記錄位流緩沖器562b并提供填充。在某些實(shí)施例中,可以使用單一緩沖器,不過一個(gè)循環(huán)緩沖器需要更復(fù)雜的指標(biāo)計(jì)算以跟上存儲(chǔ)器的速度。可以利用初始化指令來達(dá)成內(nèi)部緩沖器562b的內(nèi)部動(dòng)作,稱為INIT_BSTR指令。在一實(shí)施例中是由驅(qū)動(dòng)軟件128發(fā)出INIT_BSTR指令以及其他之后說明的指令。已知位流位置的字節(jié)地址及位偏移量,INIT_BSTR指令將數(shù)據(jù)載入至內(nèi)部位流緩沖器562b并開始管理程序。對于每一次呼叫處理片段數(shù)據(jù),將發(fā)出下列格式的指令I(lǐng)NIT_BSTRoffset,RBSPbyteAddress發(fā)出INIT_BSTR指令以載入數(shù)據(jù)至SREG串流緩沖器/DMA引擎562的內(nèi)部緩沖器562b。SRC2暫存器提供字節(jié)地址(RBSPbyteAddress),而SRC1暫存器提供位偏移量。如此,可提供下列通用的指令格式INIT_BSTRSRC2,SRC1,其中,這個(gè)指令中的SRC1以及SRC2以及其他對應(yīng)于內(nèi)部暫存器566的值非限定在這些暫存器。在一實(shí)施例中,使用256位排列的存儲(chǔ)器提取以存取位流數(shù)據(jù),其寫入至緩沖器暫存器并傳送至SREG串流緩沖器/DMA引擎562的32位SREG暫存器562a。于一實(shí)施例中,在任何其他操作針對這些暫存器或是緩沖器的操作開始之前,位流緩沖器562b內(nèi)的數(shù)據(jù)是以字節(jié)方式排列。通過使用排列指令可實(shí)施數(shù)據(jù)的排列,稱的為ABST指令。ABST指令排列位流緩沖器562b內(nèi)的數(shù)據(jù),其中在譯碼程序中,排列位(例如填充位)最后將丟棄。當(dāng)SREG暫存器562a使用數(shù)據(jù)時(shí),內(nèi)部緩沖器562b便會(huì)填充數(shù)據(jù)。換句話說,SREG串流緩沖器/DMA引擎562的內(nèi)部緩沖器562b作為以3為模(modulo)的循環(huán)緩沖器以輸入SREG串流緩沖器/DMA引擎562的32位暫存器562a。CABAC模塊580與讀取模塊572一起可使用READ指令以從SREG暫存器562a讀取數(shù)據(jù)。例如,在H.264規(guī)格中,某些符號為固定長度編碼,以及通過執(zhí)行這些特定位數(shù)的READ指令而得到值,并零延伸至?xí)捍嫫鞯某叽?。READ指令的格式如下READDST,SRC1,其中DST對應(yīng)于輸出或目標(biāo)暫存器。在一實(shí)施例中,SRC1暫存器包含不具正負(fù)號的整數(shù)值n。透過READ指令,從SREG暫存器562a讀取n位。當(dāng)從32位暫存器562a使用了256位的數(shù)據(jù)(例如譯碼一或多個(gè)語法成分),自動(dòng)開始提取動(dòng)作以獲得另一個(gè)256位的數(shù)據(jù)以寫入至內(nèi)部緩沖器562b的暫存器,接著進(jìn)入SREG暫存器562a進(jìn)行使用。在某些實(shí)施例中,如果對應(yīng)于一符號譯碼的SREG暫存器562a的數(shù)據(jù)已被使用了預(yù)定數(shù)量的位或字節(jié),且內(nèi)部緩沖器562b沒有再接收到任何數(shù)據(jù),則CABAC模塊580可以經(jīng)由延遲/重置總線636執(zhí)行延遲,以便執(zhí)行其他的執(zhí)行緒(例如與CABAC譯碼程序無關(guān)的執(zhí)行緒),像是頂點(diǎn)著色器操作。使用SREG串流緩沖器/DMA引擎562的DMA引擎可以減少所需的全部緩沖器以補(bǔ)償存儲(chǔ)器延遲(例如,于某些圖形處理單元中,會(huì)有三百多周期)。當(dāng)使用了位流,可以請求流入另外的的位流數(shù)據(jù)。如果位流數(shù)據(jù)太低,且位流緩沖器562b有向下溢位的風(fēng)險(xiǎn)時(shí)(例如已知周期數(shù)量,讓信號從可變長度譯碼單元530a流至處理器管線),可傳遞延遲信號給處理器管線以暫停操作直到所等候的數(shù)據(jù)到達(dá)位流緩沖器562b。此外,SREG串流緩沖器/DMA引擎562原本就有處理錯(cuò)誤位流的能力。例如,由于位流錯(cuò)誤,有可能會(huì)沒有偵測到片段結(jié)尾標(biāo)示。這種偵測錯(cuò)誤可能會(huì)導(dǎo)致完全地譯碼錯(cuò)誤,并且使用到后來的圖樣或片段的位。SREG串流緩沖器/DMA引擎562記錄所使用的位數(shù)。當(dāng)使用的位數(shù)大于預(yù)設(shè)的定限值(可針對每一片段改變)時(shí),結(jié)束處理程序并送出異常的信號至處理器(例如主機(jī)處理器)。接著,處理器執(zhí)行編碼以嘗試從錯(cuò)誤中回復(fù)。請同時(shí)參考圖6A以及圖6B,進(jìn)一步說明可變長度譯碼單元530a的功能,尤其是譯碼引擎(例如BARD引擎或是模塊624)以及內(nèi)容變量的初始化。在片段起始處且在譯碼對應(yīng)于第一宏區(qū)塊的語法成分之前,內(nèi)容狀態(tài)以及二進(jìn)制計(jì)算譯碼模塊624被初始化。在一實(shí)施例中,驅(qū)動(dòng)軟件128發(fā)出INIT_CTX指令以及INIT_ADE指令來進(jìn)行初始化。INIT_CTX指令會(huì)啟動(dòng)CABAC譯碼模式并初始化一個(gè)或多個(gè)內(nèi)容表(例如遠(yuǎn)端儲(chǔ)存或是芯片上存儲(chǔ)器,例如ROM)。INIT_CTX指令可根據(jù)下列指令格式而執(zhí)行INIT_CTXSRC2,SRC1對INIT_CTX指令而言,根據(jù)位位置,運(yùn)算元SRC1可具有下列一或多個(gè)關(guān)于已知H.264宏區(qū)塊參數(shù)的值cabac_init_idc、mbPerLine、constrained_intra_pred_flag、NAL_unit_type(NUT)以及MbaffFlag。需注意到constrained_intra_pred_flag、NAL_unit_type(NUT)以及MbaffFlag對應(yīng)于已知H.264宏區(qū)塊參數(shù)。此外,根據(jù)位位置,運(yùn)算元SRC2具有下列值SliceQPY以及mbAddrCurr。在一實(shí)施例中,進(jìn)一步解釋,執(zhí)行INIT_CTX指令(即CABAC內(nèi)容表的初始化)需要cabac_init_idc以及sliceQPY(如量子化)參數(shù)。不過,要初始化整個(gè)CABAC引擎需要三個(gè)指令,即INIT_BTSR指令、INIT_CTX指令以及INIT_ADE指令,因此,SRC1及SRC2(例如全部64位或各32位)中的可用位可以傳遞其他用于CABAC鄰近內(nèi)容的參數(shù)。因此兩個(gè)來源暫存器SRC1以及SRC2664可以包含下列值SRC1[15:0]=cabac_init_idcSRC1[23:16]=mbPerLineSRC1[24]=constrained_intra_pred_flagSRC1[27:25]=NAL_unit_type(NUT)SRC1[28]=MbaffFlagSRC1[31:29]=未定義SRC2[15:0]=SliceQPYSRC2[31:16]=mbAddrCurrSliceQPY的值是用于初始化位流緩沖器562b內(nèi)的狀態(tài)機(jī)(未顯示)。雖然前文已討論各種已知的圖形與片段參數(shù),另外提供一些關(guān)于可變長度譯碼單元530a的參數(shù)。在一實(shí)施例中,cabac_init_idc是針對未編碼為I-picture和切換I-picture(SI)的片段所定義。換句話說,cabac_init_idc只能針對P、SP以及B片段而定義,以及當(dāng)接收到I和SI片段時(shí),cabac_init_idc為預(yù)設(shè)值。舉例來說,當(dāng)大概460個(gè)內(nèi)容(例如I以及SI片段)被初始化時(shí),可以將cabac_init_idc設(shè)為3(因?yàn)楦鶕?jù)H.264規(guī)格,cabac_init_idc的值只能是0~2),致能2位以表示該片段為I或SI??勺冮L度譯碼單元530a亦可使用INIT_CTX指令以初始化局部暫存器612以及宏區(qū)塊鄰近內(nèi)容存儲(chǔ)器564陣列結(jié)構(gòu)或是元件,包括與暫存相鄰宏區(qū)塊有關(guān)的暫存器。參考圖6C,在一實(shí)施例中,宏區(qū)塊鄰近內(nèi)容存儲(chǔ)器564位于圖的上方。在一實(shí)施例中,宏區(qū)塊鄰近內(nèi)容存儲(chǔ)器564的宏區(qū)塊基準(zhǔn)鄰近內(nèi)容存儲(chǔ)器排列成存儲(chǔ)器陣列以儲(chǔ)存有關(guān)宏區(qū)塊的列(row)的數(shù)據(jù)。如圖所示,宏區(qū)塊鄰近內(nèi)容存儲(chǔ)器564包括陣列元素mbNeighCtx(標(biāo)號為601),各元素用以儲(chǔ)存120個(gè)宏區(qū)塊中的一個(gè)宏區(qū)塊至一列(例如對應(yīng)于HDTV為1920×1080像素)。目前mbNeighCtxCurrent暫存器603用于儲(chǔ)存當(dāng)前譯碼的宏區(qū)塊,而mbNeighCtxLeft暫存器605用于儲(chǔ)存先前譯碼的鄰近(左方)宏區(qū)塊。此外,利用指標(biāo)607a、607b和607c(在圖6C中以箭頭表示)指向暫存器603、605和陣列元素601。為了譯碼目前的宏區(qū)塊,譯碼的數(shù)據(jù)儲(chǔ)存于mbNeighCtxCurrent暫存器603。已知CABAC譯碼的內(nèi)容本質(zhì),根據(jù)前次譯碼宏區(qū)塊時(shí)所搜集的信息來譯碼目前的宏區(qū)塊,亦即左方宏區(qū)塊儲(chǔ)存于左方mbNeighCtxLeft暫存器605并由指標(biāo)607b所指向,而上方宏區(qū)塊儲(chǔ)存于陣列元素[i]中并由指標(biāo)607c所指向。繼續(xù)解釋初始化指令,INIT_CTX指令用于初始化與目前宏區(qū)塊(例如宏區(qū)塊鄰近內(nèi)容存儲(chǔ)器564陣列的元素)相鄰的宏區(qū)塊有關(guān)的上方及左方指標(biāo)607c及607b。例如,左方指標(biāo)607b可以設(shè)為0而上方指標(biāo)607c可以設(shè)為1。此外,INIT_CTX指令會(huì)更新總體暫存器614。關(guān)于內(nèi)容表的初始化,因應(yīng)呼叫INIT_CTX指令,可變長度譯碼單元530a建立一或多個(gè)內(nèi)容表,亦稱為CTX_TABLE。在一實(shí)施例中,CTX_TABLE可以是4×460x16位表(8位給m,另外8位給n,具正負(fù)號的值)或是其他數(shù)據(jù)結(jié)構(gòu),內(nèi)容表的每一個(gè)項(xiàng)目包含從狀態(tài)索引暫存器602以及高可能性符號值暫存器604所存取的pStateIdx值及valMPS值。INIT_ADE指令起始化二進(jìn)制計(jì)算譯碼模塊624,亦稱為譯碼引擎。在一實(shí)施例中,完成INIT_BTSR指令后呼叫INIT_ADE指令。于執(zhí)行INIT_ADE指令之后,可變長度譯碼單元530a建立兩個(gè)暫存器,分別是碼長范圍(codlRange)暫存器606以及碼長偏移量(codlOffset)暫存器608,具有下列指令或是數(shù)值codlRange=0x01FE以及codlOffset=ZeroExtend(READ(#9),#16)如此,在一實(shí)施例中,這些變量可以是9位數(shù)值。關(guān)于codlOffset指令,9位是從位流緩沖器562b所讀取,零延伸(ZeroExtend)則儲(chǔ)存于16位碼長偏移量暫存器608中。部分實(shí)施例亦可使用其他數(shù)值。二進(jìn)制計(jì)算譯碼模塊624使用儲(chǔ)存于暫存器606及608的數(shù)值以決定要輸出0或1,且當(dāng)二進(jìn)制譯碼之后,這些值將進(jìn)行更新。除了初始化碼長范圍暫存器606以及碼長偏移量暫存器608,INIT_ADE指令操作亦初始化二進(jìn)制字串暫存器616。在一實(shí)施例中,二進(jìn)制字串暫存器616可以是32位暫存器,其接收來自二進(jìn)制計(jì)算譯碼模塊624的輸出位。在部分實(shí)施例中可使用其他大小的暫存器。當(dāng)宏區(qū)塊編碼成I_PCM數(shù)據(jù)時(shí),二進(jìn)制計(jì)算譯碼模塊624亦被初始化。已知I_PCM數(shù)據(jù)包含像素?cái)?shù)據(jù),根據(jù)H.264規(guī)格,其并沒有將轉(zhuǎn)換或預(yù)測模型應(yīng)用至原始視頻數(shù)據(jù)。例如,I_PCM可被使用以供無損(lossless)編碼應(yīng)用。以上已描述與解析位流以及初始化各種譯碼系統(tǒng)元件有關(guān)的架構(gòu)以及指令,下面將描述有關(guān)二進(jìn)制化、接收模型信息與內(nèi)容,以及根據(jù)模型及內(nèi)容譯碼的一或多個(gè)程序。通常,可變長度譯碼單元530a用于取得解析語法成分(syntaxelement,SE)所有可能的二進(jìn)制化,或是經(jīng)由二進(jìn)制化模塊620及BIND指令至少足夠取得模型信息??勺冮L度譯碼單元530a更經(jīng)由取得內(nèi)容模塊622及GCTX指令得到已知語法成分的內(nèi)容,并根據(jù)內(nèi)容及模型信息,經(jīng)由二進(jìn)制計(jì)算譯碼模塊624及BARD指令實(shí)施運(yùn)算譯碼。實(shí)際上,呼叫GCTX/BARD指令、輸出一位給二進(jìn)制字串暫存器616直到發(fā)現(xiàn)配合已知語法成分的有意義字碼會(huì)構(gòu)成一循環(huán)。在一實(shí)施例中,每一次譯碼二進(jìn)制值之后,提供對應(yīng)的譯碼位給二進(jìn)制字串暫存器616,而二進(jìn)制字串暫存器被讀回至內(nèi)容模塊622,直到發(fā)現(xiàn)配對。更詳細(xì)解釋使用單一可變長度譯碼單元530a的譯碼系統(tǒng)架構(gòu),并同時(shí)參考圖6A與圖6B,經(jīng)由驅(qū)動(dòng)軟件128所發(fā)出的BIND指令以致能二進(jìn)制化模塊620。于一實(shí)施例中,BIND指令具有下列格式BINDDST,#Imm16,SRC1,其中,DST對應(yīng)于目標(biāo)暫存器652,而#Imm16對應(yīng)16位目前數(shù)值,以及SRC1對應(yīng)于輸入暫存器SRC1。BIND指令操作的輸入包含語法成分(包含16位目前數(shù)值Imm)以及內(nèi)容區(qū)塊種類(ctxBlockCat)。語法成分可以包含任何符合H.264規(guī)格的任何語法成分型式(例如MBTypeInI、MBSkipFlagB、IntraChromaPredMode等)。呼叫BIND指令會(huì)使得驅(qū)動(dòng)軟件128從儲(chǔ)存在存儲(chǔ)器(例如芯片上存儲(chǔ)器或遠(yuǎn)端存儲(chǔ)器)中的表單(或其他數(shù)據(jù)結(jié)構(gòu))讀取語法成分,并取得語法成分索引(SEIdx)。語法成分索引用于存取其他表單或是數(shù)據(jù)結(jié)構(gòu)以獲得如下文所描述的各宏區(qū)塊參數(shù)。在一實(shí)施例中,目標(biāo)暫存器652包含32位暫存器,其具有下列格式位0-8(ctxIdxOffset)、位16-18(maxBinIdxCtx)、位21-23(ctxBlockCat)、位24-29(ctxIdxBlockCatOffset)、以及位31(bypassflag)。這些數(shù)值(例如ctxIdxOffset,maxBinIdxCtx等等)會(huì)傳送至取得內(nèi)容模塊622當(dāng)作內(nèi)容模型的用。在此實(shí)施例中,任何未定義的保留位可以是0。根據(jù)語法成分索引以及內(nèi)容區(qū)塊種類的配對結(jié)果,ctxIdxBlockOffset可經(jīng)由儲(chǔ)存于遠(yuǎn)端或芯片上存儲(chǔ)器的表單或其他數(shù)據(jù)結(jié)構(gòu)而取得。表一說明一非限定實(shí)施例的表單內(nèi)容表一如果接收到未定義的內(nèi)容區(qū)塊種類,則可變長度譯碼單元530a可以把未定義參數(shù)當(dāng)成0,使得ctxIdxBlockOffset被考慮成具有0值。呼叫BIND指令亦會(huì)使得重置信號(Rst_Signal)從二進(jìn)制化模塊620輸出至二進(jìn)制計(jì)算譯碼模塊624,說明如下。為了說明二進(jìn)制化模塊620的各種輸入與輸出,這里提出根據(jù)至少一實(shí)施例的二進(jìn)制化模塊620的操作。呼叫二進(jìn)制化模塊620,則二進(jìn)制化模塊620擷取語法成分,并且經(jīng)由軟件提供已知的語法成分索引(SEIdx)。使用語法成分索引,二進(jìn)制化模塊620查找表單以獲得maxBinIdxCtx、ctxIdxOffset以及bypassFlag的對應(yīng)值。這個(gè)查找值會(huì)暫時(shí)儲(chǔ)存在目標(biāo)暫存器652的預(yù)先定義位配置。此外,使用語法成分索引以及內(nèi)容區(qū)塊種類,二進(jìn)制化模塊620進(jìn)行第二次表單查找(例如遠(yuǎn)端存儲(chǔ)器或是芯片上存儲(chǔ)器)以獲得ctxIdxBlockOffset數(shù)值。第二次的查找值亦是暫時(shí)儲(chǔ)存在目標(biāo)暫存器652中。因此,已決定的值將用于建立目標(biāo)暫存器652以作為32位數(shù)值輸出目標(biāo)。對某些語法成分而言,可使用額外的信息(語法成分與內(nèi)容區(qū)塊種類除外)以開始H.264譯碼操作。例如,對像是SigCoeffFlag以及l(fā)astSigCoeffFlag的宏區(qū)塊參數(shù)而言,使用儲(chǔ)存在宏區(qū)塊鄰近內(nèi)容存儲(chǔ)器564的陣列元素maxBinIdxCtx[1]里的值以及輸入內(nèi)容區(qū)塊種類值以決定宏區(qū)塊是圖場編碼或是幀編碼。在某些實(shí)施例中,即使是不同的語法成分,同樣的語法成分?jǐn)?shù)目也使用于這些標(biāo)志,然后使用mb_field_decoding_flag(mbNeighCtx[1]欄位)來識別。除了上述有關(guān)二進(jìn)制化模塊620的功能,注意到在圖6B中,二進(jìn)制化模塊620可結(jié)合二進(jìn)制索引暫存器654、多工器單元656和/或轉(zhuǎn)發(fā)暫存器F1以及F2。至于二進(jìn)制索引暫存器654以及多工器單元656,多工器單元656會(huì)根據(jù)不同輸入而提供輸出SRC1(例如暫存器SRC1內(nèi)的值)給取得內(nèi)容模塊622。關(guān)于標(biāo)示為F1的轉(zhuǎn)發(fā)暫存器,當(dāng)BIND(或GCTX)指令產(chǎn)生結(jié)果時(shí),結(jié)果可被寫入至目標(biāo)暫存器(例如目標(biāo)暫存器652和/或轉(zhuǎn)發(fā)暫存器F1)。通過已知指令中的轉(zhuǎn)發(fā)標(biāo)志可表示一個(gè)指令以及對應(yīng)的模塊(例如取得內(nèi)容模塊622或二進(jìn)制計(jì)算譯碼模塊624)是否使用轉(zhuǎn)發(fā)暫存器F1以及F2。代表轉(zhuǎn)發(fā)暫存器的符號包括F1(即使用轉(zhuǎn)發(fā)來源1的值,在一實(shí)施例中可以是指令中的位26所表示)以及F2(即使用轉(zhuǎn)發(fā)來源2的值,在一實(shí)施例中可以是指令中的位27所表示)。對于取得內(nèi)容模塊622以及二進(jìn)制計(jì)算譯碼模塊624,數(shù)據(jù)可被轉(zhuǎn)發(fā)至各自的輸入,說明如下。前面已說明二進(jìn)制化模塊620以及相關(guān)程序,這里將說明關(guān)于取得內(nèi)容模塊622在GCTX指令方面如何取得已知模型的內(nèi)容以及二進(jìn)制索引。簡單地說,取得內(nèi)容模塊622的輸入包含maxBinIdxCtx、binIdx以及CtxIdxOffset,描述如下。取得內(nèi)容模塊622使用CtxIdxOffset及binIdx數(shù)值來計(jì)算CtxIdx的值(為一輸出,代表內(nèi)容索引)。GCTX指令的示范格式如下GCTXDST,SRC2,SRC1,其中,SRC1對應(yīng)于由多工器單元656所輸出的值并儲(chǔ)存于暫存器SRC1,而SRC2對應(yīng)于由目標(biāo)暫存器652所輸出的值并儲(chǔ)存于暫存器SRC2,以及DST對應(yīng)于目標(biāo)暫存器。在一實(shí)施例中,各暫存器具有下列數(shù)值SRC1[7:0]=binIdx;當(dāng)目前語法成分包含codedBlockPattern時(shí),SRC1的值(從多工器單元656輸出,并作為取得內(nèi)容模塊622的輸入)可以是二進(jìn)制索引暫存器654的值。SRC1[15:8]可以是levelListIdx(當(dāng)計(jì)算sigCoeffFlag時(shí))、lastSigCoeffFlag或是mbPartIdx(當(dāng)計(jì)算編碼區(qū)塊圖樣的Ref_Idx或是binIdx)。當(dāng)語法成分是sigCoeffFlag或是lastSigCoeffFlag時(shí),多工器單元656可以用來傳送levelListIdx。SRC1[16]可包含iCbCr標(biāo)志,而當(dāng)其值為0時(shí),區(qū)塊為Cb色度區(qū)塊。此外,SRC1[16]可包含L0/L1值,如果是L0時(shí),其值為0,熟悉此技藝的人士從本發(fā)明的內(nèi)容可知L0/L1是用于移動(dòng)補(bǔ)償預(yù)測的圖形參考列表(L0=list0,L1=list1)。SRC1[21:20]=mbPartitionModeSRC2[8:0]=ctxIdxOffsetSRC2[18:16]=maxBinIdxCtxSRC2[23:31]=ctxBlockCatSRC2[29:24]=ctxIdxBlockOffsetSRC2[31]=bypassFlag再者,DST包括取得內(nèi)容模塊622的輸出并具有下列值DST[15:00]=ctxIdxDST[23:16]=binIdxDST[27:24]=mbPartIdxDST[29:28]=mbPartitionModeDST[30]=L0取得內(nèi)容模塊622亦可與轉(zhuǎn)發(fā)暫存器互動(dòng)。因此,當(dāng)使用轉(zhuǎn)發(fā)暫存器時(shí),指令可取得GCTX.F1.F2的格式,其中F1以及F2指示轉(zhuǎn)發(fā)暫存器被使用,即有2位在指令譯碼(F1以及F2)。假如未得到一或兩個(gè)轉(zhuǎn)發(fā)標(biāo)志,則表示轉(zhuǎn)發(fā)暫存器未被使用。當(dāng)這些位被設(shè)定時(shí)(例如設(shè)為1),則使用轉(zhuǎn)發(fā)暫存器的值(內(nèi)部產(chǎn)生的值)。否則,就使用來源暫存器的值。因此,轉(zhuǎn)發(fā)暫存器更提供一個(gè)有關(guān)何時(shí)為最早的時(shí)間可發(fā)出指令的建議給編譯程序。當(dāng)未使用轉(zhuǎn)發(fā)時(shí),指令可能遇到已知來源暫存器的寫入后讀取的延遲。對GCTX指令而言,當(dāng)重置信號(Rst_Signal)被設(shè)定時(shí),SRC1的值為0。當(dāng)運(yùn)算(F1&Rst_Signal)成立時(shí),SRC1為來自取得內(nèi)容模塊622內(nèi)部的binIdx值再加上1,否則SRC1為來自執(zhí)行單元暫存器的binIdx值??墒褂枚M(jìn)制化模塊620的輸出作為GCTX指令以及BARD指令的轉(zhuǎn)發(fā)SRC2值。在后面的指令中,不會(huì)發(fā)出BIND指令直到BARD指令使用到轉(zhuǎn)發(fā)暫存器。進(jìn)一步解釋,重置信號以及F1轉(zhuǎn)發(fā)信號結(jié)合成一信號(例如2位信號){F1,reset},其指示輸入至取得內(nèi)容模塊622的SRC1值是否包括binIdx值或是轉(zhuǎn)發(fā)值。提供重置信號的另一個(gè)作用是清除以及重置二進(jìn)制字串暫存器616,并重置二進(jìn)制索引暫存器654成0。繼續(xù)討論取得內(nèi)容模塊622以及得到內(nèi)容信息,在一實(shí)施例中,下面表二以及表三所顯示的信息分別對應(yīng)于結(jié)構(gòu)鄰近內(nèi)容存儲(chǔ)器564以及mbNeighCtxCurrent暫存器603的值。mbNeighCtxCurrent暫存器603包含目前宏區(qū)塊的譯碼輸出結(jié)果。在目前宏區(qū)塊處理的最后部分,發(fā)出CWRITE指令,其復(fù)制來自mbNeighCtxCurrent暫存器603的信息至鄰近內(nèi)容存儲(chǔ)器564陣列內(nèi)所對應(yīng)的位置。之后,所復(fù)制的信息被當(dāng)作頂部鄰近值。表二表三在一實(shí)施例中,參數(shù)codedFlagTrans被分為三部分。舉例來說,開始的4位系有關(guān)于內(nèi)容區(qū)塊種類為0或是1,而上面的4位系有關(guān)于內(nèi)容區(qū)塊種類為3或是4。上面的4位更可分為兩部分,較低的2位給iCbCr=0而其他2位給iCbCr=1。參數(shù)predMode(預(yù)測模式)具有下列三選項(xiàng)的一predL0=0、predL1=1以及NiPred=2。圖6D系顯示參考表二以及表三的參數(shù)refIdx結(jié)構(gòu)的一實(shí)施例。需注意到參數(shù)refIdx與使用在圖像復(fù)原的參考圖像列表的索引有關(guān)。上述結(jié)構(gòu)可提供存儲(chǔ)器以及邏輯電路的最佳化。如圖所顯示,計(jì)算語法成分結(jié)構(gòu)包括宏區(qū)塊的頂部列609、宏區(qū)塊分區(qū)611(如顯示的四區(qū))、L0/L1值613以及各L0/L1值的儲(chǔ)存位值Gt0(大于0)617以及儲(chǔ)存位值Gt1(大于1)615。通常,需要存取頂部鄰近宏區(qū)塊609,然而宏區(qū)塊的底部列也是需要存取,其被分為4×4方陣的一實(shí)施例,結(jié)果產(chǎn)生四個(gè)mbPartition611。對各mbPartition611而言,L0/L1值613的消息被確定,但并非實(shí)際值。關(guān)于L0值以及L1值為1或是大于1的判斷被決定。在一實(shí)施例中,通過儲(chǔ)存Gt0617以及Gt1615兩位而獲得決定,其被使用于計(jì)算語法成分。進(jìn)一步簡單說明計(jì)算語法成分結(jié)構(gòu),兩個(gè)最佳化被執(zhí)行。在一最佳化中,只有保持2位(雖然參考值傳統(tǒng)上較大),而不需要更多位以供可變長度譯碼單元530a內(nèi)計(jì)算語法成分的譯碼。譯碼全部的值并維持在執(zhí)行單元暫存器或是存儲(chǔ)器(例如L2快取存儲(chǔ)器)。第二最佳化只有四個(gè)元素被維持(例如兩個(gè)在頂部而兩個(gè)在左方)。四個(gè)元素為再循環(huán),而最后的值會(huì)由CWRITE指令寫入于鄰近,其儲(chǔ)存在存儲(chǔ)器中。之后,只有16位被維持在mbNeighCtxCurrent暫存器603,而只有8位被維持在mbNeighCtxLeft暫存器605以及陣列564的頂部mbNeighCtx元素601。在計(jì)算邏輯電路使用再儲(chǔ)存,因?yàn)樽g碼參考值的全部計(jì)算被較少位的布林運(yùn)算所取代。mb_type包括如下列表四所顯示。表四未顯示在圖6B的額外暫存器可以被使用,例如mbPerLine(例如8位,不具正負(fù)號)、mb_qp_delta(8位,具正負(fù)號),以及mbAddrCurr(16-bit,目前宏區(qū)塊地址)。對mbAddrCurr而言,1920×1080陣列被實(shí)施,雖然其只需要13位。部分實(shí)施例會(huì)使用16位以幫助16位計(jì)算的執(zhí)行。來自先前所描述的暫存器的值亦被儲(chǔ)存在總體暫存器614。復(fù)制儲(chǔ)存在總體暫存器614內(nèi)的值并儲(chǔ)存在暫存器以幫助硬件設(shè)計(jì)。在一實(shí)施例中,總體暫存器614包括格式化的32位暫存器以包含對應(yīng)于mbPerline、mbAddrCurr以及mb_qp_delta的值,除了對應(yīng)于NUT、MBAFF_FLAG以及chroma_format_idc的其他值之外??墒褂肐NSERT指令來更新總體暫存器614內(nèi)的不同欄位。INSERT指令的示范格式描述如下INSERTDST,#Imm,SRC1在上面INSERT指令中,#Imm的一實(shí)施例包括10位數(shù)字,其中前面5位寬度的數(shù)據(jù)以及上面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需注意到一些欄位(例如NUT(NAL_UNIT_TYPE)、C(constrained_intra_pred_flag))、MBAFF_FLAG、mbPerLine以及mbAddrCurr值亦可使用INIT_CTX指令來寫入/初始化至總體暫存器614。在一實(shí)施例中,局部暫存器612包括32位暫存器,其具有對應(yīng)于b、mb_qp_delta、numDecodAbsLevelEq1以及numDecodAbsLevelGt1的欄位。這些欄位可使用INSERT指令來更新。局部暫存器612亦被初始化,使得b=0、mb_qp_delta=0、numDecodAbsLevelEq1=-1以及numDecodAbsLevelGt1=0。用以提供初始化的指令可使用下列格式CWRITESRC1,其中SRC1[15:0]=mbAddrCurr。CWRITESRC1更新總體暫存器614的mbAddrCurr欄位。在鄰近元素結(jié)構(gòu)以及其譯碼的簡單描述之后,將描述透過CWRITE指令所提供的額外功能。在CABAC譯碼中,語法值被預(yù)期并從其鄰近宏區(qū)塊模仿。不同方法描述如后,其提供可變長度譯碼單元530a的實(shí)施例如何判斷左方以及上方鄰近宏區(qū)塊以及如何判斷這些宏區(qū)塊為實(shí)際上為可使用。如前文所描述,譯碼程序使用鄰近值(例如從宏區(qū)塊或區(qū)塊至上方以及至左方)。在一實(shí)施例中,二進(jìn)制計(jì)算譯碼引擎624計(jì)算下列方程序,其使用目前宏區(qū)塊數(shù)量以及位于一線(mbPerLine)的宏區(qū)塊的數(shù)量以計(jì)算上方宏區(qū)塊的地址以及左方與上方宏區(qū)塊是否為可用。舉例來說,為了判斷鄰近宏區(qū)塊(例如左方鄰近)是否存在(即有效),可執(zhí)行運(yùn)算(例如mbCurrAddr%mbPerLine)以檢查其結(jié)果是否為0。在一實(shí)施例中,可執(zhí)行下列計(jì)算a=(mbCurrAddr%mbPerLine)需注意到mbCurrAddr與對應(yīng)于要譯碼的二進(jìn)制符號的目前宏區(qū)塊位置有關(guān),而mbPerLine與每一已知列的宏區(qū)塊的數(shù)量有關(guān)。上面計(jì)算是使用一個(gè)除法、一個(gè)乘法以及一個(gè)減法而實(shí)施。進(jìn)一步描述由二進(jìn)制計(jì)算譯碼引擎624所實(shí)施的譯碼機(jī)制,參考圖6E,其顯示將被譯碼的圖像(16×8宏區(qū)塊且mbPerLine=16)。當(dāng)譯碼第35宏區(qū)塊時(shí)(mbCurrent標(biāo)記為35,而第36宏區(qū)塊尚未被完全譯碼)時(shí),需要來自先前已譯碼的上方宏區(qū)塊(標(biāo)記為19)以及左方宏區(qū)塊(標(biāo)記為34)的數(shù)據(jù)。上方宏區(qū)塊的信息可從mbNeighCtx[i]得到,其中i=mbCurrent%mbPerLine。因此,就這個(gè)例子而言,i=35%16,則i=3。在目前宏區(qū)塊被譯碼后,可使用CWRITE指令來更新陣列中的mbNeighCtxLeft605以及mbNeighCtx[i]601。當(dāng)另一例子時(shí),考慮下列mbCurrAddr∈其中,maxMB為8192而mbPerLine=120。在一實(shí)施例中,除可以通過乘上(1/mbPerLine)而實(shí)施,其查找儲(chǔ)存于芯片上存儲(chǔ)器的表(例如120×11位的表)。當(dāng)mbCurrentAddr為13位時(shí),可使用13×11位的乘法器。在一實(shí)施例中,完成乘法運(yùn)算的結(jié)果、儲(chǔ)存上方13位,以及執(zhí)行13×7位的乘法,借以儲(chǔ)存較低13位。最后,執(zhí)行13位的減法以決定「a」。運(yùn)算的全部順序會(huì)使用到2個(gè)周期,而結(jié)果將被儲(chǔ)存以使用在其他運(yùn)算,以及當(dāng)mbCurrAddr值改變時(shí)再計(jì)算一次。在部分實(shí)施例中,模數(shù)(modulo)運(yùn)算不會(huì)被執(zhí)行,反而可使用執(zhí)行單元內(nèi)的著色邏輯電路以提供對齊置于片段的第一線的第一mbAddrCurr值。舉例來說,上述著色邏輯電路可執(zhí)行下列計(jì)算mbAddrCurr=absoluteMbAddrCurr-n×mbPerLine。因?yàn)?,部分H.264彈性宏區(qū)塊排序(FlexibilityMacroblockOrdering,F(xiàn)MO)模式具有一些非常復(fù)雜的鄰近結(jié)構(gòu),為了復(fù)制這些模式,可在譯碼系統(tǒng)200的額外著色器計(jì)算左方/上方的可得性,并載入至可變長度譯碼單元530a的一或多個(gè)暫存器。通過離開載入可變長度譯碼單元530a,當(dāng)啟動(dòng)全部H.264模式以進(jìn)行符號譯碼時(shí)可減少硬件的復(fù)雜性。CWRITE指令從mbNeighCtxCurrent603復(fù)制適當(dāng)?shù)臋谖恢羗bNeighCtxTop[]601以及mbNeighCtxLeft[](例如陣列564的左方宏區(qū)塊)。根據(jù)是否設(shè)定mBaffFrameFlag(MBAFF)以及目前與先前宏區(qū)塊是否為欄位或是幀譯碼,則特定mbNeighCtxTop[]601以及mbNeighCtxLeft[]數(shù)據(jù)寫入。當(dāng)(mbAddrCurr%mbPerLine==0)成立時(shí),標(biāo)記mbNeighCtxLeft605為不可用(例如其被初始化成0)。使用CWRITE指令可移除mbNeighCtx存儲(chǔ)器564、局部暫存器612以及總體暫存器614的內(nèi)容。例如,CWRITE指令移動(dòng)鄰近內(nèi)容存儲(chǔ)器564的相關(guān)內(nèi)容至第i個(gè)宏區(qū)塊(例如mbNeighCtx[i]或是目前宏區(qū)塊)的左方以及上方區(qū)塊,并且亦清除mbNeighCtxCurrent暫存器603。如前文所描述,上方指標(biāo)607c以及左方指標(biāo)607b與鄰近內(nèi)容存儲(chǔ)器564有關(guān)。在CWRITE指令之后,上方索引增加1,并且目前宏區(qū)塊的內(nèi)容移動(dòng)到陣列內(nèi)的上方位置以及左方位置。上述機(jī)構(gòu)可減少讀出/寫入時(shí)存儲(chǔ)器陣列中讀出/寫入端口的數(shù)量。可使用INSERT指令來更新鄰近內(nèi)容存儲(chǔ)器564、局部暫存器612以及總體暫存器614的內(nèi)容,如前文所述。例如,可使用INSERT指令(例如INSERT$mbNeighCtxCurrent_1,#Imm10,SRC1)來寫入目前宏區(qū)塊。后來的運(yùn)算不會(huì)影響上方指標(biāo)607c以及左方指標(biāo)607b(即只寫入至目前位置)。INSERT指令以及來自二進(jìn)制計(jì)算譯碼模塊624的更新被寫入至鄰近內(nèi)容存儲(chǔ)器564的mbNeighCtxCurrent陣列601。左方指標(biāo)607b指向存儲(chǔ)器564的元素,其相同于鄰近(鄰近于mbNeighCtx601)陣列元素(即mbNeighCtx[i-1])。鑒于上述關(guān)于得到內(nèi)容以及模型信息,下文將根據(jù)內(nèi)容以及模型信息討論二進(jìn)制計(jì)算譯碼模塊624以及計(jì)算譯碼。二進(jìn)制計(jì)算譯碼模塊624在BARD指令下操作。BARD指令的示范格式描述如下BARDDST,SRC2,SRC1其提供二進(jìn)制計(jì)算譯碼運(yùn)算,其中各二進(jìn)制重復(fù)譯碼導(dǎo)致單一位輸出。輸入?yún)?shù)描述如下SRC1=binIdx/ctxIdx,為取得內(nèi)容模塊622的輸出;以及SRC2=bypassFlag,為二進(jìn)制化模塊620的輸出。當(dāng)使用轉(zhuǎn)發(fā)暫存器時(shí),一示范格式可包括BARD.F1.F2,其指示轉(zhuǎn)發(fā)暫存器。假如未得到一或兩個(gè)對應(yīng)的轉(zhuǎn)發(fā)標(biāo)志,則表示轉(zhuǎn)發(fā)暫存器未被使用。注意到二進(jìn)制計(jì)算譯碼模塊624亦接收如前文所描述的重置信號。特別地,在接收重置信號之后,二進(jìn)制計(jì)算譯碼模塊624維持重置信號直到接收到第一次呼叫BARD指令。之后,重置信號被清除。在運(yùn)算中,二進(jìn)制計(jì)算譯碼模塊624接收內(nèi)容索引(ctxIdx)值以及指標(biāo)至來自取得內(nèi)容模塊622的譯碼位流(binIdx)的目前位分析位置。二進(jìn)制計(jì)算譯碼模塊624使用來自于碼長偏移量暫存器608以及碼長范圍暫存器606的偏移量以及范圍值以記錄譯碼引擎的目前間隔狀態(tài)(偏移量,偏移量+范圍)。二進(jìn)制計(jì)算譯碼模塊624使用內(nèi)容索引值以存取內(nèi)容表(CTX_TABLE),其依序使用以存取目前可能狀態(tài)pStateIdx以及高可能性符號值。使用pStateIdx(例如來自于儲(chǔ)存在遠(yuǎn)端或芯片上存儲(chǔ)器的表單)以讀取低可能性符號子范圍值、下一個(gè)高可能性符號值以及下一個(gè)低可能性符號的可能值。根據(jù)高可能性符號值的狀態(tài)、下一個(gè)范圍以及可能性信息,二進(jìn)制計(jì)算譯碼模塊624計(jì)算目前二進(jìn)制符號的高可能性符號值。二進(jìn)制計(jì)算譯碼模塊624輸出二進(jìn)制信號(位或是二進(jìn)制值,例如b0、b1、...bn)至二進(jìn)制字串暫存器616。接著,對下一個(gè)二進(jìn)制的相同或是不同內(nèi)容重復(fù)程序,例如從二進(jìn)制字串暫存器616至取得內(nèi)容模塊622的反饋連接658所顯示。二進(jìn)制計(jì)算譯碼模塊624根據(jù)高可能性符號值的選擇而更新偏移量以及范圍值和可能性狀態(tài)。此外,二進(jìn)制計(jì)算譯碼模塊624將目前高可能性符號以及可能性狀態(tài)寫入至內(nèi)容表以供后來的內(nèi)容使用。注意到關(guān)于轉(zhuǎn)發(fā)暫存器F1以及轉(zhuǎn)發(fā)暫存器F2的使用,當(dāng)信號發(fā)出轉(zhuǎn)發(fā)時(shí),指令可能或是不可能具有延遲。例如,當(dāng)從二進(jìn)制化模塊620轉(zhuǎn)發(fā)至取得內(nèi)容模塊622中,沒有延遲存在,且可在下一個(gè)周期發(fā)出GCTX指令。在從取得內(nèi)容模塊622轉(zhuǎn)發(fā)至二進(jìn)制計(jì)算譯碼模塊624中,會(huì)使用到4個(gè)周期。當(dāng)在周期j發(fā)出GCTX指令時(shí),則可在周期(j+5)發(fā)出BARD指令。有用指令的缺少會(huì)導(dǎo)致延遲槽最多填充4個(gè)NOP。在從二進(jìn)制化模塊620轉(zhuǎn)發(fā)至二進(jìn)制計(jì)算譯碼模塊624中,沒有延遲存在。在從二進(jìn)制計(jì)算譯碼模塊624轉(zhuǎn)發(fā)至取得內(nèi)容模塊622中,當(dāng)在周期j發(fā)出BARD指令時(shí),則可在周期(j+5)發(fā)出GCTX指令。在從二進(jìn)制計(jì)算譯碼模塊624轉(zhuǎn)發(fā)至二進(jìn)制化模塊620中,如果第二二進(jìn)制字串被保留且二進(jìn)制計(jì)算譯碼模塊624與二進(jìn)制化模塊620之間有切換存在,則沒有延遲存在。通過保留第二二進(jìn)制字串,可允許發(fā)出BARD至BARD指令以供不需忍受延遲的旁路(bypass)情況。CAVLC譯碼已經(jīng)描述用于CABAC譯碼的可變長度譯碼單元530a,目前將針對譯碼系統(tǒng)200的CAVLC實(shí)施例作進(jìn)一步描述,其亦稱為可變長度譯碼單元530b,如圖7A所顯示。在描述CAVLC架構(gòu)之前,先簡單描述在可變長度譯碼單元530b中內(nèi)容的H.264CAVLC程序。已知,CAVLC程序編碼有關(guān)宏區(qū)塊或是其位置的信號的電平(例如大小),以及電平何時(shí)會(huì)重復(fù)(例如多少周期),以避免需要對每一位做譯碼。位流562b接收以及分析上述信息,其中當(dāng)信息由譯碼可變長度譯碼單元530b的譯碼引擎使用時(shí),緩沖器被填充??勺冮L度譯碼單元530b通過從已接收位流所擷取具有電平以及運(yùn)行(run)系數(shù)的宏區(qū)塊信息來反向編碼過程并重建信號。因此,可變長度譯碼單元530b從位流緩沖器562b接收宏區(qū)塊信息,并分析串流已分別得到電平以及運(yùn)行系數(shù)值給電平以及運(yùn)行陣列的暫時(shí)儲(chǔ)存器。舉例來說,電平以及運(yùn)行陣列讀出對應(yīng)于宏區(qū)塊中區(qū)塊的4×4區(qū)塊的像素,接著清除電平以及運(yùn)行陣列以供下一個(gè)區(qū)塊使用。依照H.264標(biāo)準(zhǔn),軟件可根據(jù)4×4構(gòu)建區(qū)塊而使用全部的宏區(qū)塊?,F(xiàn)在提供有關(guān)于譯碼宏區(qū)塊信息的一般操作,下列敘述提出在CAVLC譯碼程序的內(nèi)容中可變長度譯碼單元530b的不同元件,可將符合實(shí)際應(yīng)用的各種變動(dòng)列入考慮。熟悉此技藝的人士可知下列所使用的許多術(shù)語(例如不同參數(shù)的標(biāo)號)是出自H.264規(guī)格,為了簡潔不再贅述,除非是有助于了解所述的不同程序和/或元件,才會(huì)再做進(jìn)一步的說明。圖7A系顯示可變長度譯碼單元530b一實(shí)施例的方塊圖。圖7A系顯示單一可變長度譯碼單元530b,而單一可變長度譯碼單元530b用以在實(shí)施例中譯碼單一位流。同樣的原理可應(yīng)用至具有額外可變長度譯碼單元的譯碼系統(tǒng)200,可同時(shí)譯碼多個(gè)(例如兩個(gè))串流。簡單地說,圖7A系顯示可變長度譯碼單元530b的選擇元件,而圖7B系顯示CAVLC譯碼的表格結(jié)構(gòu)。雖然下列敘述是有關(guān)宏區(qū)塊譯碼的內(nèi)容,但是本發(fā)明所提出的原理可應(yīng)用到各種區(qū)塊譯碼,將不再進(jìn)一步描述相同的部分??勺冮L度譯碼單元530b用以分析位流、初始化譯碼硬件與暫存器/存儲(chǔ)器結(jié)構(gòu),以及階段-運(yùn)行譯碼。上述H.264標(biāo)準(zhǔn)的CAVLC譯碼程序的上述各功能將進(jìn)一步描述于后。關(guān)于位流緩沖器操作,在CABAC以及CAVLC運(yùn)算之間共用SREG串流緩沖器/DMA引擎562,因此除了下面提及CABAC以及CAVLC模式之間的操作差異之外,為了簡潔將不再進(jìn)一步描述相同的部分。CABAC以及CAVLC譯碼實(shí)施例皆使用相同的內(nèi)容存儲(chǔ)器564,但是欄位(例如結(jié)構(gòu))不相同,其將描述于后。因此,當(dāng)CAVLC的內(nèi)容存儲(chǔ)器564操作相似于前文所描述的CABAC運(yùn)算時(shí),為了簡潔將不再進(jìn)一步描述相同的部分。此外,總體暫存器614以及局部暫存器612亦被使用,因此將不再進(jìn)一步描述相同的部分。參考圖7A,可變長度譯碼單元530b包括硬件的不同模塊,其包括系數(shù)符記(token)模塊(coeff_token)710、電平碼模塊(CAVLC_LevelCode)712、電平模塊(CAVL_CLevel)714、電平0模塊(CAVLC_L0)716、零電平模塊(CAVLC_ZL)718、運(yùn)行模塊(CAVLC_Run)720、電平陣列(LevelArray)722以及運(yùn)行陣列(RunArray)724。譯碼系統(tǒng)亦包括如前文所描述的SREG串流緩沖器/DMA引擎562、總體暫存器614、局部暫存器612以及鄰近內(nèi)容存儲(chǔ)器564??勺冮L度譯碼單元530b與執(zhí)行單元420a的接口包括相同于前文所述的CABAC實(shí)施例的一或多個(gè)目標(biāo)總線與對應(yīng)的暫存器(例如目標(biāo)暫存器),以及兩個(gè)來源總線與對應(yīng)的暫存器(SRC1以及SRC2等)。通常,根據(jù)片段的種類,驅(qū)動(dòng)軟件128(圖1)準(zhǔn)備并載入CAVLC著色器至執(zhí)行單元420a。CAVLC著色器使用標(biāo)準(zhǔn)指令集再加上額外的指令集,包括coeff_token、CAVLC_LevelCode、CAVLC_Level、CAVLC_L0、CAVLC_ZL以及CAVLC_Run指令以譯碼位流。額外的指令系包括有關(guān)于電平陣列722以及運(yùn)行陣列724的讀取以及清除運(yùn)算的READ_LRUN以及CLR_LRUN指令。在一實(shí)施例中,在發(fā)出其他指令前,CAVLC著色器所執(zhí)行的第一個(gè)指令包含INIT_CTX指令和INIT_ADE指令。這兩個(gè)指令初始化可變長度譯碼單元530b以譯碼CAVLC位流,并從自動(dòng)安排串譯碼的指標(biāo)載入位流至先進(jìn)先出緩沖器,稍后將說明這兩個(gè)指令。因此,可變長度譯碼單元530b可用以分析位流、初始化譯碼硬件與暫存器/存儲(chǔ)器結(jié)構(gòu),以及階段-運(yùn)行譯碼。H.264標(biāo)準(zhǔn)的CAVLC譯碼程序的上述各功能將進(jìn)一步描述于后。關(guān)于分析位流的指令,除了先前描述于CABAC程序的READ以及INIT_BSTR指令會(huì)共用于CAVLC程序之外,還有兩個(gè)其他指令分析位流存取更有關(guān)于CAVLC程序,即INPSTR指令(對應(yīng)于檢查字串模塊570)以及INPTRB指令(圖5C中前次載入至可變長度譯碼邏輯電路550)。INPSTR指令以及INPTRB指令不需要限定在CAVLC操作(例如上述指令可使用在其他程序,如CABAC、VC-1以及MPEG)。使用INPSTR指令以及INPTRB指令以偵測特定圖型(pattern)(例如數(shù)據(jù)開始或是結(jié)束圖型)是否出現(xiàn)在片段、宏區(qū)塊等,用以致能位流的讀出而不需要進(jìn)行位流。在一實(shí)施例中,指令的順序包括INPSTR以及INPTRB然后READ指令的實(shí)施。INPSTR指令的示范格式描述如下INPSTRDST其中,在一實(shí)施例中,檢查位流并傳回SREG暫存器562a的最高有效16位在目標(biāo)暫存器的較低16位。目標(biāo)暫存器的上16位包含sREGbitptr值。由于此操作,數(shù)據(jù)并未從SREG暫存器562a移除。根據(jù)下列示范偽碼(pseudocode)可實(shí)施INPSTR指令MODULEINPSTR(DST)OUTPUT[31:0]DSTDST={ZE(sREGbitptr),sREG[msbmsb-15]};ENDMODULE另一個(gè)分析位流的指令為INPTRB指令,其檢查原始字節(jié)序列承載(rawbytesequencepayload,RBSP)尾隨位(例如排列成字節(jié)的位流)。INPTRB指令提供位流暫存器562b的讀取。INPTRB指令的示范格式描述如下INPTRBDST。在INPTRB運(yùn)算中,沒有位從SREG暫存器562a移除。當(dāng)SREG暫存器562a的高有效位包含例如100時(shí),則SREG暫存器562a包含RBSP停止位,以及字節(jié)內(nèi)剩下的位為alignmentzerobits。根據(jù)下列示范偽碼可實(shí)施INPTRB指令MODULEINPTRB(DST)OUTPUTDST;REG[7:0]P;P=sREG[msbmsb-7];Sp=sREGbitptr;T[7:0]=(P>>sp)<<sp;DST[1]=(T==0x80)?1:0;DST=!(CVLC_BufferBytesRemaining>0);ENDMODULE提供READ指令以供位流緩沖器562b中數(shù)據(jù)調(diào)正?,F(xiàn)在將描述可變長度譯碼單元530b的額外位串緩沖器操作,目前將針對CAVLC操作的的初始化作描述,尤其是存儲(chǔ)器、暫存器結(jié)構(gòu)以及譯碼引擎(例如CAVLC模塊582)的初始化。在片段起始處且在譯碼對應(yīng)于第一宏區(qū)塊暫存器結(jié)構(gòu)的語法成分之前,總體暫存器614、局部暫存器612以及CAVLC模塊582被初始化。在一實(shí)施例中,驅(qū)動(dòng)軟件128發(fā)出INIT_CAVLC指令以進(jìn)行初始化。INIT_CAVLC指令的示范格式描述如下INIT_CAVLCSRC2,SRC1其中,SRC2包括片段數(shù)據(jù)中譯碼的字節(jié)的數(shù)目。其值寫入于內(nèi)部CVLC_bufferBytesRemaining內(nèi)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(一實(shí)施例系使用對應(yīng)于4∶2:0格式的1的chroma_format_idc值,然而部分實(shí)施例可使用其他采樣機(jī)制);以及SRC1[31:30]=未定義。關(guān)于INIT_CAVLC指令,SRC1內(nèi)的值被寫入至總體暫存器614中所對應(yīng)的欄位。再者,SRC2內(nèi)的值被寫入至由INIT指令所設(shè)定的內(nèi)部暫存器(例如CVLC_bufferByteRemaining暫存器)。使用CVLC_bufferByteRemaining暫存器以復(fù)原任何錯(cuò)誤位流,如前文所述。舉例來說,可變長度譯碼單元530b(例如SREG串流緩沖器/DMA引擎562)記錄了分析已知片段的位流中緩沖位的信息。當(dāng)使用位流時(shí),可變長度譯碼單元530b計(jì)數(shù)并更新CVLC_bufferByteRemaining值。當(dāng)其值低于0時(shí),其中低于0的值是表示緩沖器或是位流錯(cuò)誤,提示處理的終止以及返回至應(yīng)用控制或是由驅(qū)動(dòng)軟件128控制以處理復(fù)原。INIT_CAVLC指令亦初始化可變長度譯碼單元530b的不同儲(chǔ)存結(jié)構(gòu),包括在某方面來說相似于先前描述的CABAC程序的鄰近內(nèi)容存儲(chǔ)器564、mbNeighCtxLeft暫存器605以及mbNeighCtxCurrent暫存器603。已知CAVLC譯碼的內(nèi)容本質(zhì),根據(jù)前次譯碼宏區(qū)塊時(shí)CAVLC_TOTC指令所搜集的信息來譯碼目前的宏區(qū)塊,亦即左方宏區(qū)塊儲(chǔ)存于左方mbNeighCtxLeft暫存器605并由指標(biāo)607b所指向,而上方宏區(qū)塊儲(chǔ)存于陣列元素[i]601中并由指標(biāo)607c所指向。使用INIT_CAVLC指令來初始化上方指標(biāo)607c與左方指標(biāo)607b,并更新總體暫存器614。為了判斷鄰近宏區(qū)塊(例如左方鄰近)是否存在(即有效),可由CAVLC_TOTC指令執(zhí)行運(yùn)算(例如mbCurrAddr%mbPerLine),其相似于CABAC實(shí)施例中所執(zhí)行的同一程序,因此將不再描述。相似于所描述的CABAC程序,使用CWRITE指令可移除鄰近內(nèi)容存儲(chǔ)器564的內(nèi)容,而使用INSERT指令可更新鄰近內(nèi)容存儲(chǔ)器564的內(nèi)容、局部暫存器612以及總體暫存器614,其中可使用INSERT指令以供寫入至mbNeighCtxCurrent暫存器603。維持在鄰近內(nèi)容存儲(chǔ)器564的數(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指令時(shí),更新mbNeighCtx[]鄰近值,然后初始mbNeighCtxCurrent暫存器603。已描述由可變長度譯碼單元530b初始的內(nèi)容存儲(chǔ)器結(jié)構(gòu)以及初始化,下面將描述可變長度譯碼單元530b(特別是CAVLC_TOTC指令)如何使用鄰近內(nèi)容信息以計(jì)算總系數(shù)(TotalCoeff,TC),其之后將被使用來判斷是否應(yīng)該使用CAVLC表格以譯碼符號。通常,CAVLC的譯碼是利用描述于H.264規(guī)格的可變長度譯碼表格(于此稱為CAVLC表格),其中根據(jù)先前已譯碼符號的內(nèi)容選擇CAVLC表格以譯碼各符號。即對每一格符號而言,其為不相同的CAVLC表格。圖7B系顯示基本表格結(jié)構(gòu),其為可變大小的二維陣列。提供表格的陣列(每一個(gè)表格可為一特定符號),而每一個(gè)符號為霍夫曼(Huffman)編碼。霍夫曼碼被儲(chǔ)存成下列結(jié)構(gòu)的表格structTable{unsignedhead;structtable{unsignedval;unsignedshv;}table[];}Table[];下面將描述根據(jù)唯一前置(prefix)編碼用以比對的方法(MatchVLC函數(shù))。通常,CAVLC表格包括可變長度部分以及固定長度部分。通過執(zhí)行一些固定大小的索引查找(lookup)可簡化比對。在MatchVLC函數(shù)中,可執(zhí)行READ運(yùn)算而不從SREG暫存器562a移除位。因此,對處理位流的位流緩沖器562b而言,READ運(yùn)算不同于前文所描述的READ指令。在下面所描述的MatchVLC函數(shù)中,一些位(fixL)從位流緩沖器562b被復(fù)制,然后于一指定表格中查找。指定表格內(nèi)的各項(xiàng)目包含特定格式(例如值以及以位型式的大小)。使用項(xiàng)目的大小以進(jìn)行位流。FUNCTIONMatchVLC(Table,maxIdx)INPUTTable;INPUTmaxIdx;Idx1=CLZ(sREG);//countnumberofleadingzerosIdx1=(Idx1>maxIdx)?maxIdx:Idx1;fixL=Table[Idx1].head;SHL(sREG,Idx1+#1);//shiftbufferIdx1+1bitleftIdx2=(fixL)?0:READ(fixL);(val,shv)=Table[Idx1][Idx2];SHL(sREG,shv);returnval;ENDFUNCTON圖7B系顯示上述表格結(jié)構(gòu)的示范二維陣列的方塊圖,用以描述在CAVLC譯碼的內(nèi)容中的MatchVLC函數(shù)。從H.264標(biāo)準(zhǔn)內(nèi)的表格9-5中得到當(dāng)nC==-1時(shí)的例子,其描述如下在偽碼(pseudocode)方面,上述表格可表示如下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}}};使用上述表格結(jié)構(gòu),可使用上述的MatchVLC函數(shù)以實(shí)施CAVLC譯碼。由于MatchVLC函數(shù),對位流執(zhí)行計(jì)算前導(dǎo)0以存取已知語法成分的表格。再者,通過計(jì)算前導(dǎo)0的值是否大于Idx的最大值,MatchVLC函數(shù)可啟動(dòng)計(jì)算前導(dǎo)0運(yùn)算(例如在部分實(shí)施例中,使用計(jì)算前導(dǎo)0模塊576與讀取模塊572),然后傳回maxIdx(其處置的情況為0000000,如圖7B的表格所顯示)。MatchVLC函數(shù)以及表格結(jié)構(gòu)的另一優(yōu)點(diǎn)為不需要多個(gè)指令來處置這些情況,其由下面MatchVLC區(qū)段所處置Idx1=CLZ(sREG)計(jì)算前導(dǎo)0的數(shù)量,以及Idx1=(Idx1>maxIdx)?maxIdx:Idx1。接著,使用MatchVLC函數(shù)的下列區(qū)段移除已使用的位SHL(sREG,Idx1+#1)。使用下面MatchVLC區(qū)段讀取子陣列(sub-array)的標(biāo)頭fixL=Table[Idx1].head,以及Idx2=(!fixL)?0:READ(fixL),其傳送最大數(shù)量的位數(shù)以被不確定地讀取。前導(dǎo)0可以相同,但尾隨位的大小可以改變。因此,在一實(shí)施例中,可實(shí)施CASEX種類情況敘述(使用較多存儲(chǔ)器,但較簡單的碼結(jié)構(gòu))。使用(val,shv)=Table[Idx1][Idx2]以及SHL(sREG,shv)讀取表格的實(shí)際值,其亦顯示實(shí)際上多少位為語法成分所使用。這些位從位流被移除,且語法成分的值返回至目標(biāo)暫存器。已描述VLC匹配的方法以及表格結(jié)構(gòu)的配置,接著返回參考圖7A以描述CAVLC譯碼引擎或是程序(例如CAVLC模塊582)。一旦位流被載入,且譯碼引擎、存儲(chǔ)器結(jié)構(gòu)以及暫存器被載入,通過驅(qū)動(dòng)軟件128發(fā)出CAVLCTOTC指令可啟動(dòng)系數(shù)符記模塊710。在一實(shí)施例中,CAVLCTOTC指令具有下面示范格式CAVLC_TOTCDST,S1,其中,S1以及DST分別包括一輸入暫存器以及一內(nèi)部輸出暫存器,具有下面所提供的示范格式SRC1[3:0]=blkIdxSRC1[18:16]=blkCatSRC1[24]=iCbCr剩下的位為未定義。輸出格式描述如下DST[31:16]=TrailingOnesDST[15:0]=TotalCoeff因此,如圖所顯示,系數(shù)符記模塊710接收對應(yīng)于mbCurrAddr、mbType、是否正在處理色度通道的指示(例如iCbCr),以及blkIdx(例如區(qū)塊索引,因?yàn)閳D像可被分成許多區(qū)塊)。對從位流緩沖器562b所存取的已知宏區(qū)塊而言,傳送blkIdx,不管是8×8像素區(qū)塊或是4×4像素區(qū)塊正在已知位置上進(jìn)行處理。由驅(qū)動(dòng)軟件128提供上述信息。系數(shù)符記模塊710包括一查找表。根據(jù)前文描述而輸入至系數(shù)符記模塊710的查找表,可得到拖尾系數(shù)的個(gè)數(shù)(TrailingOnes)以及非零系數(shù)(TotalCoeff)的個(gè)數(shù)。TrailingOnes傳送有多少個(gè)1在一列上,而TotalCoeff傳送有多少運(yùn)行/電平對(run/levelpair)系數(shù)在從位流抽出的塊狀數(shù)據(jù)上。TrailingOnes以及TotalCoeff分別提供至CAVLC電平模塊714以及零電平模塊718。TrailingOnes亦提供至電平0模塊716,其對應(yīng)于從位流緩沖器562b所擷取的第一電平(例如直流(DC)值)。電平模塊714記錄符號的字尾(suffix)長度(例如尾隨1的數(shù)目),以及電平模塊714結(jié)合電平碼(levelCode)來計(jì)算電平值(level[Idx]),之后電平值儲(chǔ)存在電平陣列722以及運(yùn)行陣列724內(nèi)。電平模塊714操作在CAVLC_LVL指令下,其具有下列格式CAVLC_LVLDST,S2,S1,其中S1=Idx(16-bit);S2=suffixLength(16-bit);以及DST=suffixLength(16-bit)。字尾長度(suffixLength)傳送碼字(codeword)的大小為何。來自驅(qū)動(dòng)軟件128的輸入提供指定字尾長度的大小的信息。此外,在一實(shí)施例中,因?yàn)樽治查L度值被更新,DST以及S2可選擇為同一暫存器。更注意到,轉(zhuǎn)發(fā)暫存器(例如維持由已知模塊內(nèi)部地產(chǎn)生的數(shù)據(jù))亦可被使用,例如F1以及F2。由已知指令內(nèi)的轉(zhuǎn)發(fā)標(biāo)志指示指令以及對應(yīng)模塊是否使用到轉(zhuǎn)發(fā)暫存器。符號F1(即使用轉(zhuǎn)發(fā)來源1的值,在一實(shí)施例中可由指令中的位26所指示)以及符號F2(即使用轉(zhuǎn)發(fā)來源2的值,在一實(shí)施例中可由指令中的位27所指示)可表示轉(zhuǎn)發(fā)暫存器。當(dāng)使用轉(zhuǎn)發(fā)暫存器時(shí),CAVLC_LVL指令可具有下列示范格式CAVLC_LVL.F1.F2DST,SRC2,SR1,其中當(dāng)不是F1就是F2被設(shè)定時(shí)(例如成立),所指定的轉(zhuǎn)發(fā)來源被當(dāng)成輸入。在電平模塊714的情況中,轉(zhuǎn)發(fā)暫存器F1對應(yīng)于由電平模塊714產(chǎn)生的電平索引(level[Idx]),其在遞增(increment)模塊內(nèi)遞增并輸入至多工器730。同樣地,轉(zhuǎn)發(fā)暫存器F2對應(yīng)于字尾長度(suffixLength),其由電平模塊714所產(chǎn)生并輸入至多工器728。多工器730以及多工器728的其他輸入包括執(zhí)行單元暫存器輸入(在圖7A中標(biāo)示為EU),如下文所描述。電平模塊714的另一輸入是由電平碼模塊712所提供的電平碼。電平碼模塊712以及電平模塊714的結(jié)合運(yùn)算譯碼可譯碼電平值(電平為按比例縮放(scaling)之前的轉(zhuǎn)換系數(shù)值)。透過具有下列示范格式的指令可致能電平碼模塊712。CAVLC_LCSRC1,其中SRC1=suffixLength(16位)。當(dāng)使用轉(zhuǎn)發(fā)暫存器F1時(shí),指令可表示如下CAVLC_LVL.F1SRC1,其中如果設(shè)定F1,則轉(zhuǎn)發(fā)SRC1被當(dāng)成輸入。如第7A圖所顯示,當(dāng)設(shè)定F1時(shí)(例如F1=1),電平碼模塊712獲得轉(zhuǎn)發(fā)SRC1值(例如來自電平模塊714的字尾長度)以作為輸入,否則輸入是從執(zhí)行單元暫存器所獲得(例如F1=0)?;氐诫娖侥K714,字尾長度輸入可以是由電平模塊714經(jīng)由多工器728所轉(zhuǎn)發(fā),或是經(jīng)由執(zhí)行單元暫存器透過多工器728所提供。此外,Idx輸入亦可由電平模塊714經(jīng)由多工器730所轉(zhuǎn)發(fā)(且由遞增模塊來遞增,或是在部分實(shí)施例中,能自動(dòng)遞增而不需要遞增模塊),或是經(jīng)由執(zhí)行單元暫存器透過多工器730所提供。再者,電平模塊714亦直接從電平碼模塊712接收電平碼輸入。除了至轉(zhuǎn)發(fā)暫存器的輸出之外,電平模塊714亦提供電平索引(level[idx])輸出至電平陣列722。如前文所提到,TrailingOnes輸出至電平0模塊716。電平0模塊716經(jīng)由下列指令而致能CAVLC_LVL0SRC,其中SRC=trailingOnes(coeff_token)。電平0模塊716的輸出包括電平索引(Level[Idx]),其被提供至電平陣列722。系數(shù)值被編碼成為正負(fù)號以及大小。電平0模塊716提供系數(shù)的正負(fù)號值。結(jié)合來自CAVLC電平模塊714的大小值以及來自電平0模塊716的正負(fù)號值,并寫入至電平陣列722。使用電平索引(level[Idx])來指定寫入的位置。在一實(shí)施例中,系數(shù)是在子區(qū)塊(區(qū)塊為8×8)的一個(gè)4×4矩陣內(nèi),而不按照光柵(raster)順序。陣列之后轉(zhuǎn)換成4×4矩陣。換句話說,被譯碼的系數(shù)電平以及運(yùn)行不是光柵格式。從電平-運(yùn)行數(shù)據(jù),4×4矩陣可以被重建(但是以鋸齒形掃描順序),接著重新排列成光柵順序4×4。從系數(shù)符記模塊710輸出的TotalCoeff被提供至零電平模塊718。零電平模塊718可經(jīng)由下列指令而致能CAVLC_ZLDST,SRC1其中,SRC1=maxNumCoeff(16位)以及DST=ZerosLeft(16位)。maxNumCoeff系由H.264標(biāo)準(zhǔn)所給定,并被重送以作為指令的原始值。換句話說,maxNumCoeff是由軟件所設(shè)定。在部分實(shí)施例中,maxNumCoeff可被儲(chǔ)存在硬件中。變換系數(shù)被編碼成(電平,運(yùn)行)格式,其與被編碼成0的系數(shù)(電平)的數(shù)目有關(guān)。零電平模塊718提供兩個(gè)輸出ZerosLeft以及Reset(reset=0),其分別被提供至多工器740以及多工器742。多工器740亦接收來自運(yùn)行模塊720的轉(zhuǎn)發(fā)暫存器F2。多工器742接收來自運(yùn)行模塊720的已遞增(在部分實(shí)施例中是經(jīng)由遞增模塊或是其他方式)的轉(zhuǎn)發(fā)暫存器F1。運(yùn)行模塊720分別從多工器740以及多工器742接收ZerosLeft以及Idx輸入并提供運(yùn)行索引(Run[Idx])輸出至運(yùn)行陣列724。如前文所描述,因?yàn)檫\(yùn)行-長度編碼被用作進(jìn)一步壓縮,則系數(shù)被編碼成(電平,運(yùn)行)格式。舉例來說,假設(shè)擁有下列的值101212151911100000010,則可被編碼成(10,0)(12,1)(15,0)(19,0)(1,2)(0,5)(1,0)(0,0)。這個(gè)碼字通常較短。索引為電平索引的對應(yīng)索引。運(yùn)行模塊720可經(jīng)由下列指令而致能CAVLC_RUNDST,S2,S1,其中,由于ZerosLeft值被更新,DST以及S2可選擇為相同暫存器。因此,CAVLC_RUN指令的示范不具正負(fù)號值顯示如下S1=Idx(16-bit),S2=ZerosLeft(16-bit),DST=Zerosleft(16-bit)。參考圖7A,轉(zhuǎn)發(fā)暫存器被使用,其中CAVLC_RUN指令可得到下列格式CAVLC.F1.F2DST,SRC2,SRC1,其中,當(dāng)不是F1就是F2被設(shè)定時(shí),則適當(dāng)?shù)霓D(zhuǎn)發(fā)來源被當(dāng)成輸入。關(guān)于兩暫存器暫列,電平陣列722對應(yīng)于電平,而運(yùn)行陣列724對應(yīng)于運(yùn)行。在一實(shí)施例中,各陣列包含16個(gè)元素。對電平陣列722而言,各元素的大小包括16位具正負(fù)號的值,而對運(yùn)行陣列724而言,其值為4位且不具正負(fù)號。使用下列指令分別從電平陣列722以及運(yùn)行陣列724讀取電平值以及運(yùn)行值。READ_LRUNDST,其中,在一實(shí)施例中,DST包括四個(gè)128位連續(xù)的暫時(shí)暫存器(例如執(zhí)行單元暫時(shí)或是共用暫存器)。上述操作讀取可變長度譯碼單元530內(nèi)的電平暫存器以及運(yùn)行暫存器,并儲(chǔ)存至目標(biāo)暫存器。當(dāng)此運(yùn)行被讀出并儲(chǔ)存于暫時(shí)暫存器時(shí),運(yùn)行值被轉(zhuǎn)換成16位不具正負(fù)號的值。舉例來說,前兩個(gè)暫存器維持16個(gè)16位的電平值(即陣列儲(chǔ)存第一16個(gè)系數(shù)),而第三以及第四暫存器維持16個(gè)16位的運(yùn)行值。當(dāng)超過16個(gè)系數(shù)時(shí),其被譯碼至存儲(chǔ)器。在一實(shí)施例中,以下列順序?qū)懭胫翟诘谝粫捍嫫髦校畹陀行?6位包含LEVEL值,而位16-31包含LEVEL[1]值等,直到位112-127包含LEVEL[7]值。接著,對第二暫存器對而言,最低有效16位包含LEVEL[8]等。相同的方法應(yīng)用在RUN值。根據(jù)下列示范指令格式,可使用CLR_LRUN指令來清除電平陣列722以及運(yùn)行陣列724的暫存器。上述可變長度譯碼單元530b的軟件(著色程序)以及硬件操作(例如模塊),特別是CAVLC模塊582,可使用下列偽碼來描述。MPEG譯碼以上已描述用作CABAC譯碼(經(jīng)由CABAC模塊580的可變長度譯碼單元530a)以及CAVLC譯碼(經(jīng)由CAVLC模塊582的可變長度譯碼單元530b)的譯碼系統(tǒng)200,接下來將描述譯碼系統(tǒng)200的MPEG實(shí)施例,于此稱為可變長度譯碼單元530c??勺冮L度譯碼單元530c是根據(jù)由MPEG模塊578(圖5C所顯示)所執(zhí)行的運(yùn)算而操作。為了簡化,與CABAC以及CAVLC實(shí)施例共有的特征(包括位流緩沖器以及對應(yīng)的指令)被省略,除了下列其他需要注意的部分。INIT指令設(shè)置可變長度譯碼單元530進(jìn)入MPEG模式,以及使用READ、NPSTR、INPTRB(解釋于前文)以及VLC_MPEG2指令的混合以譯碼MPEG-2位流。由著色器程序判斷使用何種方法。MPEG-2位流具有全決定文法(fullydeterministicgrammar),且著色碼執(zhí)行用以解密文法的方法。在一實(shí)施例中,對MPEG-2處理而言,實(shí)施表格以霍夫曼譯碼于MatehVLC_X函數(shù),描述于后。因此,兩指令被載入至MPEG模塊578,包括INIT_MPEG2指令以及VLC_MPEG2指令。INIT_MPEG2指令載入位流并設(shè)定可變長度譯碼單元530進(jìn)入MPEG2模式。在此模式中,當(dāng)?shù)谝幌禂?shù)為直流(DC)時(shí),總體暫存器614保持住值。在MPEG-2中有一或多個(gè)串流,其為相同的,但是根據(jù)是否為直流或是交流而有不同的解譯。位載入至VLD_globalRegister.InitDC暫存器被使用,而不是創(chuàng)造另一個(gè)指令。注意到對應(yīng)于總體暫存器614(例如映射到總體暫存器614(例如globalregister))的暫存器使用在CABAC以及CAVLC模式中,但是因?yàn)镸PEG2模式下而有不同的解譯(以及因此標(biāo)示不同)。因此,在宏區(qū)塊的開始,值(VLD_globalRegister.InitDC暫存器內(nèi)的位)被初始化成1。當(dāng)使用MatchVLC_3函數(shù)時(shí),判斷VLD_globalRegister.InitDC暫存器內(nèi)的位是否為1或是0。如果為1的話,位被改變成0,以供已知宏區(qū)塊后來的離散余弦變換(discretecosinetransform,DCT)符號進(jìn)行譯碼。由著色器以及內(nèi)部重置設(shè)定上述值。在實(shí)體部分,VLD_globalRegister.InitDC位為標(biāo)志值,其傳送被譯碼的DCT符號是否為已知宏區(qū)塊的DCT符號的開始。MPEG模塊578使用一具有符號的非常特定文法進(jìn)行譯碼,其中上述符號是使用限定數(shù)量的霍夫曼表格所譯碼。在具有特定符號值的著色器內(nèi)執(zhí)行文法的分析,其中特定符號值是使用具有#Imm16值使用于特定霍夫曼表格的VLC_MPEG2指令所得到,其應(yīng)該被使用以譯碼特定符號。在描述可變長度譯碼單元530c的不同元件之前,用以實(shí)施MPEG-2標(biāo)準(zhǔn)的不同表格的硬件以及軟件結(jié)構(gòu)的簡單描述如下。在MPEG-2標(biāo)準(zhǔn)(ISO-IEC13818-2(1995))中,所使用的編碼被定義在表B-1至表B-15,其為MPEG-2標(biāo)準(zhǔn)所提供的已知表格。在可變長度譯碼單元530c的不同實(shí)施例中,一或多個(gè)表B-1至表B-15以專業(yè)硬件型式而實(shí)施,例如合成為邏輯門。根據(jù)實(shí)施方式(例如HDTV、HDDVD等)或是所需的硬件安排,部分表格可以不用硬件方式來實(shí)施,而是可以使用其他指令(例如將描述于后的EXP-GOL_UD指令,或是透過READ指令)來實(shí)施。舉例來說,雖然表B-2、表B-3以及表B-11的邏輯門數(shù)量不大,所使用到的加法可能需要額外的多工器階段,其意味有關(guān)速度以及延遲。在部分實(shí)施例中,表B-5至表B-8不由硬件所支援,因?yàn)槠洳恍枰гO(shè)定檔。然而,部分實(shí)施例可透過對效能具有最小影響的不同指令(例如INPSTR、EXP_GOL_UD以及READ指令)而提供上述支援。繼續(xù)參考已知的MPEG表格,表B-1(Macroblock_address_increment)、表B-10(motion_code)以及表B-9(coded_block_pattern)具有相似的結(jié)構(gòu)。由于部分相似,上述三個(gè)表格可使用由MPEG模塊578執(zhí)行的MatchVLC函數(shù)而實(shí)施以及描述于后。對表B-9以及表B-10而言,示范的表格結(jié)構(gòu)表示如下structTable{unsignedhead;//表格地址的位數(shù)structtable{unsignedval:6;//表B-10中為5位unsignedshv:2;//實(shí)際位數(shù)}table[];}Table[];對表B-1而言,示范的表格結(jié)構(gòu)表示如下structTable{unsignedhead;//表格地址的位數(shù)structtable{unsignedval:5;unsignedshv:3;//實(shí)際位數(shù)}table[];}Table[];在下面功能中,只有SHL運(yùn)算能從SREG暫存器562a移除數(shù)據(jù)。不像著色器的READ指令,使用在MatchVLC函數(shù)的READ功能能從SREG暫存器562a移除位而不需要從SREG暫存器562b移除任何位。下面描述使用在MPEG-2中實(shí)施表格的MatchVLC函數(shù)以提供作為霍夫曼譯碼。FUNCTIONMatchVLC_1{T=READ(2);//讀取2位SHL(2);CASE(T){00:OUTPUT(1);01:OUTPUT(2);10:{Q=READ(1);SHL(1);CASE(Q){0:OUTPUT(0);1:OUTPUT(3);}}11:{Idx=CLO(sREG);//計(jì)算引導(dǎo)1Idx=min(Idx,7);shv=(Idx!=7)Idx+1:Idx;SHL(shv);OUTPUT(4+Idx);}}FUNCTIONMatchVLC_2{T=READ(2);//讀取2位SHL(2);CASE(T){00:OUTPUT(0);01:OUTPUT(1);10:OUTPUT(2);11:{Idx=CLO(sREG);//計(jì)算引導(dǎo)1Idx=min(Idx,8);shv=(Idx!=8)Idx+1:Idx;SHL(shv);OUTPUT(3+Idx);}}FUNCTIONMatchVLC_3{INIT_MBDC=TRUE;T=CLZ(sREG);SHL(T+1);CASE(T){0:IF(DC){DC=FALSE;Q=READ(1);SHL(1);OUTPUT({0,SGN(Q)*1});}ELSE{Q=READ(1);IF(!Q){OUTPUT({63,0});shv=1}//EOBELSE{R=READ(1);OUTPUT({0,SGN(R)*1});shv=2}SHL(shv);}1:{Q=READ(3);CASE(Q){1XX:OUTPUT({1,SGN(Q[1])*1});shv=2;01X:OUTPUT({2,SGN(Q)*1});shv=3;00X:OUTPUT({0,SGN(Q)*2});shv=3;}SHL(shv);}2:{Q=READ(2);SHL(2);CASE(Q){00:{R=READ(4);CASE(R){000X:OUTPUT({16,SGN(R)*1});001X:OUTPUT({5,SGN(R)*2});010X:OUTPUT({0,SGN(R)*7});011X:OUTPUT({2,SGN(R)*3});100X:OUTPUT({1,SGN(R)*4});101X:OUTPUT({15,SGN(R)*1});110X:OUTPUT({14,SGN(R)*1});111X:OUTPUT({4,SGN(R)*2});}Shv=4;}01X:SGN=READ(1);OUTPUT({0,SGN*3});shv=1;10X:SGN=READ(1);OUTPUT({4,SGN*1});shv=1;11X:SGN=READ(1);OUTPUT({3,SGN*1});shv=1;}SHL(shv);}3:{Q=READ(3);CASE(Q){00X:OUTPUT({7,SGN(Q)*1});01X:OUTPUT({6,SGN(Q)*1});10X:OUTPUT({1,SGN(Q)*2});11X:OUTPUT({5,SGN(Q)*1});}SHL(3);}4:{Q=READ(3);CASE(Q){00X:OUTPUT({2,SGN(Q)*2});01X:OUTPUT({9,SGN(Q)*1});10X:OUTPUT({0,SGN(Q)*4});11X:OUTPUT({8,SGN(Q)*1});}SHL(3);}5:Q=READ(19);OUTPUT({Q[18:13],Q[12:0]});6:{Q=READ(4);CASE(Q){000X:OUTPUT({16,SGN(Q)*1});001X:OUTPUT({5,SGN(Q)*2});010X:OUTPUT({0,SGN(Q)*7});011X:OUTPUT({2,SGN(Q)*3});100X:OUTPUT({1,SGN(Q)*4});101X:OUTPUT({15,SGN(Q)*1});110X:OUTPUT({14,SGN(Q)*1});111X:OUTPUT({4,SGN(Q)*2});}SHL(4);}7,8,9,10,11:JVLC(TableC[T]);}}FUNCTIONMatchVLC_4{T=CLZ(sREG);SHL(T+1);CASE(T){0:{Q=CLO(sREG);R=min(Q,7);shv=(R?。?)R+1:R;SHL(shv);CASE(R){0:S=READ(1);OUTPUT({0,SGN(S)*1});shv=1;1:S=READ(1);OUTPUT({0,SGN(S)*2});shv=1;2:{R=READ(2);SHL(2);CASE(R){0X:OUTPUT({0,SGN(R)*4});1X:OUTPUT({0,SGN(R)*5});}}3:{R=READ(3);SHL(3);CASE(R){00X:OUTPUT({9,SGN(R)*1});01X:OUTPUT({1,SGN(R)*3});10X:OUTPUT({10,SGN(R)*1});11X:OUTPUT({0,SGN(R)*8});}}4:{R=READ(3);CASE(R){0XX:OUTPUT({0,SGN(R)*9});shv=2;10X:OUTPUT({0,SGN(R)*12});shv=3;11X:OUTPUT({0,SGN(R)*13});shv=3;}SHL(shv);}5::{R=READ(2);SHL(2);CASE(R){0X:OUTPUT({2,SGN(R)*3});1X:OUTPUT({4,SGN(R)*2});}}6:S=READ(1);OUTPUT({0,SGN(S)*14});shv=1;7:S=READ(1);OUTPUT({0,SGN(S)*15});shv=1;}SHL(shv);}1:{Q=READ(2);SHL(2);CASE(Q){0X:OUTPUT({1,SGN(Q)*1});10:OUTPUT({63,0});//<EOB>11:R=READ(1);SHL(1);OUTPUT(0,SGN(R)*3});}}2:{Q=READ(2);SHL(2);CASE(Q){00:{R=READ(4);shv=4;CASE(R){000X:OUTPUT({1,SGN(R)*5});001X:OUTPUT({11,SGN(R)*1});010X:OUTPUT({0,SGN(R)*11});011X:OUTPUT({0,SGN(R)*10});100X:OUTPUT({13,SGN(R)*1});101X:OUTPUT({12,SGN(R)*1});110X:OUTPUT({3,SGN(R)*2});111X:OUTPUT({1,SGN(R)*4});}}01:R=READ(1);OUTPUT({2,SGN(R)*1});shv=1;10:R=READ(1);OUTPUT({1,SGN(R)*2});shv=1;11:R=READ(1);OUTPUT({3,SGN(R)*1});shv=1;}SHL(shv);}3:{Q=READ(3);SHL(3);CASE(Q){00X:OUTPUT({0,SGN(Q)*7});01X:OUTPUT({0,SGN(Q)*6});10X:OUTPUT({4,SGN(Q)*1});11X:OUTPUT({5,SGN(Q)*1});}}4:{Q=READ(3);SHL(3);CASE(Q){00X:OUTPUT({7,SGN(Q)*1});01X:OUTPUT({8,SGN(Q)*1});10X:OUTPUT({6,SGN(Q)*1});11X:OUTPUT({2,SGN(Q)*2});}}5:Q=READ(19);OUTPUT({Q[18:13],Q[12:0]});6:{Q=READ(2);SHL(2);CASE(Q){00:R=READ(1);OUTPUT({5,SGN(R)*2});shv=1;01:R=READ(1);OUTPUT({14,SGN(R)*1});shv=1;10:{R=READ(2);shv=2;CASE(R){0X:OUTPUT({2,SGN(R)*4});1X:OUTPUT({16,SGN(R)*1});}}11:R=READ(1);OUTPUT({15,SGN(R)*1});shv=1;}SHL(shv);}7,8,9,10,11:JVLC(TableC[T]);}}從上面MatchVLC函數(shù)注意到,通常已譯碼的最低有效位會(huì)決定值的正負(fù)號,如此可使用SGN功能來檢查,其描述如下FUNCTIONSGN(R){RETURN(R==1)?-1:1;}更注意到對MatchVLC_3以及MatchVLC_4而言,表格為共同的(或是至少為一超集),因此可使用下面表格來存取功能。FUNCTIONJVLC(Table){Q=READ(5);SHL(5);{R,L}=Table[Q];RETURN{R,L};}到MatchVLC的接口,或者應(yīng)該說MatchVLC_X(其中X等于1、2等)函數(shù)為下列指令VLC_MPEG2DST,#Imm16,其中,使用#Imm16值以選擇適當(dāng)?shù)谋砀瘢乙虼艘宰g碼特定語法成分。使用#Imm16作為表格的索引(例如0、1、2、3)而從指令存取表格。#Imm16的值以及對應(yīng)方法、語法成分以及MPEG-2表格的關(guān)系描述于下面表五。表五EXP-GOLOMB譯碼已描述用作CABAC譯碼(經(jīng)由CABAC模塊580的可變長度譯碼單元530a)、CAVLC譯碼(經(jīng)由CAVLC模塊582的可變長度譯碼單元530b)以及MPEG譯碼(經(jīng)由MPEG模塊578的可變長度譯碼單元530c)的譯碼系統(tǒng)200,接下來將描述譯碼系統(tǒng)200的EXP-Golomb實(shí)施例,于此稱為可變長度譯碼單元530d??勺冮L度譯碼單元530d根據(jù)EXP-Golomb模塊584(圖5C所顯示)的運(yùn)算而操作。可變長度譯碼單元530d使用如CABAC及CAVLC實(shí)施例所使用的相同硬件以及相同位流緩沖器排列。因此,與CABAC以及CAVLC實(shí)施例共有的特征被省略,除了下列需要注意的部分。在描述可變長度譯碼單元530d之前,先提出有關(guān)EXP-Golomb的簡單描述。在EXP-Golomb中,數(shù)據(jù)包含字首(prefix)以及字尾(suffix)格式,顯示如下codeNum范圍1001x01-2001x1x03-60001x2x1x07-1400001x3x2x1x015-30000001x4x3x2x1x031-62......因?yàn)槎鄶?shù)的碼字較短,有壓縮被獲得。再者,多數(shù)的碼字為唯一并且容易譯碼。在H.264中,有四種EXP-Golomb編碼方法使用不具正負(fù)號一元(Unary)、正負(fù)號以及映射(碼字被映射至表格)。這些方法用以編碼已編碼的宏區(qū)塊圖型以及截短(truncate)。在可變長度譯碼單元530d中,提供單一指令以執(zhí)行如下面表六所顯示不同型式的EXP-Golomb碼的譯碼。截短EXP-Golomb譯碼描述如下。表六進(jìn)一步解釋這些指令,EXP_GOLOMB_UD指令譯碼一元編碼的編碼符號。EXP_GOLOMB_SD指令譯碼具正負(fù)號的一元編碼的編碼符號。如表六所顯示,對EXP_GOLOMB_SD指令而言,當(dāng)k=0時(shí),在正0以及負(fù)0之間沒有差別,因此傳回的值為0。EXP_GOLOMB_MD(SRC1)指令譯碼映射編碼符號,其中SRC1=Type,其與宏區(qū)塊參數(shù)以及coded_block_pattern有關(guān)。Type的值會(huì)導(dǎo)致下列coded_blocK_parameterType=0→Intra4×4Type=1→Inter可使用表格(例如芯片上存儲(chǔ)器或是遠(yuǎn)端存儲(chǔ)器內(nèi)的表格)以根據(jù)宏區(qū)塊預(yù)測模式(例如碼數(shù)量、k)而指定值給coded_block_parameter。譯碼截短Exp-Golomb符號的EXP-Golomb指令更描述如下EXP_GOLOMB_TDDST,SRC1,其中,SRC1為范圍。至少在一實(shí)施例中,執(zhí)行截短Exp-Golomb編碼時(shí),需要先知道范圍。接著,截短Exp-Golomb編碼可被推導(dǎo)如下codeNum=EXP_GOLOMB_TD(range){elseif(range==1)returnREAD(1)^1;elsereturnEXP_GOLOMB_UE;}因此,EXP_GOLOMB_D指令被提供。解釋運(yùn)算碼以及驅(qū)動(dòng)-發(fā)出軟件指令之間的差異是有用的。通常,當(dāng)設(shè)計(jì)ISA時(shí),至少有兩個(gè)影響在工作上(1)讓指令譯碼器較簡單以及在單一管線階段中完成(即快速);以及(2)讓程序設(shè)計(jì)師助記(mnemonics)較簡單。參考五種EXP-Golomb基準(zhǔn)的運(yùn)算,從使用者的觀點(diǎn)來看這些運(yùn)算為有區(qū)別的。再者,有兩種不同格式全部EXP-Golomb基準(zhǔn)的運(yùn)算輸出相同值,但是只有部分運(yùn)算具有一輸入(除了內(nèi)含在運(yùn)算中的位流),其提供至少一基本區(qū)別。傳統(tǒng)上,CPU指令不具有隱含輸入,但是卻透過運(yùn)算包括隱含輸入。然而,位流不經(jīng)由運(yùn)算而揭露,但是卻是內(nèi)部自動(dòng)管理以及使用INIT指令進(jìn)行初始。從硬件的觀點(diǎn),可使用EXP-GOLOMB-UD的相同硬件硬件的相同核心(或是至少)以及有關(guān)核心硬件的小加法來執(zhí)行全部的其他EXP-GOLOMB-UD運(yùn)算(例如在軟件內(nèi)相似于CASE/SWITCH的部分)。因此編譯器/翻譯器可映射全部的運(yùn)算至單一指令。再者,這些運(yùn)算為固定(例如運(yùn)算不會(huì)動(dòng)態(tài)改變)。參考下面表七的pseudonym行,注意到對EXP-GOLOMB-UD以及EXP-GOLOMB-SD運(yùn)算,SRC1可以被加入(或是由核心所忽略),具有機(jī)制用以區(qū)別這些運(yùn)算。同樣地,注意到?jīng)]有單一來源指令分組存在,但是可被映射至?xí)捍嫫?立即分組。通過使用如表七所顯示不同指令的明顯立即數(shù)目,可以得到這些指令之間的區(qū)別,因此導(dǎo)致只有一個(gè)主要/次要運(yùn)算碼而不是五個(gè),其包括一個(gè)有意義的儲(chǔ)存。即只有一個(gè)次要運(yùn)算碼被使用因?yàn)榭墒褂昧⒓锤袷街噶睿约巴ㄟ^編碼帶有適當(dāng)數(shù)據(jù)的立即數(shù)據(jù)欄位并指定Pseudonym可完成不同EXP_Golomb指令之間的區(qū)別。EXP_GOLOMB_DDst,#Type,Src1.lane,其中經(jīng)由下列表七可決定#Type表七進(jìn)一步解釋表七,對#type=0×0或是#type=0×1而言,沒有Src1欄位是需要的,以及不需要指定這些指令至另一主要或是次要運(yùn)算碼群組,因?yàn)榭芍付ㄌ摂M(dummy)Src或是Src以及Dst可被標(biāo)示為相同。EXP-Golomb編碼符號被編碼成如下圖所顯示(例如包括0或是多個(gè)引導(dǎo)0、跟隨著1,以及然后是對應(yīng)于引導(dǎo)0的數(shù)量的一些位)codeNum范圍1001x01-2001x1x03-60001x2x1x07-1400001x3x2x1x015-30000001x4x3x2x1x031-62......這些位如何被解釋是根據(jù)特定Golomb型式而定(這里是根據(jù)H.264的三種型式以及AVS的第四型式)。使用UD以及SD(不具正負(fù)號以及正負(fù)號)計(jì)算邏輯單元來計(jì)算值。例如,當(dāng)位流為0001010時(shí),則UD的值為(1<<3)-1+2=9,而SD的值為(-1)^10*ceil(9/2)=+5。CD也發(fā)生相似的程序。然而,對MD而言,表單查找被執(zhí)行(例如當(dāng)UD編碼時(shí),對值作譯碼,接著使用此值做為索引進(jìn)入表格,傳回6位的值(在表格中儲(chǔ)存成6位的值,但是傳回值是從0延伸至?xí)捍嫫鞯膶挾?)。在一實(shí)施例中有兩表格,一表格為Intra編碼而另一表格為Inter編碼。上述指令轉(zhuǎn)換如何被使用在EXP-Golomb譯碼的內(nèi)容中的例子,可通過H.264片段標(biāo)頭部分譯碼的示范偽碼顯示如下。sliceHeaderDecode:EXP_GOLOMB_UDfirstMBSliceEXP_GOLOMB_UDsliceTypeEXP_GOLOMB_UDpicParameterSetIDREADframeNum,NvalIB_GTframeMbsOnlyFlag,ZERO,$Label1READfieldPicFlag,ONEIB_EQfieldPicFlag,ZERO,$Label1READbottomFieldFlag,ONELabel1:ISUBIt1,#5,nalUnitTypeIBNEQZERO,t1,$Label2EXP_GOLOMB_UDidrPicIDLabel2:IB_NEQZERO,picOrderCntType,$Label3READpicOrderCntLSB,NvaltLabel3:ICMPI_EQp1,ONE,fieldPicFlag[p1]MOVnfieldPicFlag,ZERO[!p1]MOVnfieldPicFlag,ONEANDt1,picOrderPresentFlag,nfieldPicFlagB_NEQONE,t1,$Label4EXP_GOLOMB_SDdeltaPicOrderCntBottomLabel4:轉(zhuǎn)換至sliceHeaderDecode:EGOLDfirstMBSlice,#0,ZEROEGOLDsliceType,#0,ZEROEGOLDpicParameterSetID,#0,ZEROREADframeNum,NvalIB_GTframeMbsOnlyFlag,ZERO,$Label1READfieldPicFlag,ONEIB_EQfieldPicFlag,ZERO,$Label1READbottomFieldFlag,ONELabel1:ISUBIt1,#5,nalUnitTypeIB_NEQZERO,t1,$Label2EGOLDidrPicID,#0,ZEROLabel2:IB_NEQZERO,picOrderCntType,$Label3READpicOrderCntLSB,NvaltLabel3:ICMPI_EQp1,ONE,fieldPicFlag[p1]MOVnfieldPicFlag,ZERO[!p1]MOVnfieldPicFlag,ONEANDt1,picOrderPresentFlag,nfieldPicFlagB_NEQONE,t1,$Label4EGOLDdeltaPicOrderCntBottom,#1,ZEROVC-1譯碼已描述用作CABAC譯碼(經(jīng)由CABAC模塊580的可變長度譯碼單元530a)、CAVLC譯碼(經(jīng)由CAVLC模塊582的可變長度譯碼單元530b)、MPEG譯碼(經(jīng)由MPEG模塊578的可變長度譯碼單元530c)以及EXP-Golomb譯碼(經(jīng)由EXP-Golomb模塊584的可變長度譯碼單元530d)的譯碼系統(tǒng)200,接下來將描述譯碼系統(tǒng)200的VC-1實(shí)施例,于此稱為可變長度譯碼單元530e??勺冮L度譯碼單元530e根據(jù)計(jì)算前導(dǎo)1模塊574、計(jì)算前導(dǎo)0模塊576的運(yùn)算而操作。VC-1使用霍夫曼編碼且具有更多表格。代替建立以及測試這些表格,既然位率需要較低,但是驗(yàn)證成本較高,必要的表格被載入至鄰近內(nèi)容存儲(chǔ)器564。表格格式相同于MPEG-2所使用,而使用READ、VLC_CLZ、VLC_CLO以及INPSTR指令以譯碼位流。例如,使用下列偽碼可執(zhí)行特定表格//TABLE-IPictureCBPCYVLCTABLEVLC_CLZDST0,#8CASEDST00:VALUE=0;BREAK;//USEMOVL1:VLC_CLZDST1#5CASEDST11:T=READ(2);CASET0:VALUE=48;BREAK;1:VALUE=56;BREAK;2:GO20;BREAK;3:VALUE=1;BREAK;CASE_END2:VALUE=2;BREAK;3:VLC_CLODST2,#5CASE_DST20:VALUE=28;BREAK;1:VALUE=22;BREAK;2:VALUE=43;BREAK;3:VALUE=30;BREAK;4:VALUE=41;BREAK;5:VALUE=49;BREAK;CASE_END4:T=READ(1);VALUE=(T)?(READ(1)?31:54):27;BREAK;5:VALUE=6;BREAK;CASE_END2:VLC_CLZDS1#4CASEDST11:VALUE=3;BREAK;2:T=READ(1);VALUE=(T)?19:36;BREAK;3:T=READ(2);CASET0:VALUE=38;BREAK;1:VALUE=47;BREAK;2:VALUE=59;BREAK;3:VALUE=5;REAK;CASE_END4:VALUE=7;BREAK;CASE_END3:T=READ(1);VALUE=(T)?16:8;BREAK;4:T=READ(1);VALUE=(T)GO10?:12;BREAK;5:VALUE=20;BREAK;6:VALUE=44;BREAK;7:T=READ(1);VALUE=(T)?33:58;BREAK;//USESEL??8:VALUE=15;BREAK;CASE_ENDGO10:INPSTRS1,#3READ_NCMS2,#0,ogg+S1>>2VALUE=S2&0x63;Q=(S2>>6)&0x3;READS0,QRETURN;GO20:INPSTRS1,#4READ_NCMS2,#0,off+s1>>2VALUE=S2&0x63;Q=(S2>>6)&0x3;READS0,QRETURN;在部分實(shí)施例中,可用分支指令代替CASE敘述。因此,和MPEG-2一樣的VC-1具有容易定義的文法。文法中的符號具有特定方法(表格),其可被執(zhí)行成著色器,如上述編碼所顯示。以上所述僅為本發(fā)明較佳實(shí)施例,然其并非用以限定本發(fā)明的范圍,任何熟悉本項(xiàng)技術(shù)的人員,在不脫離本發(fā)明的精神和范圍內(nèi),可在此基礎(chǔ)上做進(jìn)一步的改進(jìn)和變化,因此本發(fā)明的保護(hù)范圍當(dāng)以本申請的權(quán)利要求書所界定的范圍為準(zhǔn)。附圖中符號的簡單說明如下100圖形處理器系統(tǒng)102顯示裝置104顯示接口單元106局部存儲(chǔ)器110存儲(chǔ)接口單元114圖形處理單元118PCI-E總線接口單元122芯片組124系統(tǒng)存儲(chǔ)器126中央處理單元128驅(qū)動(dòng)軟件200譯碼系統(tǒng)202圖形處理器204計(jì)算核心206執(zhí)行單元集合控制以及頂點(diǎn)/串流快取單元208圖形管線302紋理過濾單元304像素包裝器306命令流處理器308寫回單元310紋理地址產(chǎn)生器402執(zhí)行單元輸入412執(zhí)行單元集合404a執(zhí)行單元偶輸出404b執(zhí)行單元奇輸出406存儲(chǔ)器存取單元408L2快取存儲(chǔ)器410存儲(chǔ)器接口仲裁器504指令快取存儲(chǔ)器控制器506執(zhí)行緒控制器508緩沖器510共用暫存器文件512執(zhí)行單元數(shù)據(jù)路徑514執(zhí)行單元數(shù)據(jù)路徑FIFO516述詞暫存器文件518純量暫存器文件520數(shù)據(jù)輸出控制器524執(zhí)行緒任務(wù)接口526暫存器文件530可變長度譯碼單元532向量浮點(diǎn)單元534向量整數(shù)計(jì)算邏輯單元536特殊目的單元540暫存器文件562SREG串流緩沖器/DMA引擎562aSREG暫存器562b位流緩沖器564鄰近內(nèi)容存儲(chǔ)器568讀取鄰近內(nèi)文存儲(chǔ)器模塊570檢查字串模塊572讀取模塊574計(jì)算引導(dǎo)1模塊576計(jì)算引導(dǎo)0模塊578MPEG模塊580CABAC模塊582CAVLC模塊584Exp-Golomb模塊602狀態(tài)索引604高可能性符號值606碼長范圍608碼長偏移量612局部暫存器614總體暫存器616二進(jìn)制字串暫存器620二進(jìn)制化模塊622取得內(nèi)容模塊624二進(jìn)制計(jì)算譯碼引擎628目標(biāo)630SRC2632SRC1634共用以及執(zhí)行緒信息636延遲/重置638地址640數(shù)據(jù)650存儲(chǔ)器模塊654二進(jìn)制索引710系數(shù)符記模塊712電平碼模塊714電平模塊716電平0模塊718零電平模塊720運(yùn)行模塊722電平陣列724運(yùn)行陣列權(quán)利要求1.一種譯碼方法,其特征在于,包括提供配置有多個(gè)指令集的一著色器以譯碼一視頻串流,其中上述視頻串流根據(jù)多個(gè)不同編碼方法而得;載入具有上述多個(gè)指令集其中之一的上述著色器至一軟件可編程核心處理單元的一可變長度譯碼單元,以供上述可變長度譯碼單元執(zhí)行;以及通過執(zhí)行上述可變長度譯碼單元的上述著色器譯碼上述視頻串流。2.根據(jù)權(quán)利要求1所述的譯碼方法,其特征在于,上述載入更包括初始化上述可變長度譯碼單元,上述譯碼于一圖形處理單元的內(nèi)容編程內(nèi),透過執(zhí)行于上述圖形處理單元數(shù)據(jù)路徑的硬件以及于一位流緩沖器中,用以自動(dòng)管理的額外硬件而完成,以及其中上述多個(gè)編碼方法包括內(nèi)容適應(yīng)二進(jìn)制算術(shù)編碼、內(nèi)容適應(yīng)可變長度編碼、EXP-Golomb、動(dòng)畫專家群以及VC-1的二種或多種。3.根據(jù)權(quán)利要求2所述的譯碼方法,其特征在于,用以初始化的上述指令集包括至少一INIT_CTX以及INIT_ADE以供CABAC譯碼、INIT_CAVLC以供CAVLC譯碼、INIT_MPEG2以供MPEG-2譯碼、INIT_VC-1以供VC-1譯碼以及INIT_CTX或是INIT_CAVLC以供EXP-Golomb譯碼,以及更包括INIT_AVS用以根據(jù)一音頻視頻標(biāo)準(zhǔn)而譯碼。4.根據(jù)權(quán)利要求2所述的譯碼方法,其特征在于,上述初始化更包括至少初始化一內(nèi)容存儲(chǔ)器陣列、多個(gè)暫存器、多個(gè)內(nèi)容表以及一譯碼引擎之一;對應(yīng)于譯碼運(yùn)算更新上述暫存器的欄位或是初始化上述暫存器的欄位,其中上述更新包括在上述暫存器以及上述內(nèi)容存儲(chǔ)器陣列之間移動(dòng)值;以及讀取上述內(nèi)容存儲(chǔ)器陣列,其中,用以移動(dòng)或是初始化的上述指令集包括一CWRITE指令,而用以更新的上述指令集包括一INSERT指令,以及用以讀取的上述指令集包括一READ_NCM指令。5.根據(jù)權(quán)利要求2所述的譯碼方法,其特征在于,上述初始化更包括初始化一位流緩沖器以及相關(guān)暫存器,用以接收上述視頻串流的片段,其中用以初始化上述位流緩沖器以及相關(guān)暫存器的上述指令集包括一INIT_BSTR指令,用以載入對應(yīng)于上述視頻串流的數(shù)據(jù)至上述位流緩沖器,并開始上述位流緩沖器以及相關(guān)暫存器的自動(dòng)管理的一程序。6.根據(jù)權(quán)利要求5所述的譯碼方法,其特征在于,更包括以字節(jié)方式排列上述位流緩沖器的數(shù)據(jù),其中用以以字節(jié)方式排列的上述指令集包括一ABST指令。7.根據(jù)權(quán)利要求5所述的譯碼方法,其特征在于,更包括在譯碼期間當(dāng)數(shù)據(jù)被使用時(shí),從相關(guān)暫存器讀取數(shù)據(jù),其中用以讀取數(shù)據(jù)的上述指令集包括一READ指令。8.根據(jù)權(quán)利要求5所述的譯碼方法,其特征在于,更包括檢查上述位流緩沖器的一位流或是相關(guān)暫存器以供不需要執(zhí)行上述位流的特定圖型,其中用以檢查的上述指令集包括至少下列其中之一一INPSTR指令,對應(yīng)于相關(guān)暫存器的檢查,以及一既定數(shù)量的最高有效位至對應(yīng)于上述檢查的一目標(biāo)暫存器的一傳回;以及一INPTRB指令,對應(yīng)于相關(guān)暫存器的原始字節(jié)序列承載尾隨位的檢查。9.一種譯碼方法,其特征在于,包括通過執(zhí)行一著色器譯碼一視頻串流,上述著色器是在內(nèi)嵌于一可編程核心處理單元的一可變長度譯碼單元內(nèi),以及上述譯碼根據(jù)多個(gè)不同編碼方法;以及提供一已譯碼數(shù)據(jù)輸出。10.根據(jù)權(quán)利要求9所述的譯碼方法,其特征在于,上述譯碼系于圖形處理單元的內(nèi)容編程內(nèi),透過執(zhí)行于一圖形處理單元數(shù)據(jù)路徑的硬件以及自動(dòng)管理位流緩沖器的額外硬件而完成,以及其中上述多個(gè)編碼方法包括內(nèi)容適應(yīng)二進(jìn)制算術(shù)編碼、內(nèi)容適應(yīng)可變長度編碼、EXP-Golomb、動(dòng)畫專家群以及VC-1的二種或多種。11.根據(jù)權(quán)利要求9所述的譯碼方法,其特征在于,根據(jù)CABAC的上述譯碼包括在一二進(jìn)制化模塊內(nèi),接收一第一信息,包括一語法成分以及一內(nèi)容區(qū)塊種類;對應(yīng)于由上述二進(jìn)制化模塊所執(zhí)行的上述著色器的一第一指令,根據(jù)用于內(nèi)容模型的上述第一信息而提供對應(yīng)于一或多個(gè)宏區(qū)塊參數(shù)的一第二信息;在一得到內(nèi)容模塊內(nèi),接收上述第二信息;對應(yīng)于由上述得到內(nèi)容模塊所執(zhí)行的上述著色器的一第二指令,提供用于二進(jìn)制譯碼的一二進(jìn)制信息以及一內(nèi)容識別信息,其中上述內(nèi)容識別信息對應(yīng)于一高可能性符號或是一低可能性符號機(jī)率;在一二進(jìn)制計(jì)算譯碼模塊內(nèi),接收上述二進(jìn)制信息、上述內(nèi)容識別信息、一偏移量以及一范圍;以及對應(yīng)于由上述二進(jìn)制計(jì)算譯碼模塊所執(zhí)行的上述著色器的一第三指令,譯碼一或多個(gè)二進(jìn)制符號。12.根據(jù)權(quán)利要求11所述的譯碼方法,其特征在于,根據(jù)CABAC的上述譯碼更包括下列的結(jié)合接收一或多個(gè)譯碼過的二進(jìn)制符號在一二進(jìn)制字串暫存器內(nèi),上述一或多個(gè)譯碼過的二進(jìn)制符號代表一譯碼過的語法成分;提供更新過的內(nèi)容信息;以及寫入至一內(nèi)容存儲(chǔ)器陣列,上述寫入系根據(jù)包含由供應(yīng)上述內(nèi)容存儲(chǔ)器的暫存器至上述內(nèi)容存儲(chǔ)器陣列的數(shù)值轉(zhuǎn)換的布林邏輯運(yùn)算。13.根據(jù)權(quán)利要求9所述的譯碼方法,其特征在于,更包括至少下列之一者使用一指令中的位而決定是否使用儲(chǔ)存于一內(nèi)部暫存器的一前一運(yùn)算的一結(jié)果,或是在一來源運(yùn)算元的一數(shù)據(jù)應(yīng)使用于在一或多個(gè)模塊的一目前運(yùn)算;當(dāng)一既定數(shù)量的位被使用于譯碼時(shí),重復(fù)地且自動(dòng)地在一位流緩沖器緩沖上述既定數(shù)量的位,上述位數(shù)對應(yīng)于上述視頻串流;延遲對應(yīng)于在上述位流緩沖器中的預(yù)期向下溢位的緩沖;以及追蹤在上述位流緩沖器中所使用的位數(shù),對應(yīng)于上述位數(shù)系大于一既定數(shù)量的偵測,停止上述位流緩沖器運(yùn)算,并轉(zhuǎn)換控制至一主機(jī)處理器。14.根據(jù)權(quán)利要求9所述的譯碼方法,其特征在于,根據(jù)CAVLC的上述譯碼包括在CAVLC單元的一系數(shù)符記模塊內(nèi),接收一宏區(qū)塊信息;對應(yīng)于上述著色器的一第四指令,提供一拖尾系數(shù)信息以及一非零系數(shù)信息;在CAVLC單元的一電平模塊內(nèi),接收上述拖尾系數(shù)信息以及一電平碼信息;對應(yīng)于上述著色器的一第五指令,提供一字尾長度信息以及一電平索引信息;在CAVLC單元的一電平碼模塊內(nèi),接收上述字尾長度信息;以及對應(yīng)于上述著色器的一第六指令,提供上述電平碼信息至上述電平模塊。15.根據(jù)權(quán)利要求14所述的譯碼方法,其特征在于,上述字尾長度信息以及上述電平索引信息系經(jīng)由一轉(zhuǎn)發(fā)暫存器以及一執(zhí)行單元暫存器之一者在電平模塊內(nèi)被接收,其中上述電平索引信息為遞增。16.根據(jù)權(quán)利要求14所述的譯碼方法,其特征在于,根據(jù)CAVLC的上述譯碼更包括下列的結(jié)合在CAVLC單元的一電平0模塊內(nèi),接收上述拖尾系數(shù)信息,以及對應(yīng)于上述著色器的一第七指令,提供一第二電平索引信息至一電平陣列;在CAVLC單元的一零電平模塊內(nèi),接收上述非零系數(shù)信息以及拖尾系數(shù)信息的一最大值;對應(yīng)于上述著色器的一第八指令,提供一零剩余信息以及一重置值至一第一多工器以及一第二多工器;在CAVLC單元的一運(yùn)行模塊,分別接收來自上述第一以及第二多工器的上述零剩余信息以及上述第二電平索引信息;對應(yīng)于上述著色器的一第九指令,提供一運(yùn)行索引至一運(yùn)行陣列;對應(yīng)于上述著色器的一第十指令,分別由上述電平陣列以及上述運(yùn)行陣列提供一譯碼過的電平值以及一譯碼過的運(yùn)行值;以及對應(yīng)于上述著色器的一第十一指令,清除上述電平陣列以及上述運(yùn)行陣列。17.根據(jù)權(quán)利要求16所述的譯碼方法,其特征在于,上述第一多工器用以接收來自一第一轉(zhuǎn)發(fā)暫存器的上述零剩余信息,而上述第二多工器用以接收來自一第二轉(zhuǎn)發(fā)暫存器的上述第二電平索引信息。18.根據(jù)權(quán)利要求9所述的譯碼方法,其特征在于,根據(jù)EXP-Golomb的上述譯碼包括偵測以及追蹤在結(jié)合一位流緩沖器的一暫存器中引導(dǎo)0以及引導(dǎo)1的數(shù)量,其中根據(jù)EXP-Golomb的上述譯碼使用一單一運(yùn)算碼執(zhí)行多個(gè)EXP-Golomb運(yùn)算,每一上述多個(gè)EXP-Golomb運(yùn)算可使用在一著色器指令中的一立即數(shù)據(jù)欄位值的個(gè)別值來加以區(qū)別,其中上述偵測以及追蹤引導(dǎo)0根據(jù)一計(jì)算引導(dǎo)0指令,而上述偵測以及追蹤引導(dǎo)1根據(jù)一計(jì)算引導(dǎo)0指令,以及其中對應(yīng)于EXP-Golomb譯碼的上述著色器指令包括一EXP_GOLOMB_D指令。19.根據(jù)權(quán)利要求14所述的譯碼方法,其特征在于,根據(jù)MPEG-2的上述譯碼包括使用一或多個(gè)MatchVLC函數(shù)執(zhí)行MPEG標(biāo)準(zhǔn)表格,每一上述一或多個(gè)MatchVLC函數(shù)對應(yīng)于一個(gè)別語法成分,上述表格選擇依據(jù)上述著色器的一指令,其中對應(yīng)于MatchVLC函數(shù)的上述著色器指令包括一VLC_MPEG2指令。20.根據(jù)權(quán)利要求14所述的譯碼方法,其特征在于,根據(jù)VC-1的上述譯碼包括選擇性地載入VC-1表格至一內(nèi)容存儲(chǔ)器陣列,其中上述譯碼根據(jù)上述選擇性載入的表格。全文摘要本發(fā)明提供一種譯碼方法,包括提供配置有多個(gè)指令集的一著色器,以譯碼一視頻串流,其中上述視頻串流系根據(jù)多個(gè)不同編碼方法而得;載入具有上述多個(gè)指令集的一個(gè)的上述著色器至一軟件可編程核心處理單元的一可變長度譯碼單元,以供上述可變長度譯碼單元執(zhí)行;以及通過執(zhí)行上述可變長度譯碼單元的上述著色器譯碼上述視頻串流。本發(fā)明所述的譯碼方法,可將指令延遲減縮到最小。文檔編號H04N7/30GK101087411SQ20071012645公開日2007年12月12日申請日期2007年6月8日優(yōu)先權(quán)日2006年6月8日發(fā)明者扎伊爾德·荷圣,約翰·柏拉勒斯,裴德輝申請人:威盛電子股份有限公司