国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      可變長(zhǎng)度編碼與解碼的處理電路和處理方法

      文檔序號(hào):7586118閱讀:350來(lái)源:國(guó)知局
      專利名稱:可變長(zhǎng)度編碼與解碼的處理電路和處理方法
      技術(shù)領(lǐng)域
      本發(fā)明總體涉及圖像處理電路和技術(shù),更具體地說(shuō),本發(fā)明涉及數(shù)據(jù)(如視頻數(shù)據(jù))的可變長(zhǎng)度編碼與解碼的處理電路和處理方法。
      背景技術(shù)
      可變長(zhǎng)代碼可用于編碼多種數(shù)據(jù)。例如,流行的、基于塊的運(yùn)動(dòng)圖像專家組(MPEG)視頻壓縮標(biāo)準(zhǔn),將視頻數(shù)據(jù)編碼為用于傳輸或存儲(chǔ)的可變長(zhǎng)碼元。此外,有多種可變長(zhǎng)代碼(如霍夫曼代碼)為無(wú)損代碼。
      通常,可變長(zhǎng)度編碼數(shù)據(jù)采用串行傳送。因此,與數(shù)據(jù)的并行傳送、接收和解碼相比,這種數(shù)據(jù)的傳送、接收和解碼過(guò)程所花費(fèi)的時(shí)間相對(duì)較長(zhǎng)。
      為了減少傳送、接收和解碼的時(shí)間,需要開(kāi)發(fā)電路硬件來(lái)處理這種數(shù)據(jù)。即,對(duì)這種硬件電路的結(jié)構(gòu)進(jìn)行配置,以有效實(shí)現(xiàn)可變長(zhǎng)度解碼或編碼處理。然而,這種硬件存在的問(wèn)題是,它通常是針對(duì)特定類型的可變長(zhǎng)代碼進(jìn)行設(shè)計(jì)的。因此,根據(jù)一種可變長(zhǎng)代碼設(shè)計(jì)的、對(duì)數(shù)據(jù)進(jìn)行編碼或解碼的硬件,在根據(jù)另一種可變長(zhǎng)代碼對(duì)數(shù)據(jù)進(jìn)行編碼或解碼時(shí)效率可能會(huì)低或者不能進(jìn)行編碼或解碼。但是,許多種比特流(如某些MPEG比特流)所包括的位段分別根據(jù)不同的可變長(zhǎng)代碼進(jìn)行編碼。因此,解碼硬件通常必須包括多個(gè)電路,各電路均被設(shè)計(jì)成根據(jù)相應(yīng)的可變長(zhǎng)代碼對(duì)位段進(jìn)行解碼。然而,這通常會(huì)增大解碼硬件的尺寸、復(fù)雜程度和成本。
      另一種方案是設(shè)計(jì)一種處理器來(lái)實(shí)現(xiàn)可變長(zhǎng)度編碼或解碼。因此,對(duì)于使用不止一種可變長(zhǎng)代碼的比特流,可以“飛擊式”修改處理器軟件并利用單一處理器實(shí)現(xiàn)所有編碼或解碼處理。然而,由于多數(shù)處理器的結(jié)構(gòu)未針對(duì)可變長(zhǎng)度編碼或解碼進(jìn)行優(yōu)化,當(dāng)進(jìn)行可變長(zhǎng)度編碼或解碼時(shí),這種處理器處理速度相對(duì)較慢。因此,這種處理器一般難以或不可能對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)可變長(zhǎng)度編碼或解碼。
      本發(fā)明概述根據(jù)本發(fā)明的一個(gè)方面,可變長(zhǎng)度編碼/解碼處理器包括中央處理單元,并包括與中央處理單元相連的指令緩沖器和getbits(取得位)處理引擎。這種處理器可以將數(shù)據(jù)編碼為可變長(zhǎng)碼元或?qū)勺冮L(zhǎng)碼元(如在MPEG比特流中發(fā)現(xiàn)的可變長(zhǎng)碼元)進(jìn)行解碼。
      數(shù)據(jù)壓縮方案(如霍夫曼編碼)使用可變長(zhǎng)代碼(VLCs)。諸如MPEG的視頻壓縮標(biāo)準(zhǔn)使用VLCs,例如,以下為法定MPEG代碼‘00’‘01’‘10’‘110’‘000000000000000000000001’在這些類型的碼元流中,只有已知了第一個(gè)碼元的長(zhǎng)度和語(yǔ)義才對(duì)碼元流中的第二個(gè)碼元進(jìn)行解碼。這是一種可由專用的小型可編程引擎有效實(shí)現(xiàn)的固有串行處理過(guò)程。
      為此,諸如Map1000處理器的視頻處理器得益于包括“VLx處理器”,(“VLx處理器”是專用于可變長(zhǎng)數(shù)據(jù)(如MPEG流中的數(shù)據(jù))處理)的引擎。在對(duì)到來(lái)的比特流進(jìn)行處理過(guò)程中以及在將該比特流的信息傳送到MAP 1000的方法中,VLx處理器具有靈活性。通過(guò)設(shè)計(jì)硬件使在處理可變長(zhǎng)數(shù)據(jù)中的臨界回路最小并且利用表壓縮集節(jié)省存儲(chǔ)空間,可以實(shí)現(xiàn)有效處理。
      本發(fā)明總體設(shè)計(jì)意圖要滿足下列要求·對(duì)以19.4兆比特/秒進(jìn)入8兆比特視頻緩沖操作檢驗(yàn)器(VBV)緩沖器的高清晰度電視(HDTV)MPEG流進(jìn)行處理。
      ·產(chǎn)生抽取系數(shù)用于以MP@ML的分辨率顯示HDTV。
      ·對(duì)MP@ML(Main Profile at Main Level主層上的主分布)流同時(shí)進(jìn)行編碼和解碼處理。
      ·對(duì)于諸如HDTV MPEG流的處理任務(wù),根據(jù)其執(zhí)行的程序,VLx處理器可以進(jìn)行如下類型的活動(dòng)·對(duì)MPEG進(jìn)行預(yù)處理以構(gòu)建用于定義流內(nèi)容的結(jié)構(gòu)·對(duì)離散余弦變換(DCT)參數(shù)進(jìn)行解碼·創(chuàng)建MPEG流Map1000業(yè)務(wù)遷移將比特流以單向或雙向的方式饋入VLx處理器。VLx處理器可以對(duì)協(xié)處理器存儲(chǔ)體中的數(shù)據(jù)進(jìn)行處理,或它可以通過(guò)I/O通道獲得由Map1000數(shù)據(jù)流式單元饋入的輸入比特流。
      合成信息、抽取比特流或新構(gòu)建的數(shù)據(jù)流通過(guò)內(nèi)存轉(zhuǎn)儲(chǔ)或作為I/O輸出比特流被傳回MAP 1000。
      VLx處理器包括一個(gè)簡(jiǎn)單處理引擎、一組專用寄存器、一個(gè)用于處理比特流和I/O交互的GetBits引擎、對(duì)協(xié)處理器存儲(chǔ)器1(CM1)進(jìn)行訪問(wèn)的通向FFB的最佳通路以及將DsContinue&lt;&gt;操作發(fā)送到數(shù)據(jù)流式機(jī)的通道。
      附圖的簡(jiǎn)要說(shuō)明

      圖1示出了根據(jù)本發(fā)明實(shí)施例的、包括可變長(zhǎng)度編碼器/解碼器處理器的媒體處理電路的方框圖。
      圖2示出了根據(jù)本發(fā)明實(shí)施例圖1所示的可變長(zhǎng)度編碼器/解碼器處理器以及外部電路的方框圖。
      本發(fā)明的詳細(xì)說(shuō)明由于數(shù)字革命占據(jù)了主導(dǎo)地位,并且由于諸如電影、視聽(tīng)作品的所有形式的媒體均為數(shù)字化的,所以對(duì)這種媒體數(shù)據(jù)的獲取、處理、顯示、存儲(chǔ)以及通信的需要刺激了技術(shù)的飛速發(fā)展。利用這些新興的技術(shù),通過(guò)提高性能/價(jià)格比可以使許多新應(yīng)用成為可能,并加強(qiáng)了現(xiàn)有應(yīng)用。例如,此類應(yīng)用涉及數(shù)字視頻、桌面電視會(huì)議、機(jī)器視覺(jué)、數(shù)字照相機(jī)/數(shù)碼相機(jī)以及醫(yī)學(xué)圖像。這些應(yīng)用中的一些核心應(yīng)用技術(shù)為圖像和視頻計(jì)算算法及其快速執(zhí)行過(guò)程。由于存在廣闊的市場(chǎng)潛力,制造商和消費(fèi)者已對(duì)采用實(shí)時(shí)數(shù)字視頻計(jì)算的消費(fèi)產(chǎn)品產(chǎn)生濃厚興趣。在實(shí)時(shí)方面以及該系統(tǒng)的消費(fèi)群體均要求低成本、高計(jì)算能力并能最佳地執(zhí)行關(guān)鍵算法。在試制和設(shè)計(jì)這些系統(tǒng)的過(guò)程中,可編程方法可以對(duì)新應(yīng)用提供靈活性和適應(yīng)性并可以改變要求,這種系統(tǒng)比專用硬布線解決方案具有明顯的優(yōu)勢(shì)。
      圖1示出媒體處理器10的方框圖,根據(jù)本發(fā)明實(shí)施例,媒體處理器10包括固定功能塊(FFB)11和可變長(zhǎng)度編碼器/解碼器(VLx)處理器12。在一種實(shí)施例中,處理器10為華盛頓州西雅圖市的EquatorTechnologies公司推出的MAP 1000處理器。由于每秒要進(jìn)行幾十億次運(yùn)算來(lái)進(jìn)行實(shí)時(shí)媒體處理,所以,與以前使用的處理器相比,一定要求處理器具有更高的運(yùn)算能力。MAP 1000是一種革命性的新的低成本可編程單片解決方案,將它設(shè)計(jì)成能夠滿足數(shù)字媒體處理要求的計(jì)算要求,MAP 1000包括·數(shù)字視頻MPEG2編碼與解碼、視頻預(yù)濾波/后濾波以及H.324視頻會(huì)議·數(shù)字音頻壓縮5.1通道AC3和MPEG2編碼與解碼·圖像聯(lián)合圖像專家組標(biāo)準(zhǔn)(JPEG)編碼和解碼子波變換·3D圖形·2D圖形
      ·電話應(yīng)用·數(shù)字聲頻合成·數(shù)字聲頻空間化MAP 1000具有這樣高的計(jì)算能力,目前,它是世界上最強(qiáng)的處理器之一。采用已知的指令級(jí)的并行性技術(shù),MAP 1000利用片上并行性實(shí)現(xiàn)這樣高的計(jì)算速率。指令級(jí)并行性允許在一個(gè)時(shí)鐘周期內(nèi)啟動(dòng)多個(gè)中央處理單元(CPU)進(jìn)行運(yùn)算。這是通過(guò)利用多個(gè)片上執(zhí)行單元和/或通過(guò)將特定執(zhí)行單元分成多個(gè)更小的單元(例如將一個(gè)64位ALU(算術(shù)邏輯單元)拆分為8個(gè)8位ALU)實(shí)現(xiàn)的。
      媒體比特流(如在MPEG、JPEG或Dolby AC3中使用的比特流)的構(gòu)造和編譯過(guò)程是特有的順序處理過(guò)程。利用先前的碼元,比特流中的各碼元或結(jié)構(gòu)對(duì)其進(jìn)行編譯。已知各碼元的長(zhǎng)度或者基于上下文的推測(cè)碼元或者被編碼為碼元數(shù)值自身以前的比特流中的長(zhǎng)度數(shù)值。這意味著,在對(duì)媒體比特流進(jìn)行編碼或解碼時(shí),會(huì)浪費(fèi)掉MAP 1000的所有并行性。
      為了使媒體比特流的編碼或解碼更具有效性,EquatorTechnologies公司開(kāi)發(fā)出集成VLx處理器12,集成VLx處理器12配置到MAP 1000處理器10內(nèi)用于實(shí)現(xiàn)MAP 1000核心14的并行處理。VLx處理器12可以滿足對(duì)可變長(zhǎng)數(shù)據(jù)(如媒體數(shù)據(jù)流中的數(shù)據(jù))進(jìn)行處理的需要。在對(duì)到來(lái)的比特流進(jìn)行處理過(guò)程中以及在將該比特流的信息傳送到Map 1000核心14的方法中,VLx處理器12具有靈活性。通過(guò)設(shè)計(jì)硬件,使在處理可變長(zhǎng)數(shù)據(jù)中的臨界回路最小并且利用表壓縮集節(jié)省存儲(chǔ)空間,可以實(shí)現(xiàn)有效處理。
      因此,VLx處理器12實(shí)質(zhì)上為一個(gè)借助位分析算法具有了許多特殊特征的、16位的順序RISC微處理器。通過(guò)對(duì)順序位分析算法使用VLx,并行核14可以利用VLx處理器12有效連續(xù)地對(duì)更并行的代碼進(jìn)行控制。由于VLx處理器12完全可編程,所以它可以用于其它串行位條件任務(wù),例如,維特比、RS碼或JBIG處理的加速任務(wù)。VLx處理器12與MAP 1000片上電路剩余部分的集成,如圖1所示。
      在一種實(shí)施例中,所設(shè)計(jì)的VLx處理器12應(yīng)滿足下列要求·處理以19.4MBits/秒進(jìn)入8兆比特VBV(緩沖器)的HDTVMPEG。
      ·產(chǎn)生抽取系數(shù)以以MP@ML的分辨率顯示HDTV。
      圖2示出根據(jù)本發(fā)明實(shí)施例的圖1所示的VLx處理器12和圖1所示的部分FFU 11的方框圖。VLx處理器12包括16位CPU 16以及與CPU 16進(jìn)行通信、并作為輸入/輸出(I/O)裝置使用的GetBits(GB)處理引擎18。CPU 16和GB引擎18連接到寄存器文件20,寄存器文件20內(nèi)包括32個(gè)常規(guī)寄存器。FFB 11包括協(xié)處理器存儲(chǔ)體1(CM1),協(xié)處理器存儲(chǔ)體1(CM1)可以對(duì)預(yù)取指令操作和載入/存儲(chǔ)操作進(jìn)行訪問(wèn)。GB引擎18在I/O總線22既可以接收數(shù)據(jù)又可以產(chǎn)生數(shù)據(jù)。
      CPU 16對(duì)寄存器文件20內(nèi)的32個(gè)寄存器進(jìn)行控制,盡管在圖2中未逐個(gè)示出,但是這些寄存器被標(biāo)記為r0至r31。CPU 16和GB引擎18共享連接到32個(gè)寄存器中的13個(gè)寄存器r0至r12上,用于特殊表處理過(guò)程。另外,還存在與4個(gè)通用寄存器r0至r3共享地址端口的虛擬寄存器(在下面討論)。這些虛擬寄存器為只讀寄存器,并且它們檢查由于指令執(zhí)行過(guò)程的副作用而發(fā)生變化的機(jī)器的某些狀態(tài)。在一條指令中可以對(duì)寄存器文件20中多達(dá)兩個(gè)的寄存器進(jìn)行指定。第一寄存器在指令中被表示為R1。第二寄存器說(shuō)明時(shí)被表示為R2。寄存器的位置確定了對(duì)虛擬寄存器說(shuō)明的編譯過(guò)程。
      如果使用指令寫回版本,R1寄存器為結(jié)果寫回的目的端。在執(zhí)行指令后的周期中,在acc虛擬寄存器24也可以使用該指令。
      利用指令,可以從通用寄存器r4至r31讀出,也可以對(duì)通用寄存器r4至r31進(jìn)行寫入操作。如上所述,通用寄存器r0至r3與虛擬寄存器共享其地址端口。利用RAM讀(LD.W)指令,可以對(duì)這4個(gè)通用寄存器進(jìn)行寫入操作。讀取這些寄存器位置的任何嘗試均將導(dǎo)致讀取虛擬寄存器數(shù)值。在DCT處理過(guò)程中,GB 18可以讀通用寄存器r0至r3。
      在一種實(shí)施例中,寄存器寫回存在一個(gè)周期的等待時(shí)間。這意謂著,只有acc虛擬寄存器24內(nèi)的下一個(gè)指令可以使用調(diào)整寄存器的寄存器內(nèi)容。
      如上所述,虛擬寄存器與4個(gè)通用寄存器r0至r3共享地址端口。這意謂著,如果這些寄存器被CPU 16訪問(wèn),那么所使用的數(shù)值將由機(jī)器的某些狀態(tài)產(chǎn)生而非由通用寄存器產(chǎn)生。
      不能對(duì)虛擬寄存器進(jìn)行寫操作。對(duì)虛擬寄存器進(jìn)行寫回將會(huì)導(dǎo)致對(duì)共享虛擬寄存器地址端口的通用寄存器進(jìn)行讀操作。VLx匯編程序(未示出)利用名稱識(shí)別虛擬寄存器并進(jìn)行標(biāo)志寫入或者試圖對(duì)這些虛擬寄存器進(jìn)行寫回操作。
      在DCT處理方式中,GB 18使用寄存器r0至r12。當(dāng)GB 18訪問(wèn)這些寄存器時(shí),CPU 16對(duì)寄存器文件20的訪問(wèn)將導(dǎo)致寄存器文件的沖突。因此,在GB 18訪問(wèn)寄存器文件20期間,不允許CPU 16訪問(wèn)該寄存器文件。GB 18讀寄存器r0至r12,這樣就可以對(duì)DCT系數(shù)的適當(dāng)查詢表進(jìn)行尋址。為了避免在CPU 16和GB 18之間的寄存器沖突,設(shè)計(jì)DCT處理的實(shí)例代碼。下表說(shuō)明了寄存器使用的概況。
      表1寄存器概述

      在第26頁(yè)的處理器10的建議數(shù)據(jù)表的第5部分,對(duì)R1和R2位置進(jìn)行了說(shuō)明。所建議的數(shù)據(jù)表附于附錄A。
      VLx處理器12使用位于FFB 11內(nèi)的協(xié)處理器存儲(chǔ)器(例如CM1)。在一種實(shí)施例中,CM1為4KB范圍的存儲(chǔ)器。當(dāng)FFU 3D2D控制寄存器26處于VLD模式時(shí),VLx處理器12具有一個(gè)周轉(zhuǎn)周期用于存儲(chǔ)器請(qǐng)求(或者為64位指令提取或者為16位載入/存儲(chǔ))并且FFB 11的其它部分(例如圖1所示的3D加速器)不能使用存儲(chǔ)體CM1。
      存儲(chǔ)區(qū)CM1僅可以連接到FFB 11外部的電路和部分(如圖1所示的數(shù)據(jù)流式機(jī)),或者,當(dāng)FFU 3D2D控制寄存器26為可變長(zhǎng)度解碼模式時(shí),連接到PIO控制器28。因此,VLx處理器12發(fā)出對(duì)CM1進(jìn)行訪問(wèn)的請(qǐng)求較FFB 11外部電路部分發(fā)出的使用存儲(chǔ)體CM1的請(qǐng)求具有優(yōu)先權(quán)。
      VLx處理器12尋址具有16位地址的存儲(chǔ)體CM1,其中0000表示CM1內(nèi)的第一個(gè)16數(shù)據(jù)位地址,而FFFF表示CM1內(nèi)的最后一個(gè)16數(shù)據(jù)位地址。
      現(xiàn)在詳細(xì)說(shuō)明CPU 16。CPU 16為一個(gè)16位處理單元,它支持在寄存器文件20的32個(gè)16位寄存器上進(jìn)行簡(jiǎn)單的算術(shù)運(yùn)算(加、減、移位)。CPU 16還可以啟動(dòng)從CM1載入或存儲(chǔ)到CM1。專用指令控制GB 18。通過(guò)置位VLx PIO寄存器(圖2中未示出),可以停止/啟動(dòng)CPU 16的時(shí)鐘電路(圖2中未示出)。
      CPU 16持續(xù)對(duì)被預(yù)提取存入指令緩沖器30的指令進(jìn)行處理。指令緩沖器30在2個(gè)4指令分寄存器32和34中保持8條16位指令。除了轉(zhuǎn)移指令情況或3個(gè)連續(xù)載入/存儲(chǔ)運(yùn)算及時(shí)防止使用中發(fā)生指令預(yù)提取的情況外,CPU 16及時(shí)啟動(dòng)4條16位指令的指令預(yù)提取(總共64位)以避免指令流水線失效。稱為快速轉(zhuǎn)移指令的CPU 16的專用模式允許CPU 16周期執(zhí)行指令緩沖器30內(nèi)的指令,而無(wú)需指令預(yù)提取。
      PIO復(fù)位時(shí),CPU 16開(kāi)始執(zhí)行在CM 1起始存儲(chǔ)地址的指令(對(duì)所選擇的CM1任意基地址的偏移0),與此同時(shí),VLx處理器12的時(shí)鐘電路(圖2中未示出)被激活。CPU 16解碼然后每個(gè)周期執(zhí)行一條指令,算術(shù)運(yùn)算和邏輯運(yùn)算執(zhí)行指令的結(jié)果,在下一個(gè)周期中可以被acc虛擬寄存器24使用。在之后的周期中可以選擇進(jìn)行寄存器寫回。VLx CPU流水線具有三個(gè)階段,如表2所示。
      表ⅡVLx CPU流水線

      除非發(fā)生轉(zhuǎn)移,在每4個(gè)周期中進(jìn)行一次指令預(yù)提取。在存在轉(zhuǎn)移的情況下,在2個(gè)連續(xù)周期之后,有可能發(fā)生目標(biāo)指令和之后存入指令緩沖器30的指令的指令預(yù)提取。在轉(zhuǎn)移期間,由于轉(zhuǎn)移目標(biāo)已被計(jì)算、從CM1讀取并且被解碼,所以CPU流水線將在3個(gè)周期期間進(jìn)行掛起處理。
      在附錄A的第5部分將對(duì)VLx指令集做詳細(xì)說(shuō)明。指令分為如下幾類·算術(shù)運(yùn)算、邏輯運(yùn)算以及移位運(yùn)算(例如加法運(yùn)算、減法運(yùn)算、“與”運(yùn)算、“或”運(yùn)算、“異或”運(yùn)算、左移位、右移位以及endian交換)·轉(zhuǎn)移運(yùn)算、轉(zhuǎn)移語(yǔ)句、條件轉(zhuǎn)移、快速轉(zhuǎn)移·GB控制操作·CM1載入/存儲(chǔ)操作現(xiàn)在參考圖2說(shuō)明GB 18。GB 18既起到大位移器的作用又起到I/O裝置的作用。它被設(shè)計(jì)成有助于進(jìn)行可變長(zhǎng)碼字編碼或解碼。此外,它還具有用于編譯MPEG2比特流部分的專用邏輯電路,因此,它支持DCT系數(shù)抽取或支持構(gòu)造運(yùn)動(dòng)向量。
      GB 18具有如下功能·對(duì)由I/O輸入比特流的到來(lái)位(通過(guò)圖1的數(shù)據(jù)流式機(jī)從I/O總線22接收)進(jìn)行各字節(jié)位翻轉(zhuǎn)處理。這使得GB 18以鄰接順序保持MPEG2位,因此,GB 18可以起到巨型移位器的作用。
      ·對(duì)在I/O輸出(發(fā)送到圖1所示的數(shù)據(jù)流式機(jī))比特流中的流出位進(jìn)行各字節(jié)位翻轉(zhuǎn)處理。保持適當(dāng)endianess用于與極長(zhǎng)指令字(VLIW)程序進(jìn)行交互。
      ·對(duì)I/O輸入流輸出的數(shù)據(jù)進(jìn)行移位,并使該數(shù)據(jù)的前16位可用于symbol虛擬寄存器36,以便被程序使用,有選擇地產(chǎn)生的移位位被置于輸出流中。
      ·endian交換存儲(chǔ)在symbol虛擬寄存器36內(nèi)數(shù)值。
      ·利用存儲(chǔ)在symbol虛擬寄存器36內(nèi)的當(dāng)前數(shù)值,以在有限的硬件編碼MPEG2表中查找結(jié)果數(shù)值,然后,將該表數(shù)值返回symbol虛擬寄存器36。
      ·利用存儲(chǔ)在symbol虛擬寄存器36內(nèi)的當(dāng)前數(shù)值,與寄存器文件20內(nèi)的通用寄存器r0至r12一起將CM1的地址返回symbol虛擬寄存器36。
      ·將數(shù)據(jù)拼接為輸出數(shù)據(jù)流。
      ·保存并再存儲(chǔ)比特流I/O狀態(tài)信息,這樣就可以保持其它I/O比特流對(duì)。
      CPU 16對(duì)GB 18進(jìn)行控制。CPU 16通過(guò)指定運(yùn)算和最多兩個(gè)操作數(shù)來(lái)對(duì)GB 18進(jìn)行控制。在VLx指令中,運(yùn)算被指定為K1操作數(shù)。第一GB操作數(shù)直接由地址K1處的VLx指令中的GB指令獲得。第二GB操作數(shù)可以根據(jù)運(yùn)算類型進(jìn)行選擇,它取自指令的K2或R2操作數(shù)值。(在附錄A中詳細(xì)說(shuō)明K2操作數(shù)和R2操作數(shù))。一些GB 18運(yùn)算要求附加信息。在一個(gè)含有GB運(yùn)算的運(yùn)算之后,此附加信息可以立即由能被VLx指令的acc虛擬寄存器24檢測(cè)的最后一個(gè)CPU 16結(jié)果狀態(tài)獲得。
      GB流水線根據(jù)GB運(yùn)算發(fā)生變化。在流水線中存在數(shù)個(gè)變體。第一個(gè)流水線是位被移出輸入緩沖器42時(shí)的流水線。第二個(gè)流水線用于將位拼接存儲(chǔ)到輸出緩沖器44。第三流水線用于保存/寫入GB配置。第四流水線用于硬件加速表查詢數(shù)值。這些流水線不是真實(shí)流水線,因此流水線的各狀態(tài)并不利用唯一的資源。相反,應(yīng)將GB運(yùn)算看作等待時(shí)間內(nèi)的2至4個(gè)周期。將GB流水線的概況列于表3。
      表ⅢGB移位運(yùn)算流水線

      在附錄A以及以下的內(nèi)容討論了VLx處理器12的其它細(xì)節(jié)。
      在對(duì)包括CPU 16的操作和GB 18的操作的處理器12的操作說(shuō)明后,下面對(duì)處理器12進(jìn)行概況說(shuō)明。特征VLx處理器12包括簡(jiǎn)易處理引擎(CPU 16)、專用寄存器組(寄存器文件20)、用于處理比特流和I/O交換的Getbits引擎(GB 18)、用于CM訪問(wèn)的、通向FFB 11的最佳通道以及將DsContinue()運(yùn)算發(fā)送到數(shù)據(jù)流式機(jī)(Streamer)的通路(如圖1所示)。
      VLx處理器12的組成部分概況于下表表Ⅳ

      VLx處理器一般操作綜述VLx CPU 16執(zhí)行從CM1 RAM讀取存入VLx指令緩沖器30的指令。這些指令設(shè)置VLx寄存器數(shù)值、對(duì)寄存器內(nèi)的內(nèi)容進(jìn)行簡(jiǎn)單算術(shù)運(yùn)算、從CM1讀寫信息、在待調(diào)整的指令流中允許存在控制過(guò)程以及對(duì)通過(guò)GB引擎18產(chǎn)生的I/O進(jìn)行控制。
      VLx處理器12可以從PIO控制器28接收信號(hào)。這些信號(hào)允許VLx時(shí)鐘(圖2中未示出)被接通或斷開(kāi),允許VLx程序計(jì)數(shù)器(圖2中未示出)被復(fù)位到第一條指令,并且允許輸入到GB引擎18的I/O被啟動(dòng)或關(guān)閉。
      通過(guò)將FFB CM1連接到數(shù)據(jù)傳輸開(kāi)關(guān)(未示出)實(shí)現(xiàn)與核心塊14(如圖1所示)的通信。
      VLx GB引擎18被連接到I/O總線22。GB引擎18最多可以在任何一個(gè)時(shí)刻與兩個(gè)數(shù)據(jù)流式機(jī)緩沖器(如圖1所示)進(jìn)行交互,在這兩個(gè)數(shù)據(jù)流式機(jī)緩沖器中,其中一個(gè)提供輸入數(shù)據(jù)流,另一個(gè)存儲(chǔ)輸出。VLx寄存器的說(shuō)明VLx CPU 16對(duì)寄存器文件20內(nèi)的32個(gè)16位寄存器進(jìn)行控制。這些寄存器為常規(guī)可讀/可寫寄存器。其中一些寄存器與只讀的虛擬寄存器共享地址端口,因?yàn)樗鼈兪菣z測(cè)由于其它指令的執(zhí)行結(jié)果產(chǎn)生的系統(tǒng)狀態(tài)的通道。
      對(duì)于常規(guī)寄存器,存在一個(gè)周期的等待時(shí)間的寄存器寫回。這意謂著,在調(diào)整寄存器的指令之后的下一條指令不能使用寄存器的內(nèi)容。如果需要此數(shù)值,下面的指令可以使用虛擬寄存器acc 24內(nèi)的累積值,虛擬寄存器acc 24總是利用數(shù)學(xué)運(yùn)算的結(jié)果置位的。例如# Writeback the result to zzin of incrementing zzin by 1ADD_K(W,zzin,1);# zzin值對(duì)下面的指令不可用,用acc.
      SHL_K(0,acc,2);# zzin值現(xiàn)在可用。
      存在幾個(gè)虛擬寄存器,其中最值得注意的是累加器acc虛擬寄存器24。下表說(shuō)明了這些專用寄存器。請(qǐng)注意,在VLx程序中使用了寄存器符號(hào)名稱而未使用寄存器索引值,由于實(shí)際索引值還會(huì)發(fā)生變化。還請(qǐng)注意,在這些虛擬寄存器中,有幾個(gè)虛擬寄存器具有專用于MPEG2解碼處理的數(shù)值,并為此目的與GB引擎18進(jìn)行交互。
      表Ⅴ當(dāng)用指令操作數(shù)RI1參考虛擬寄存器時(shí)實(shí)際使用的數(shù)值


      表Ⅵ當(dāng)指令操作數(shù)RI2定位虛擬寄存器時(shí)使用的實(shí)際數(shù)值

      FFB CM1的說(shuō)明VLx處理器12需要一條到CM1的優(yōu)先通道路徑。當(dāng)VLx處理器12使用CM1時(shí),其它FFB 11單元(例如圖1所示的3D加速器)就不能使用CM1。通過(guò)設(shè)置3D2D來(lái)控制寄存器26,可以由VLx處理器12來(lái)配置CM1的使用,因此,其指定由VLx處理器12進(jìn)行配置。
      通常,從發(fā)出VLx處理器計(jì)時(shí)開(kāi)始,CM1載入和存儲(chǔ)操作具有單周期等待時(shí)間。然而,在FFB 11內(nèi)對(duì)CM1的判定將允許MAP 1000處理器10的其它部分訪問(wèn)CM1,并且這樣會(huì)根據(jù)外部請(qǐng)求的大小而增加等待時(shí)間。相對(duì)于外部請(qǐng)求(如由圖1所示的數(shù)據(jù)流式機(jī)發(fā)出的請(qǐng)求),仲裁算法總是給予VLx處理器12優(yōu)先權(quán)。當(dāng)VLx處理器12正在執(zhí)行時(shí),可能需要訪問(wèn)CM1的其它部分具有數(shù)據(jù)流式機(jī)。如VLx應(yīng)用程序所需要的,數(shù)據(jù)流式機(jī)會(huì)將數(shù)據(jù)從CM1拉出或?qū)?shù)據(jù)推入CM1。
      VLx處理器12每個(gè)周期發(fā)出一個(gè)存儲(chǔ)器操作命令。存儲(chǔ)器操作命令包括指令預(yù)提取以及存儲(chǔ)器載入操作命令或存儲(chǔ)器存儲(chǔ)操作命令,通過(guò)執(zhí)行控制存儲(chǔ)器的VLx指令來(lái)觸發(fā)存儲(chǔ)器載入操作命令或存儲(chǔ)器存儲(chǔ)操作命令。對(duì)于指令預(yù)提取,VLx請(qǐng)求存儲(chǔ)器讀8個(gè)字節(jié)(4條16位VLx指令)。對(duì)于指令載入/存儲(chǔ)操作命令,VLx請(qǐng)求存儲(chǔ)器對(duì)16位數(shù)進(jìn)行運(yùn)算。
      如果有對(duì)所要求的CM1的進(jìn)行外部請(qǐng)求,VLx應(yīng)用程序會(huì)考慮此請(qǐng)求并將它寫入,這樣,在幾個(gè)周期內(nèi)存儲(chǔ)器不訪問(wèn)CM1,因此,外部請(qǐng)求可以獲得服務(wù)時(shí)間避免要求不能滿足的現(xiàn)象。VLx CPU的說(shuō)明VLx CPU 16執(zhí)行本章后面說(shuō)明的指令。
      如上所述,處理器對(duì)寄存器文件20內(nèi)的32個(gè)16位寄存器進(jìn)行控制。CPU 16還可以將數(shù)值讀寫到上述的CM1存儲(chǔ)器空間。通過(guò)執(zhí)行特殊指令對(duì)GB 18進(jìn)行控制而其它指令則允許VLx應(yīng)用程序?qū)scontinue()類運(yùn)算發(fā)送到描述符程序,該描述符程序由圖1所示的數(shù)據(jù)流式機(jī)執(zhí)行。
      CPU 16內(nèi)的主要單元如下·程序計(jì)數(shù)器(圖2中未示出)·指令預(yù)提取緩沖器30·指令執(zhí)行邏輯電路(未示出)·累加器(盡管在圖2中未示出該累加器本身,但是通過(guò)讀虛擬寄存器acc 24可以讀取存儲(chǔ)在累加器內(nèi)的數(shù)值。)CPU 16對(duì)預(yù)提取存入指令預(yù)提取緩沖器30的指令進(jìn)行連續(xù)處理。指令預(yù)提取緩沖器30保持8條16位VLx指令。除了操作轉(zhuǎn)移情況或除了執(zhí)行每4個(gè)周期用來(lái)控制CM1的2條指令的情況外,CPU 16以足夠的時(shí)間從CM1中啟動(dòng)指令緩沖預(yù)提取,以避免指令流水線失效。每個(gè)指令預(yù)提取將4條有效VLx指令載入預(yù)提取緩沖器30。
      VLx處理器12從CM1開(kāi)始地址(距CM1的偏移量為0)開(kāi)始執(zhí)行指令。利用在下一個(gè)周期在累加器中可以使用的執(zhí)行算術(shù)運(yùn)算和邏輯運(yùn)算的指令,并在后續(xù)周期可選擇寫回結(jié)果寄存器,每個(gè)周期解碼、執(zhí)行一次指令。
      VLx指令有如下幾種·算術(shù)運(yùn)算,例如加法、減法、“與”運(yùn)算、“或”運(yùn)算、“異或”運(yùn)算、左Endian交換移位、右Endian交換移位·轉(zhuǎn)移運(yùn)算,例如>、==、轉(zhuǎn)移、條件轉(zhuǎn)移、間接轉(zhuǎn)移以及快速轉(zhuǎn)移機(jī)制·GetBits控制操作·存儲(chǔ)器載入保存操作CPU的16位指令字包括5位運(yùn)算碼和幾個(gè)操作數(shù)。該指令集包括多級(jí)運(yùn)算,并且包括用于控制GB引擎并與GB引擎交互的專用運(yùn)算碼。
      IOIF快速轉(zhuǎn)移運(yùn)算包括在特定條件的快速回路中。僅利用其內(nèi)部指令緩沖器30,它允許VLx處理器的CPU 16在適當(dāng)位置進(jìn)行重復(fù)。這同時(shí)消除了呼叫CM1請(qǐng)求指令和無(wú)延遲轉(zhuǎn)移到指令循環(huán)的頂部,因此提高了速度。到VLx處理器的PIOVLx處理器12具有一個(gè)32位PIO可讀/可寫數(shù)值,該數(shù)值根據(jù)位進(jìn)行讀寫,如下表所示表Ⅶ


      VLx處理器流水線階段VLx處理器的主要階段如下·預(yù)提取,將64位預(yù)提取存入指令預(yù)提取緩沖器30·解碼,CPU 16對(duì)緩沖器和寄存器文件地址獲得的16位指令進(jìn)行解碼·執(zhí)行,執(zhí)行指令·寫回,將結(jié)果寫回寄存器文件20內(nèi)的寄存器預(yù)提取如果CPU 16正在執(zhí)行序列式代碼,所設(shè)計(jì)的64位預(yù)提取將指令數(shù)據(jù)提取到指令預(yù)提取緩沖器30。當(dāng)最后一條指令被載入CPU 16時(shí),各個(gè)新的64位字同時(shí)到達(dá)。請(qǐng)注意,在一種實(shí)施例中,指令預(yù)提取緩沖器30為128位(8條16位指令),并且要求將2個(gè)預(yù)提取運(yùn)算裝入緩沖器30。
      解碼解碼階段設(shè)置寄存器文件地址,以致當(dāng)執(zhí)行階段到來(lái)時(shí)寄存器文件20的數(shù)據(jù)是備用的。請(qǐng)注意,一些諸如READ_GB_x的指令的執(zhí)行過(guò)程,依賴于由緊跟READ_GB_x指令之后的指令適當(dāng)設(shè)置的寄存器文件地址。
      第一執(zhí)行階段該執(zhí)行階段利用寄存器文件20的數(shù)據(jù)或作為操作數(shù)提供的常數(shù)進(jìn)行。執(zhí)行該指令并且在acc虛擬寄存器中可以將結(jié)果及時(shí)用于執(zhí)行下一條指令。
      寫回盡管CPU 16自動(dòng)將算術(shù)指令和邏輯指令的結(jié)果放入累加器,如果程序員希望將結(jié)果拷貝到另一個(gè)寄存器,必需通過(guò)指令中的WB字段指出該行為。將執(zhí)行階段的結(jié)果寫回到寄存器花費(fèi)一個(gè)周期。如果程序員希望在下一個(gè)周期使用運(yùn)算結(jié)果,可以使用acc虛擬寄存器24。
      轉(zhuǎn)移實(shí)現(xiàn)轉(zhuǎn)移花費(fèi)3個(gè)周期。所有轉(zhuǎn)移均是獨(dú)立的。執(zhí)行轉(zhuǎn)移可以直接取操作數(shù)(11位)或寄存器設(shè)置數(shù)值。在轉(zhuǎn)移op被接收后,直到載入目標(biāo)為止,CPU 16不執(zhí)行任何指令??焖俎D(zhuǎn)移快速轉(zhuǎn)移指令(IOIF快速轉(zhuǎn)移)定義了一種操作方式,在該操作方式中,CPU 16停止從CM1提取指令并且僅執(zhí)行指令緩沖器30內(nèi)的代碼。這樣做的優(yōu)點(diǎn)是,因?yàn)樵诰彌_器30內(nèi)轉(zhuǎn)移到用戶規(guī)定的分支不存在延遲,所以,利用緩沖器30內(nèi)的代碼執(zhí)行循環(huán)比使用從CM1提取的代碼執(zhí)行循環(huán)快得多。這也為將被數(shù)據(jù)流式機(jī)(圖1所示)訪問(wèn)的CM1空出周期。
      指令緩沖器30最多可以保持8條指令,必需將緩沖器30內(nèi)的代碼調(diào)整到8字邊界。使用快速轉(zhuǎn)移能力要求程序員預(yù)定循環(huán)主體中的指令數(shù)。范圍在0至3的指令數(shù)定義緩沖器30內(nèi)的地址,一旦到達(dá)最后一條指令(在緩沖器30中位第8條指令),CPU在該地址返轉(zhuǎn)。這意謂著,在該循環(huán)中可以包括5至8條指令。GetBits引擎將VLx處理器12內(nèi)的GB引擎18設(shè)計(jì)為支持VLx處理器12對(duì)可變長(zhǎng)度編碼碼元進(jìn)行解碼。所設(shè)計(jì)的GB 18可以對(duì)從I/O總線22接收的數(shù)據(jù)進(jìn)行位提取和位插入操作并支持參數(shù)提取。它負(fù)責(zé)匯編輸入數(shù)據(jù)并執(zhí)行為查找正確的查詢表所必需進(jìn)行的部分運(yùn)算。
      GB引擎18具有下列基本功能·對(duì)從I/O輸入數(shù)據(jù)流到來(lái)的各位進(jìn)行各字節(jié)位翻轉(zhuǎn)處理。在GetBits處理過(guò)程中,這樣可以使各位被GB引擎18處理。
      ·對(duì)I/O數(shù)據(jù)流中的輸出位進(jìn)行各字節(jié)位翻轉(zhuǎn)處理。這樣可以保留與VLIW核心14(如圖1所示)交互的適當(dāng)endian值。
      ·對(duì)I/O輸入數(shù)據(jù)流中的數(shù)據(jù)進(jìn)行移位并使該數(shù)據(jù)在symbol虛擬寄存器36中可以使用,而且選擇性地將該數(shù)據(jù)配置到輸出數(shù)據(jù)流中。
      ·endian交換I/O輸入數(shù)據(jù)流中的位。
      ·從比特流的最高有效位開(kāi)始,對(duì)前導(dǎo)0位或1位進(jìn)行計(jì)數(shù)(各字節(jié)位翻轉(zhuǎn)后接收的第一位),并可以在虛擬寄存器nzero(圖2中未示出)中使用此計(jì)數(shù)。
      ·可以選擇性地使用當(dāng)前symbol數(shù)值在有限集合的硬件編碼MPEG2表中查找結(jié)果數(shù)值,然后,返回表數(shù)值作為symbol數(shù)值。
      ·可以將數(shù)據(jù)拼接以輸出數(shù)據(jù)流。
      GB引擎18與VLx CPU 16具有兩個(gè)主要接口1.通過(guò)寄存器文件202.簡(jiǎn)單控制位控制位為·Run/Halt(從VLx CPU 16送到GB 18)·Done/Busy(從GB 18送到CPU 16)CPU 16對(duì)VLx GB指令的執(zhí)行過(guò)程進(jìn)行配置并控制GetBits操作。為了獲得適當(dāng)配置,必需將諸如適當(dāng)數(shù)據(jù)流式機(jī)緩沖器信息和通道信息的信息發(fā)送到VLx處理器12,這樣就可以配置GB引擎18。
      利用I/O總線22上的兩個(gè)通道,GB引擎18可以在任何給定時(shí)間與I/O總線22進(jìn)行交互。其中一個(gè)通道38用于輸入數(shù)據(jù)流,另一個(gè)通道40用于輸出數(shù)據(jù)流。
      當(dāng)GB引擎18處理輸入時(shí),將輸入數(shù)據(jù)送到輸入緩沖器42。當(dāng)進(jìn)行GetBits操作時(shí),則對(duì)輸入緩沖器42內(nèi)的數(shù)據(jù)進(jìn)行處理。GB引擎18在I/O總線22上以I/O總線速率讀出請(qǐng)求以保持?jǐn)?shù)據(jù)送到輸入緩沖器42。I/O傳送的輸入數(shù)據(jù)的大小為4字節(jié)。
      如果將GetBit引擎18配置為讀輸入,而且如果在其輸入緩沖器42中它具有足夠數(shù)量的未處理位,則它只能處理輸入數(shù)據(jù)。VLx程序?qū)B引擎18配置為處理輸入,并且應(yīng)該檢驗(yàn)是否存在足夠的位通過(guò)使用特殊轉(zhuǎn)移條件指令(BRACIND(…_gbstall))進(jìn)行待處理。
      或者通過(guò)顯式安排數(shù)據(jù)(例如,通過(guò)G_splice)或者作為輸入緩沖器42內(nèi)的碼元移位的附帶效應(yīng),均可以將產(chǎn)生的輸出送到輸出緩沖器44。
      如果對(duì)GB引擎18進(jìn)行配置以將輸出寫入I/O總線22,并且如果它在輸出緩沖器內(nèi)具有足夠空間用于寫入更多的位,則它只能產(chǎn)生輸出。當(dāng)有效位的4字節(jié)被寫到輸出緩沖器44時(shí),GB引擎18將啟動(dòng)4字節(jié)I/O寫傳送到I/O總線22。
      輸入緩沖器42的大小為112位。輸出緩沖器44的大小為92位。當(dāng)在緩沖器42內(nèi)至少存在40位時(shí),則在輸入緩沖器42內(nèi)存在足夠的輸入數(shù)據(jù)供GetBits處理。輸出緩沖器44必需至少具有21位的空間用于GetBits處理,GetBits處理會(huì)影響輸出緩沖器的狀態(tài)。VLx指令以VLx匯編語(yǔ)言對(duì)CPU 16進(jìn)行編程。以下列出其指令集結(jié)果的目標(biāo)控制對(duì)于BRACIND之外的指令,以下情況均適用如果指令的WB字段=0,則在acc虛擬寄存器24內(nèi)可以將該指令的結(jié)果用于算術(shù)運(yùn)算。
      如果WB字段=1,則將指令的結(jié)果拷貝到利用指令的R11字段尋址的寄存器。
      如果只有BRACIND指令,WB的作用不同。詳細(xì)討論請(qǐng)參考關(guān)于BRACIND的說(shuō)明。指令格式CPU的16位指令字具有下列結(jié)構(gòu)表ⅧVLx指令格式

      表Ⅸ指令中使用的操作數(shù)


      指令說(shuō)明下面說(shuō)明指令的格式。MNEMONIC為匯編語(yǔ)言的指令助記。WB為WB字段數(shù)值。Arg1和Arg2為上述表6所示的操作數(shù)。所有的周期計(jì)數(shù)均以200 MHz VLx時(shí)鐘的VLx時(shí)鐘周期計(jì)數(shù)。
      ADD_K(WB,RI1,K5)周期第1個(gè)周期將結(jié)果送到虛擬寄存器acc 24;第2個(gè)周期將結(jié)果送到其它可用的任一寄存器(通常為寄存器文件20內(nèi)的寄存器)。
      功能將常數(shù)K5與寄存器RI1的內(nèi)容相加。
      示例ADD_K(0,tbase 12,0)解釋該示例將數(shù)值0和寄存器tbase 12的內(nèi)容相加。acc虛擬寄存器24在之后的周期使用此運(yùn)算結(jié)果。
      ADD_R(WB,RI1,RI2)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將寄存器RI2的內(nèi)容與寄存器RI1的內(nèi)容相加。
      示例ADD_R(1,pctype,acc)解釋該示例將虛擬寄存器acc 24的內(nèi)容與以pctype符號(hào)尋址的寄存器的內(nèi)容相加,并使該虛擬寄存器在后續(xù)周期可以使用此結(jié)果,而且pctype寄存器在2個(gè)周期后可以使用此結(jié)果。
      SUB_K(WB,RI1,K5)周期第1周期將結(jié)果送到虛擬寄存器acc;第2周期將結(jié)果送到其它任一寄存器。
      功能從寄存器RI1的內(nèi)容中減去常數(shù)K5。
      請(qǐng)注意,通過(guò)使用iszero虛擬寄存器來(lái)提供常數(shù)0允許利用SUB_K(0,iszero,reg)一步求反,可以將SUB用于對(duì)數(shù)值進(jìn)行一步求反。
      示例SUB_K(0,acc,1)解釋將1從虛擬寄存器acc 24中減去,并在下一條指令的acc 24內(nèi)可以使用此結(jié)果。
      SUB_R(WB,RI1,RI2)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將寄存器RI2的內(nèi)容從寄存器RI1的內(nèi)容中減去。
      示例SUB_R(0,5,3)SHL_K(WB,RI1,K5)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將寄存器RI1處的內(nèi)容向左移位的位數(shù)等于K5的第0位至第3位的數(shù)值。所有移位操作均導(dǎo)致將0移入以填充空余位。請(qǐng)注意,在進(jìn)行移位操作之前,K5第4位的值將控制是否進(jìn)行endian交換,如下所述1表示進(jìn)行endian交換,然后向左移位的位數(shù)=K5[3:0]0表示僅向左移位的位數(shù)=K5[3:0]位。
      SHL_R(WB,RI,RI2)
      周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將索引RI1的寄存器的內(nèi)容向左移位的位數(shù)等于寄存器RI2內(nèi)第0位至第3位的數(shù)值(即移位可以從0位移到第15位)。所有移位會(huì)導(dǎo)致將0移入填充空余位。請(qǐng)注意,寄存器RI2第4位的值控制在移位操作之前是否進(jìn)行endian交換如果寄存器RI2第4位的值為1表示具有endian交換,然后右移位的位數(shù)=RI2[3:0]0表示僅右移位的位數(shù)=RI2[3:0]。
      SHR_K(WB,RI1,K5)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將寄存器RI1的內(nèi)容右移位K5位。所有移位操作均導(dǎo)致將0移入填充空余位。請(qǐng)注意,K5的第4位控制在進(jìn)行移位操作之前是否進(jìn)行endian交換,如下所述K5[4]的值為1表示進(jìn)行endian交換,然后左移位的位數(shù)=K5[3:0]0表示僅左移位的位數(shù)=K5[3:0]。
      示例參考下表表ⅩSHR K指令的示例

      SHR_R(WB,RI1,RI2)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將索引RI1處的寄存器的內(nèi)容右移位的位數(shù)等于索引RI2處寄存器中的值。所有移位均導(dǎo)致將0移入填充空余位。請(qǐng)注意,RI2寄存器內(nèi)容的第4位的值控制在進(jìn)行移位操作之前是否進(jìn)行endian交換,如下所述RI2寄存器內(nèi)容的第4位的值為1表示進(jìn)行endian交換,然后右移=RI2[3:0]位0表示僅右移RI2[3:0]位。
      AND_K(WB,RI1,K5)周期第1周期將結(jié)果送到虛擬寄存器aec 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將寄存器RI1的內(nèi)容與常數(shù)K5進(jìn)行邏輯“與”運(yùn)算AND_R(WB,RI1,RI2)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將寄存器RI1的內(nèi)容與寄存器RI2的內(nèi)容進(jìn)行邏輯“與”運(yùn)算OR_K(WB,RI,K5)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將寄存器RI1的內(nèi)容與常數(shù)K5進(jìn)行邏輯“或”運(yùn)算OR_R(WB,RI1,RI2)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將寄存器RI1的內(nèi)容與寄存器RI2的內(nèi)容進(jìn)行邏輯“或”運(yùn)算EXOR_K(WB,RI1,K5)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將寄存器RI1的內(nèi)容與常數(shù)K5進(jìn)行邏輯“異或”運(yùn)算EXOR_R(WB,RI1,RI2)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將寄存器RI1的內(nèi)容與寄存器RI2的內(nèi)容進(jìn)行邏輯“異或”運(yùn)算并將結(jié)果放入累加器。
      拷貝操作SETREG(WB,RI1,acc)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將累加器的內(nèi)容拷貝到寄存器RI1。
      示例SETREG(1,5,acc)解釋該示例將虛擬寄存器acc 24的內(nèi)容拷貝到寄存器5。請(qǐng)注意,WB=0使得不操作而且在功能上與空操作指令NOP等效。
      SET_K(K11)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將11位的常數(shù)K11拷貝到虛擬寄存器acc 24。
      示例SET_K(0b0000001000)解釋將虛擬寄存器acc 24設(shè)置為數(shù)值0b0000001000。
      READ_R(WB,RI1,RI2)
      周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將從由RI2的內(nèi)容尋址的CM1的地址上的數(shù)值讀到寄存器RI1。
      示例READ_R(W,resa,acc)解釋將寄存器resa內(nèi)的數(shù)值設(shè)置為RAM[acc]內(nèi)的數(shù)值。
      WRITE_R(WB,RI1,RI2)周期第1周期將結(jié)果送到虛擬寄存器acc 24;第2周期將結(jié)果送到其它任一寄存器。
      功能將RI1的數(shù)值寫入由RI2的內(nèi)容尋址的CM1的地址上。
      BEQ0(K11)周期存在3條空操作指令,直至載入目標(biāo)。
      功能如果虛擬寄存器acc 24為0,則轉(zhuǎn)移到K11地址。
      示例BEQ0(0b000011110101)GOTO(K11)周期存在3條空操作指令,直至載入目標(biāo)。
      功能轉(zhuǎn)移到地址K11。
      示例GOTO(0b00000000011)解釋將程序計(jì)數(shù)器設(shè)置為0b00000000011。
      BGT0周期存在3條空操作指令,直至載入目標(biāo)。
      功能如果虛擬寄存器acc>0,則轉(zhuǎn)移到地址K11。
      示例BGT0(jumplocl)BRACIND(WB,RI1,K5)周期存在3條空操作指令,直至載入目標(biāo)。
      功能轉(zhuǎn)移條件間接指令提供轉(zhuǎn)移控制。用戶掩碼K5用于確定用哪個(gè)條件來(lái)測(cè)試條件轉(zhuǎn)移。存在4個(gè)互斥組或條件。在特定條件組中,BRACIND指令至多能同時(shí)測(cè)試3個(gè)條件。為了進(jìn)行轉(zhuǎn)移,同時(shí)測(cè)試的所有條件必需是真實(shí)條件。目標(biāo)是其數(shù)值保持在寄存器文件RI1的地址。如果置位WB,就將當(dāng)前程序計(jì)數(shù)器值寫入RI1。
      WB=0表示如果未檢測(cè)到轉(zhuǎn)移條件,則RI1內(nèi)容未發(fā)生變化。
      WB=1表示如果檢測(cè)到轉(zhuǎn)移條件,則將當(dāng)前PC值放入RI1。(這使得可以建立從子例程呼叫的返回。)K5掩碼值包括4個(gè)互斥組。各組至多可以同時(shí)測(cè)試3個(gè)條件。
      以下為測(cè)試條件表Ⅺ

      可以同時(shí)對(duì)下列操作進(jìn)行測(cè)試·C_gbpend,C_gbloop,C_dts·C_gbstall,C_eq0,C_4eq0
      ·C_always,C_8eq0,C_lsb·C_gbstall2,C_lt0,C_gt0規(guī)定同時(shí)測(cè)試的方法要求對(duì)相應(yīng)位進(jìn)行適當(dāng)設(shè)置。例如,C_neq0也作了定義。這是C_lt0位和C_gt0位的或運(yùn)算(or′ing)。
      解釋使用BRACIND的一些示例為如果GB未準(zhǔn)備好呼叫停止處理例程,則校驗(yàn)GB的狀況。
      從子例程呼叫返回(參考上述例程)預(yù)計(jì)算目標(biāo)地址并利用此目標(biāo)地址來(lái)控制程序流程。
      READ_GB_K(WB,K1,K2)周期根據(jù)K1值,4個(gè)周期。G_hwmot的K1值使結(jié)果在8個(gè)周期以后才能使用。
      功能將K1值和K2值送到GB引擎18。
      READ_GB_R(0,K1,RI2)周期根據(jù)K1值,4至8個(gè)周期GB引擎18的所有受控于程序員的配置和控制是通過(guò)CPU16將16位控制字寫入GB引擎18實(shí)現(xiàn)的。它將此值用于·設(shè)置GB_18的操作模式·對(duì)新碼元進(jìn)行處理CPU_16通過(guò)虛擬寄存器訪問(wèn)GB引擎18的結(jié)果??梢砸赃@種方法訪問(wèn)的數(shù)據(jù)類型包括·碼元虛擬寄存器36內(nèi)的碼元緩沖內(nèi)容(16位)·虛擬寄存器nzero(圖2未示出)內(nèi)的前導(dǎo)0/1數(shù)GetBits命令參數(shù)如上所述,利用兩條指令(READ_GB_K和READ_GB_R)對(duì)GB引擎18進(jìn)行控制。當(dāng)需要將第一參數(shù)與第二參數(shù)相加時(shí),用一個(gè)常數(shù)對(duì)GetBits的活動(dòng)進(jìn)行控制。下表列出這些命令。
      表Ⅻ

      G_Write根據(jù)輸入請(qǐng)求和輸出請(qǐng)求以及輸入處理和輸出處理的當(dāng)前狀態(tài)對(duì)數(shù)據(jù)流式機(jī)緩沖器(如圖1所示)的影響,G_Write設(shè)置并讀取GB引擎18的配置。
      當(dāng)提供數(shù)值“1”作為第二操作數(shù)(K2或RI2數(shù)值)時(shí),將數(shù)據(jù)流式機(jī)緩沖器的配置信息寫入GB引擎18。當(dāng)提供數(shù)值“0”作為第二操作數(shù)時(shí),對(duì)于此信息,GB引擎18的當(dāng)前配置返回碼元寄存器36。
      對(duì)VLx指令流中的READ_GB_x指令之后的指令的RI1數(shù)值進(jìn)行解碼獲得要寫入的數(shù)值。以下將解釋該數(shù)值第15位如果設(shè)置,當(dāng)將輸入比特流移位時(shí)就不產(chǎn)生輸出。
      第14位如果設(shè)置,進(jìn)行轉(zhuǎn)換允許將輸出比特流寫入輸出緩沖器44。
      第13位如果設(shè)置,僅對(duì)第12位中規(guī)定的內(nèi)容進(jìn)行計(jì)數(shù)。這可以應(yīng)用于對(duì)前導(dǎo)1或前導(dǎo)0進(jìn)行計(jì)數(shù)。如果清除,這說(shuō)明將對(duì)前導(dǎo)1或前導(dǎo)0的位數(shù)(根據(jù)當(dāng)前碼元內(nèi)的第一位的值)進(jìn)行計(jì)數(shù)并返回虛擬寄存器nzero,用于進(jìn)行引起進(jìn)行此計(jì)數(shù)的GetBits操作。
      第12位如果對(duì)第13位進(jìn)行設(shè)置,這就規(guī)定,如果第12位被清除,僅對(duì)前導(dǎo)0進(jìn)行計(jì)數(shù),否則僅對(duì)前導(dǎo)1進(jìn)行計(jì)數(shù)。
      第11位至第6位從DS緩沖器ID提取輸入數(shù)據(jù)流。
      第5位至第0位將輸出數(shù)據(jù)流送到DS緩沖器ID。
      例如,如下示例說(shuō)明了輸入數(shù)據(jù)流和輸出數(shù)據(jù)流的配置#配置信息在偏移量L_GBDATASET_K(L_GBDATA);#將該配置讀入寄存器tmp3READ_R(W,tmp3,acc);#RAM操作等待1周期NOP(0,tmp3,tmp3);
      #寫該配置信息READ_GB_K(0,G_write,1);#寫值0,讀值1ADD_R(0,tmp3,tmp3);#為GB G_write設(shè)置端口ADD_R(0,tmp3,tmp3);#為GB G_write設(shè)置端口ADD_R(0,tmp3,tmp3);#為GB G_write設(shè)置端口G_setoptG_setopt命令對(duì)GB引起18的模式進(jìn)行配置。它將諸如在碼元處理中是對(duì)1的位數(shù)進(jìn)行計(jì)數(shù)還是對(duì)0的位數(shù)進(jìn)行計(jì)數(shù)以及是將輸入I/O激活還是將輸出I/O激活的信息通知GB引擎18。該配置信息被作為K2或RI2設(shè)置傳送。
      通過(guò)設(shè)置特定位進(jìn)行配置第5位設(shè)置為0第4位如果設(shè)置為1,強(qiáng)制進(jìn)入DCT處理模式第3位對(duì)哪一個(gè)前導(dǎo)位進(jìn)行計(jì)數(shù),是前導(dǎo)0還是前導(dǎo)1。
      第2位如果為0,對(duì)前導(dǎo)0和前導(dǎo)1均計(jì)數(shù);如果為1,則僅對(duì)第3位內(nèi)的內(nèi)容進(jìn)行計(jì)數(shù)。
      第1位如果為1,不再將輸入數(shù)據(jù)流讀到輸入緩沖器42。
      第0位如果為1,不產(chǎn)生輸出到輸出緩沖器44的任何輸出。
      例如,如下示例說(shuō)明了GetBits的配置READ_GB_K(0,G_setopt,0b00101);#寫輸出,計(jì)0的數(shù)目G_revsym從輸入緩沖器42內(nèi)移出K2位或*RI2位。將輸入緩沖器42內(nèi)的下一個(gè)16位以位翻轉(zhuǎn)順序返回虛擬寄存器symbol 36。G_getsym將K2位或*RI2位從下一個(gè)碼元的輸入緩沖器中移出。將下一個(gè)16位作為symbol虛擬寄存器36內(nèi)的當(dāng)前碼元返回。G_align將輸入比特流或者將輸出比特流或者將兩者均與最近的字節(jié)對(duì)齊,如果還未對(duì)齊就會(huì)截?cái)噍敵龌蚪財(cái)嘣賹懙捷斎?。為了在輸出?shù)據(jù)時(shí)不丟失數(shù)據(jù),建議在使用該指令之前對(duì)填充位進(jìn)行拼接。
      K2或*RI2規(guī)定是將輸入對(duì)齊、還是鍵輸出對(duì)齊、還是將兩者均對(duì)齊。
      第1位如果設(shè)置,就將輸出比特流對(duì)齊第0位如果設(shè)置,就將輸入比特流對(duì)齊G_splice將規(guī)定數(shù)值的規(guī)定位數(shù)拼接為輸出比特流。K2或RI2規(guī)定待拼接為輸出比特流的位數(shù)。
      READ_GB_x之后的指令結(jié)果將拼接數(shù)據(jù)送到GB引擎18。GetBits將此數(shù)據(jù)拼接到從第15位起始的最高有效位。
      例如,以下示例對(duì)將數(shù)據(jù)拼接到輸出數(shù)據(jù)流進(jìn)行了說(shuō)明READ_GB_K(0,G,splice,16);#拼接16個(gè)0SET_K(0);#值為0示例2READ_GB_K(0,G_splice,4);#由結(jié)果拼接4位ADD_K(0,sdata,0);#用ALU操作數(shù)提供數(shù)據(jù)示例3READ_GB_R(0,G_splice,encsym);#拼接長(zhǎng)度是低5位
      SHR_K(0,encsym,8);#從數(shù)據(jù)中除去長(zhǎng)度7.5.4.2.1G_dct這是碼元的DCT處理指令。由GB引擎18完成的活動(dòng)會(huì)在多個(gè)周期出現(xiàn)。G_hwaccG_hwacc的功能能使GB引擎18根據(jù)專用硬件加速M(fèi)PEG2表對(duì)當(dāng)前虛擬寄存器symbol的值進(jìn)行解碼,并將該表的數(shù)值返回。
      K2或R2值虛擬寄存器symbol 36內(nèi)的返回值G_hwchr 第3位至第0位含有解碼碼元的長(zhǎng)度第15位至第4位含有UIMSB順序(位翻轉(zhuǎn)的)的dct_dc_size_chrominance數(shù)值,該數(shù)值與虛擬寄存器symbol 36中的可變長(zhǎng)代碼對(duì)應(yīng)。
      G_hwlum 第3位至第0位含有解碼碼元的長(zhǎng)度第15位至第4位含有UIMSB順序(位翻轉(zhuǎn)的)的dct_dc_size_chrominance數(shù)值,該數(shù)值與虛擬寄存器symbol 36中的可變長(zhǎng)代碼對(duì)應(yīng)。
      G-hwmot 第7位至第0位含有帶符號(hào)整數(shù)運(yùn)動(dòng)代碼數(shù)值,用于對(duì)虛擬寄存器symbol 36內(nèi)的可變長(zhǎng)代碼進(jìn)行解碼。
      第15位至第8位含有UIMSB順序(位翻轉(zhuǎn)的)的運(yùn)動(dòng)偏差。將運(yùn)動(dòng)偏差長(zhǎng)度作為READ_GB_x(0,G_hwacc,G_hwmot)之后的第3條至第6條指令的結(jié)果送到GB引擎18。
      G_nzpa 第4位至第0位含有將當(dāng)前虛擬寄存器symbol數(shù)值移出由虛擬寄存器nzero加1規(guī)定的位數(shù)后獲得的結(jié)果。只將碼元的后面5位返回虛擬寄存器symbol 36。
      G_mbi第4位至第0位含有解碼碼元的長(zhǎng)度第10位至第5位含有利用虛擬寄存器symbol 36內(nèi)的當(dāng)前數(shù)值作為可變長(zhǎng)代碼,對(duì)l-pictures進(jìn)行編譯的macroblock_type。
      G_mbp第4位至第0位含有解碼碼元的長(zhǎng)度第10位至第5位含有利用虛擬寄存器symbol 36內(nèi)的當(dāng)前數(shù)值作為可變長(zhǎng)代碼,對(duì)P-pictures進(jìn)行編譯的macroblock_type。
      G_mbb第4位至第0位含有解碼碼元的長(zhǎng)度第10位至第5位含有利用虛擬寄存器symbol 36內(nèi)的當(dāng)前數(shù)值作為可變長(zhǎng)代碼,對(duì)B-pictures進(jìn)行編譯的macroblock_type。
      G_mai第4位至第0位含有解碼碼元的長(zhǎng)度第10位至第5位含有利用虛擬寄存器symbol 36內(nèi)的當(dāng)前數(shù)值作為可變長(zhǎng)代碼的macroblock_address_increment。
      G_cbp第4位至第0位含有解碼碼元的長(zhǎng)度第10位至第5位含有利用虛擬寄存器symbol 36內(nèi)的當(dāng)前數(shù)值作為可變長(zhǎng)代碼的coded_block_pattern。G_adv2將輸入數(shù)據(jù)流向前推進(jìn)的數(shù)可以通過(guò)先前的G_hwacc、G_hwmot、G_hwlum或G_hwchr數(shù)值計(jì)算。后面的16位作為虛擬寄存器symbol數(shù)值返回。
      IOIF(W,RI1,K5)周期1個(gè)功能此命令優(yōu)先用于將課目指引發(fā)送到外部裝置,并用于控制CPU的一些內(nèi)部裝置(IO附加內(nèi)部接口)。
      示例可以有兩種方法使用IOIF指令,如下所述,由K5操作數(shù)的數(shù)值來(lái)選擇使用方式K5=2完成DsContinueK5=5完成快速轉(zhuǎn)移操作Dscontinue對(duì)于Dscontinue方式,RI1必需是6位數(shù),它用于指示DTS Continue將被送至的數(shù)據(jù)流式機(jī)通道ID。
      IOIF·fastbranch快速轉(zhuǎn)移僅利用其指令緩沖器,fastbranch(快速轉(zhuǎn)移)操作允許VLx處理器的CPU 16僅在適當(dāng)位置進(jìn)行迭代。這兩者均消除了呼叫RAM請(qǐng)求指令并提供到指令循環(huán)頂部的無(wú)延遲轉(zhuǎn)移。對(duì)于這種方式,必須在執(zhí)行IOIF指令之前將控制數(shù)值置入累加器。此控制數(shù)值定義循環(huán)的大小。
      IOIF·fastbranch示例對(duì)于執(zhí)行6條指令的循環(huán),需要將此代碼規(guī)定如下NOP(0.0.0)周期1個(gè)功能此指令提供空操作指令。
      示例NOP(0,0,0)。(操作數(shù)可以為非0)解釋沒(méi)有進(jìn)行有意義的操作。DCT方式VLx處理器12的GB引擎18可以極為有效地對(duì)可變長(zhǎng)碼元進(jìn)行語(yǔ)法分析。這可以以如下方式進(jìn)行各可變長(zhǎng)碼元根據(jù)前導(dǎo)0或前導(dǎo)1的位數(shù)進(jìn)行分組。在前導(dǎo)0和前導(dǎo)1之間所做的選擇是事先確定的,并作為選項(xiàng)設(shè)置到GB 18。
      然后,建立可變長(zhǎng)度解碼(VLD)查詢表(LUT)(圖2中未示出),其每個(gè)碼元組具有一個(gè)LUT(即,一個(gè)LUT對(duì)應(yīng)具有0個(gè)前導(dǎo)0的所有碼元,一個(gè)LUT對(duì)應(yīng)具有1個(gè)前導(dǎo)1的所有碼元,一個(gè)LUT對(duì)應(yīng)具有2個(gè)前導(dǎo)1的所有碼元,等等)。對(duì)于MPEG視頻,可變長(zhǎng)碼元用于代表可以進(jìn)一步處理成為DCT系數(shù)的游程灰度級(jí)對(duì)。對(duì)于MPEG2,要求具有13個(gè)不同的組(即,13個(gè)不同的LUT)。VLx處理器12含有13個(gè)被稱為tbase0至tbasel2的專用寄存器。將這些所謂tbase寄存器設(shè)置到13個(gè)不同LUT地址。必需以下列方式對(duì)每個(gè)tbase寄存器進(jìn)行設(shè)置Bit 15=>1:0 0個(gè)前導(dǎo)1或00:1 1個(gè)以上的前導(dǎo)1或0Bits 14-11在相應(yīng)LUT中元素?cái)?shù)目的log base2Bits 10-0:CM1中LUT的地址表本身采用特定方法來(lái)建立。利用示例能夠很好予以說(shuō)明如果要檢查所有具有2個(gè)前導(dǎo)0的碼元,會(huì)獲得0100s011s0101s其中s為跟在碼元之后的符號(hào)位(根據(jù)解碼DCT系數(shù)的符號(hào),它可以為0也可以為1。)在前導(dǎo)0之后總是1。由于這個(gè)1是冗余的,所以它無(wú)需出現(xiàn)在LUT內(nèi)。GB 18僅自動(dòng)檢查此冗余1之后的碼元。此外,該符號(hào)位不通過(guò)LUT進(jìn)行解碼,但是在將它從表中讀出后,僅進(jìn)行簡(jiǎn)單附加。通過(guò)檢查組中的最長(zhǎng)碼元,可以確定LUT內(nèi)的項(xiàng)目數(shù)。對(duì)冗余1與符號(hào)位之間的各位進(jìn)行位翻轉(zhuǎn),然后被GB 18用作進(jìn)入LUT的索引。在本例中,最長(zhǎng)碼元為0100s。在冗余1和符號(hào)位之間有2位。此對(duì)應(yīng)于具有1個(gè)前導(dǎo)0碼元的LUT具有2位索引(即將存在4個(gè)項(xiàng)目)。在構(gòu)建表的過(guò)程中,比最長(zhǎng)碼元短的所有碼元均應(yīng)被隨意位填充。在本例中,會(huì)獲得0100s011sx0101sLUT內(nèi)的各項(xiàng)目均為16位并對(duì)與碼元對(duì)應(yīng)的游程、灰度級(jí)以及碼元長(zhǎng)度進(jìn)行編碼。將游程編碼為5位,將灰度級(jí)編碼為6位,將碼元長(zhǎng)度編碼為5位。這種情況下的實(shí)際LUT為L(zhǎng)UT_INDEX 0:0000000001000101 #run=0 lev=2 len=5#symbol=0100sLUT INDEX 1:0000100000100100 #run=1 lev=1 len=4#symbol=011sLUT INDEX 2:0001000000100101 #run=2 lev=1 len=5#symbol=0101sLUT INDEX 3:0000100000100100 #run=1 lev=1 len=4#symbol=011s請(qǐng)注意,由于要對(duì)隨意位進(jìn)行填充,所以在表中對(duì)較短碼元(象011)進(jìn)行復(fù)制。
      一旦建立了所有的表,GB 18就準(zhǔn)備對(duì)碼元進(jìn)行分析。當(dāng)進(jìn)入DCT方式時(shí)(通過(guò)READ-GB_K或BRACIND指令),GB 18將檢查比特流并確定前導(dǎo)0的數(shù)目(或前導(dǎo)1的數(shù)目)。然后,根據(jù)確定0的數(shù)目,GB 18確定使用哪個(gè)LUT。相應(yīng)于所選LUT的tbase寄存器(圖2中未示出)用于確定LUT地址以及LUT索引的碼元有多少位。然后,提取索引并進(jìn)行位翻轉(zhuǎn)。用獲得的LUT索引進(jìn)行查找。將查找的結(jié)果用于驅(qū)動(dòng)具有正確游程和灰度級(jí)數(shù)值的游程和灰度級(jí)寄存器,游程和灰度級(jí)數(shù)值與被解碼的碼元對(duì)應(yīng)。將長(zhǎng)度數(shù)值用于提取符號(hào)位并用于驅(qū)動(dòng)具有符號(hào)位值的dct符號(hào)寄存器。最后,用長(zhǎng)度數(shù)值將比特流推到一個(gè)新碼元。
      通過(guò)將灰度級(jí)設(shè)置為0,對(duì)轉(zhuǎn)移碼和EOB進(jìn)行指稱。如果通過(guò)BRANCIND指令將GB 18設(shè)置為DCT方式,則只有當(dāng)灰度級(jí)為0時(shí)轉(zhuǎn)移才實(shí)際生效。在這種方法中,可以建立DCT緊循環(huán),這樣,轉(zhuǎn)移碼和EOB會(huì)轉(zhuǎn)移到循環(huán)之外。
      盡管為了說(shuō)明本發(fā)明,在這里對(duì)本發(fā)明的特殊實(shí)施例進(jìn)行了說(shuō)明,但是通過(guò)上述說(shuō)明,我們知道可以實(shí)現(xiàn)各種替換方案,它們均屬于本發(fā)明實(shí)質(zhì)范圍。
      附錄A第2章 可變長(zhǎng)度解碼/編碼單元1.摘要本章說(shuō)明MAP 1000可變長(zhǎng)度解碼/編碼單元(VLx)。VLx為優(yōu)化的可編程單元,它可以編譯或建立具有可變長(zhǎng)編碼數(shù)據(jù)的比特流。
      VLx補(bǔ)充了在MAP 1000核上處理的VLIW種類。正如以良好的性能用于MPEG或JPEG那樣,它在處理或建立比特流方面也非常有效。
      在本文中,將對(duì)VLx結(jié)構(gòu)和指令集進(jìn)行說(shuō)明。2.前言本章說(shuō)明MAP 1000可變長(zhǎng)度編碼/解碼(VLx)單元。MAP 1000可變長(zhǎng)度編碼/解碼(VLx)單元建立比特流并對(duì)比特流進(jìn)行處理。VLx單元包括一個(gè)16位CPU、一個(gè)起巨型移位器作用的I/O裝置(GetBits引擎)以及連接到協(xié)處理器與MAP 1000 VLIW核共享的通道。2.1 術(shù)語(yǔ)與符號(hào)的說(shuō)明在本章中將頻繁使用下列符號(hào)。
      acc 保持最后算術(shù)指令或邏輯指令的運(yùn)算結(jié)果的VLx虛擬寄存器算術(shù)編碼 無(wú)損數(shù)據(jù)壓縮技術(shù)CM MAP 1000協(xié)處理器存儲(chǔ)器;VLx使用協(xié)處理器存儲(chǔ)體1CPUVLx的中央處理單元,它支持簡(jiǎn)單算術(shù)運(yùn)算和邏輯運(yùn)算、對(duì)運(yùn)算進(jìn)行控制、載入/保存運(yùn)算并與GB進(jìn)行交互。
      DCT系數(shù) 特定余弦函數(shù)的振幅;可以對(duì)VLx進(jìn)行編程并將它們作為MPEG2編碼從MPEG比特流內(nèi)提取。
      DSMAP 1000數(shù)據(jù)Streamerfastbranch根據(jù)已經(jīng)存在于指令緩沖器的指令進(jìn)行VLx CPU循環(huán),而且不從CM預(yù)提取指令。
      FFU MAP 1000協(xié)處理器單元;VLx與3D圖形加速器共享使用CM1。
      GBGetBits引擎;作為巨型移位器的VLx的I/O裝置端口,而且特指具有MPEG2解碼特性。
      JPEG 聯(lián)合圖像專家組標(biāo)準(zhǔn)(JPEG)HDTV高清晰度電視霍夫曼編碼無(wú)損數(shù)據(jù)壓縮技術(shù)MP@ML 位于主灰度級(jí)的主簡(jiǎn)表(Main Profile at Mainlevel);簡(jiǎn)表和灰度級(jí)提供MPEG2語(yǔ)法和語(yǔ)義子集的標(biāo)識(shí)符以及通過(guò)VBV的位速率;參考用于MP@ML限制的H.262。
      MPEG 運(yùn)動(dòng)圖像專家組標(biāo)準(zhǔn)MPEG2 參考ITU H.262或ISO/IEC 13818-2寄存器 通用寄存器RF 含有32個(gè)16位通用寄存器的VLx寄存器文件碼元可變位長(zhǎng)序列,在給定的上下文中具有比特流的意義;參考VLC;VLx虛擬寄存器為I/O輸入寄存器的前16位,根據(jù)GB操作,可以在VLC說(shuō)明中選擇性地對(duì)前16位進(jìn)行查閱。
      tbase寄存器將索引存入軟件表的通用寄存器,GB使用軟件表進(jìn)行DCT處理。寄存器r0至r12為tbase寄存器。
      虛擬寄存器檢查GetBits引擎或CPU的一些狀態(tài)的只讀寄存器數(shù)值;通過(guò)執(zhí)行指令對(duì)此檢查進(jìn)行控制。
      VBV 視頻緩沖檢驗(yàn)器;一種對(duì)由編碼器產(chǎn)生或由解碼器使用的數(shù)據(jù)速率的變化提供制約的緩沖器VLC 可變長(zhǎng)度編碼;對(duì)將短碼字賦予頻繁事件將長(zhǎng)碼字賦予非頻繁事件的編碼的可逆過(guò)程;VLd 可變長(zhǎng)度解碼Vle 可變長(zhǎng)度編碼VLx MAP 1000可變長(zhǎng)度解碼/編碼單元2.2參考資料·[MPEG2]ITU-T H.262或ISO 13818-2 信息技術(shù)-運(yùn)動(dòng)圖像和相關(guān)音頻信息的一般編碼方法視頻·[MPEG4 CD]ISO/IEC 14496-2信息技術(shù)-音頻編碼-可視對(duì)象可視2.3設(shè)計(jì)原理所設(shè)計(jì)的VLx引擎支持MAP 1000對(duì)可變長(zhǎng)度編碼碼元(例如在MPEG比特流中發(fā)現(xiàn)的碼元)進(jìn)行解碼或編碼。此解碼/編碼過(guò)程為固有順序。利用其前的碼元對(duì)比特流內(nèi)的各碼元和結(jié)構(gòu)進(jìn)行編譯。根據(jù)上下文事先已知組成各碼元的位數(shù),或在碼元數(shù)值之前,將組成各碼元的位數(shù)編碼為比特流的長(zhǎng)度數(shù)值。例如,下列數(shù)字顯示了提取的MPEG2比特流‘…0000 0000 0000 0000 0000 0001 0000 1101 0011…’‘0000 0000 0000 0000 0000 1′b開(kāi)始代碼前綴‘01′b根據(jù)上下文,可表示時(shí)間片開(kāi)始代碼、macroblock類或其它解釋
      ‘00′b根據(jù)上下文,可表示圖像開(kāi)始代碼、亮度數(shù)值為1、色度數(shù)值為0或其它解釋‘10′b根據(jù)上下文,可表示B-圖像的macroblock類、色度數(shù)值為2或者其它解釋‘110′b根據(jù)上下文,可表示亮度數(shù)值為4、色度數(shù)值為3、DCT系數(shù)值為0、游程、灰度級(jí)為2其它解釋圖2-1.MPEG2碼元數(shù)值的示例為了以無(wú)損方式對(duì)數(shù)據(jù)進(jìn)行壓縮,諸如游程長(zhǎng)度編碼、霍夫曼編碼或算術(shù)編碼的數(shù)據(jù)壓縮方案均采用代表數(shù)值順序的可變長(zhǎng)度代碼。在傳輸之前,諸如MPEG2的視頻壓縮標(biāo)準(zhǔn)采用這種技術(shù)對(duì)數(shù)據(jù)進(jìn)行壓縮(或編碼),并在傳輸之后,對(duì)數(shù)據(jù)進(jìn)行解壓縮(或解碼)。
      VLx為可編程引擎,專用于對(duì)可變長(zhǎng)數(shù)據(jù)(如MPEG比特流中的數(shù)據(jù))進(jìn)行編碼或解碼處理??删幊烫匦栽试S對(duì)編碼器程序或解碼器程序進(jìn)行編寫或修改以支持新特性或新用途。VLx提供處理多個(gè)比特流的靈活性并提供與MAP 1000 VLIW核的通信。通過(guò)設(shè)計(jì)硬件將處理可變長(zhǎng)數(shù)據(jù)的臨界循環(huán)減小到最小,從而實(shí)現(xiàn)有效處理。此外,專用硬件支持MPEG2解碼功能。
      對(duì)于諸如解碼HDTV、MPEG比特流的任務(wù),可以對(duì)VLx進(jìn)行編程以完成下列活動(dòng)·對(duì)MPEG比特流進(jìn)行預(yù)處理以構(gòu)建定義數(shù)據(jù)流(圖像、時(shí)間片、macroblock等)的更高級(jí)語(yǔ)法結(jié)構(gòu)的結(jié)構(gòu)。
      ·對(duì)DCT系數(shù)進(jìn)行解碼·對(duì)比特流進(jìn)行濾波·建立MPEG比特流設(shè)計(jì)意圖為處理下列要求
      ·預(yù)備以19.4兆比特/秒的速率進(jìn)入8兆比特VBV的HDTVMPEG數(shù)據(jù)流·產(chǎn)生十分之一抽取系數(shù)以以MP@ML分辨率顯式HDTV·對(duì)在MP@ML的MPEG數(shù)據(jù)流同時(shí)進(jìn)行編碼和解碼處理·同時(shí)處理多個(gè)數(shù)據(jù)流2.4特征/主要功能特性在下表和以下各節(jié)總結(jié)了VLx特性

      表2-1 MAP 1000 VLx特性3.背景技術(shù)視頻解碼過(guò)程利用編碼比特流重構(gòu)視頻幀。通過(guò)開(kāi)發(fā)進(jìn)行順序處理的VLx程序(例如比特流分析或DCT系數(shù)的解碼)并結(jié)合一個(gè)或多個(gè)進(jìn)行解碼處理過(guò)程的其它部分的VLIW核心程序,可以有效地實(shí)現(xiàn)此過(guò)程。
      運(yùn)行解碼器程序的VLx為編碼比特流的最早使用者之一。為了對(duì)諸如MPEG2圖像、時(shí)間片、macroblock的高級(jí)語(yǔ)法結(jié)構(gòu)進(jìn)行編譯,可預(yù)分析比特流。對(duì)于VLx MPEG2解碼器程序,其為對(duì)到來(lái)比特流進(jìn)行的移位并建立可以與VLIW程序共享的合成高級(jí)語(yǔ)法結(jié)構(gòu)。
      利用GetBits引擎的專用功能,VLx還支持DCT系數(shù)解碼以及其它MPEG2表查找功能。
      3.1 VLx在MAP 1000體系結(jié)構(gòu)內(nèi)的位置VLx與MAP 1000內(nèi)的其它單元的主要連接關(guān)系所示如下(如圖所示) 圖3-1.MAP 1000體系結(jié)構(gòu)內(nèi)的VLx4.VLx概述這一節(jié)將介紹VLx的高層組織結(jié)構(gòu),并對(duì)其主要組成部分進(jìn)行標(biāo)識(shí)和概述。由于VLx復(fù)雜性,所以用單獨(dú)一個(gè)章節(jié)對(duì)VLx內(nèi)部指令和操作進(jìn)行討論。
      4.1 VLx內(nèi)部組織結(jié)構(gòu)下圖示出VLx單元的高層內(nèi)部體系結(jié)構(gòu)。 圖4.1 VLx單元的頂層組織結(jié)構(gòu)4.2 VLx組成部分的概述VLx包括16位處理器和與VLx CPU通信的GetBits引擎,GetBits引擎的功能如同I/O裝置。CPU和GetBits引擎具有可以連接到含有32個(gè)通用寄存器的寄存器文件的通道。對(duì)于指令預(yù)提取操作和載入/保存操作,CPU均可以訪問(wèn)CM。GetBits引擎既可以利用I/O總線上的數(shù)據(jù)也可以將產(chǎn)生的數(shù)據(jù)送到I/O總線。
      4.2.1 寄存器VLx CPU在32個(gè)16位寄存器r0至r31上進(jìn)行運(yùn)算。在這32個(gè)寄存器中,VLx CPU和GB可以共享通道到其中的13個(gè)寄存器(r0至r12)來(lái)進(jìn)行特殊表處理。另外還有與4個(gè)通用寄存器(r0至r3)共享地址端口的虛擬寄存器。這些虛擬寄存器為只讀寄存器,它們檢查某些可能改變?yōu)橹噶钐幚淼母弊饔玫臋C(jī)器狀態(tài)。4.2.1.1 指令中對(duì)寄存器的說(shuō)明在指令中最多可以規(guī)定2個(gè)寄存器。第一個(gè)寄存器被表示為R1,第二個(gè)寄存器規(guī)定時(shí)表示為R2。對(duì)寄存器的定位確定了對(duì)虛擬寄存器說(shuō)明的解釋。
      如果使用指令寫回版本,R1寄存器為結(jié)果寫回的目的端。在執(zhí)行指令后的周期中,在acc虛擬寄存器24也可以使用該結(jié)果。4.2.1.2 通用寄存器指令可以對(duì)通用寄存器r4至r31進(jìn)行讀寫。寄存器r0至r3與虛擬寄存器共享地址端口。這4個(gè)通用寄存器僅可以利用RAM讀指令寫入。讀取這些寄存器地址的任何嘗試均將導(dǎo)致讀虛擬寄存器數(shù)值。作為DCT處理的一部分,GB可以讀通用寄存器r0至r3。
      寄存器寫回只存在一個(gè)周期的等待時(shí)間。這意謂著,只有acc虛擬寄存器內(nèi)的下一個(gè)指令可以使用調(diào)整寄存器的寄存器內(nèi)容。4.2.1.3 虛擬寄存器虛擬寄存器與四個(gè)通用寄存器(r0至r3)共享地址端口。這意謂著,如果這些寄存器可以被VLx CPU訪問(wèn),則所使用的數(shù)值將由機(jī)器的某些狀態(tài)產(chǎn)生而非由通用寄存器產(chǎn)生。
      虛擬寄存器不能被寫入。寫回到虛擬寄存器將導(dǎo)致共享此虛擬寄存器端口的通用寄存器被寫入。VLx匯編程序利用名稱識(shí)別虛擬寄存器,并進(jìn)行標(biāo)志寫入或者試圖對(duì)這些虛擬寄存器進(jìn)行寫回操作。4.2.1.4 GB如何使用通用寄存器在DCT處理方式中,GB使用寄存器r0至r12。當(dāng)GB訪問(wèn)這些寄存器時(shí),VLx CPU對(duì)寄存器文件的訪問(wèn)將導(dǎo)致寄存器文件的沖突。因此,在此周期中,不允許VLx CPU訪問(wèn)寄存器文件。為了尋址用于DCT系數(shù)處理的適當(dāng)查詢表,GB讀寄存器r0至r12。為了避免這些沖突,可以設(shè)計(jì)用于DCT處理的示例代碼。4.2.1.5 寄存器概述下表概述了寄存器的使用情況。在第26頁(yè)第5節(jié)“VLx指令集”說(shuō)明了R1和R2的位置。寄存器 虛擬 被GB用作 在R1位置 在R2位置時(shí)的數(shù)值寄存器的 DCT處理時(shí)的數(shù)值助記符號(hào) 的表基r0acc 是最后ALU結(jié)果最后ALU結(jié)果r1dctSign, 是GBsign 0 最后一個(gè)CM載入數(shù)值的run (RF[r25]&lt;10:5&gt;)<<1 第15位至第11位的數(shù)值加1r2symbol是 利用GB方式編譯的GB 利用GB方式編譯的GB輸入緩沖器的前16位 輸入緩沖器的前16位對(duì)于ALU指令為0r3 isZero 是 GB對(duì)碼元中的前導(dǎo)0或nZero 前導(dǎo)1的位數(shù)進(jìn)行計(jì)數(shù)r4至r12 是 RF[寄存器] RF[寄存器]r13至r24RF[寄存器] RF[寄存器]r25 lev 是 RF[寄存器] 如果使用call.dct,則為最后一個(gè)CM載入數(shù)值的第10位至第5位的數(shù)值r26至r31RF[寄存器] RF[寄存器]表4-1寄存器總結(jié)4.2.2 協(xié)處理器存儲(chǔ)器VLx使用位于FFU的協(xié)處理器存儲(chǔ)器。對(duì)于MAP 1000,這是一個(gè)4K的存儲(chǔ)區(qū)。當(dāng)FFU 3D控制寄存器處于vld mode時(shí),VLx用一個(gè)周期轉(zhuǎn)向到存儲(chǔ)器請(qǐng)求(或者為64位指令提取或者為16位載入/保存)并且任何其它FFU(例如3D單元)不能使用此存儲(chǔ)體。
      當(dāng)FFU控制寄存器處于vld_mode時(shí),此存儲(chǔ)區(qū)僅可以連接到FFU外部塊,諸如DS控制器或PIO控制器。VLx請(qǐng)求較其它FFU外部塊的請(qǐng)求具有優(yōu)先權(quán)。
      VLx以16位參數(shù)尋址CM1,其中0參數(shù)規(guī)定協(xié)處理器存儲(chǔ)體內(nèi)的第一個(gè)16位地址。4.2.3 VLx CPUVLx CPU為16位處理器,它支持在上述32個(gè)16位寄存器上進(jìn)行簡(jiǎn)單算術(shù)運(yùn)算(加、減、移位)。CPU還可以從CM載入或保存到CM。使用專用指令對(duì)GB進(jìn)行控制。通過(guò)設(shè)置VLx PIO寄存器可以關(guān)閉/啟動(dòng)CPU的時(shí)鐘電路。
      CPU對(duì)預(yù)提取到其指令緩沖器的指令進(jìn)行連續(xù)處理。指令緩沖器以2個(gè)4指令參數(shù)保持8個(gè)16位指令。除了轉(zhuǎn)移情況或3個(gè)連續(xù)載入/保存運(yùn)算及時(shí)防止使用中發(fā)生指令預(yù)提取的情況外,CPU 16及時(shí)啟動(dòng)4條16位指令的指令預(yù)提取(總共64位)以避免指令流水線失效。CPU(快速轉(zhuǎn)移)的專用模式允許CPU周期循環(huán)執(zhí)行指令緩沖器內(nèi)的指令,而無(wú)需指令預(yù)提取。
      PIO復(fù)位時(shí),VLx開(kāi)始執(zhí)行CM1起始存儲(chǔ)地址的指令(從CM1基礎(chǔ)偏移0),與此同時(shí),VLx處理器的時(shí)鐘電路(圖2中未示出)被激活。CPU 16每個(gè)周期解碼然后執(zhí)行一條指令,利用算術(shù)運(yùn)算和邏輯運(yùn)算執(zhí)行指令的結(jié)果,在下一個(gè)周期中可以被acc虛擬寄存器使用。在之后的周期中實(shí)現(xiàn)選擇寄存器寫回。
      VLx CPU流水線具有三個(gè)階段,如下表所示

      表4-2 VLx CPU流水線除非發(fā)生轉(zhuǎn)移,每4個(gè)周期發(fā)生、進(jìn)行一次指令預(yù)提取。在存在轉(zhuǎn)移的情況下,在2個(gè)連續(xù)周期之后,有可能發(fā)生對(duì)目標(biāo)指令和對(duì)之后存入指令緩沖器的指令的指令預(yù)提取。在轉(zhuǎn)移期間,由于轉(zhuǎn)移目標(biāo)已被計(jì)算、從CM1讀取并且被解碼,所以CPU流水線將在3個(gè)周期期間進(jìn)行掛起處理。
      在第5節(jié)將對(duì)VLx指令集進(jìn)行說(shuō)明。存在如下幾種指令·算術(shù)運(yùn)算、邏輯運(yùn)算以及移位運(yùn)算(例如加法運(yùn)算、減法運(yùn)算、“與”運(yùn)算、“或”運(yùn)算、“異或”運(yùn)算、左移位、右移位以及endian交換)·轉(zhuǎn)移操作、轉(zhuǎn)移語(yǔ)句、條件轉(zhuǎn)移、快速轉(zhuǎn)移·GB控制操作·CM1載入/保存操作4.2.4 GetBits引擎GetBits引擎既起到巨型移位器的作用又起到I/O裝置的作用。它被設(shè)計(jì)成有助于對(duì)比特流中的VLx進(jìn)行編碼或解碼。此外,它還具有用于編譯部分MPEG2比特流的專用邏輯電路,因此,它支持DCT系數(shù)抽取或支持構(gòu)造運(yùn)動(dòng)向量。
      GetBits引擎具有如下功能·對(duì)由I/O輸入比特流輸入的到來(lái)的位(通過(guò)DS接收)進(jìn)行各字節(jié)位翻轉(zhuǎn)處理。這使得GB以鄰接順序保持MPEG2位,因此,GB18可以起到巨型移位器的作用。
      ·對(duì)從I/O輸出(發(fā)送到DS)比特流中出去的位進(jìn)行各字節(jié)位翻轉(zhuǎn)處理。保持適當(dāng)?shù)膃ndianess用于與VLIW程序進(jìn)行交互。
      ·對(duì)I/O輸入流輸出的數(shù)據(jù)進(jìn)行移位,并使該數(shù)據(jù)的前16位可以被虛擬寄存器symbol內(nèi)的程序使用,選擇性地將被移位的位置于輸出流中。
      ·endian交換對(duì)symbol數(shù)值的檢查。
      ·利用當(dāng)前symbol數(shù)值以在硬件囿集編碼MPEG2表中查找結(jié)果數(shù)值,然后,將該表數(shù)值作為symbol數(shù)值返回。
      ·利用當(dāng)前symbol數(shù)值,與寄存器r0至r12一起將CM地址作為symbol數(shù)值返回。
      ·將數(shù)據(jù)拼接為輸出數(shù)據(jù)流。
      ·保存并恢復(fù)比特流I/O狀態(tài)信息,這樣就可以對(duì)其它I/O比特流對(duì)進(jìn)行處理。
      VLx CPU對(duì)GetBits引擎(GB)進(jìn)行控制。CPU通過(guò)指定運(yùn)算和最多兩個(gè)操作數(shù)來(lái)對(duì)GB進(jìn)行控制。在VLx指令中,運(yùn)算被指定為K1操作數(shù)。第一GB操作數(shù)直接由地址K1處的VLx指令中的GB指令獲得。第二GB操作數(shù)可以根據(jù)運(yùn)算類型進(jìn)行選擇,它取自指令的K2或R2操作數(shù)。一些GB運(yùn)算要求附加信息。在含有GB運(yùn)算的運(yùn)算完成之后,此附加信息可以立即由在VLx指令的acc虛擬寄存器中看到的最后一個(gè)ALU結(jié)果狀態(tài)獲得。
      GB流水線根據(jù)GB運(yùn)算發(fā)生變化。在流水線中存在若干變體。第一個(gè)流水線是位被移出輸入緩沖器時(shí)的流水線。第二個(gè)流水線用于將位拼接存儲(chǔ)到輸出緩沖器。第三流水線用于保存/寫入GB配置。第四流水線用于硬件加速表查詢數(shù)值。這些流水線不是真實(shí)流水線,因此各階段并不使用唯一資源。相反,應(yīng)將GB運(yùn)算看作2至4個(gè)周期的等待時(shí)間。

      表4-3 GB移位處理流水線4.2.4.1 I/O接口DMA總線為將比特流從DS緩沖器傳送到GetBits引擎所使用的主要裝置。GetBits引擎使用了總線上的兩個(gè)通道,一個(gè)用于輸出,一個(gè)用于輸入??梢詫⑻峁┎⑹褂脭?shù)據(jù)的DS緩沖器配置到GB。
      存在一個(gè)輸入緩沖器和一個(gè)輸出緩沖器。當(dāng)激活GB輸入時(shí),GB發(fā)出4字節(jié)的讀請(qǐng)求,只要輸入緩沖器有存儲(chǔ)空間并存在待使用的數(shù)據(jù),就使用從DS緩沖器輸出的數(shù)據(jù)。當(dāng)在輸入緩沖器中安排各位時(shí),將在硬件中進(jìn)行各字節(jié)位翻轉(zhuǎn),這樣就可以保持比特流的鄰接性。由于GB操作作為VLx程序指令的結(jié)果被執(zhí)行,所以將輸入緩沖器內(nèi)的各位移出輸入緩沖器。輸入緩沖器中一存在用于另一個(gè)4字節(jié)傳送的存儲(chǔ)空間,就向DS發(fā)另一個(gè)請(qǐng)求。
      如果將GB配置為激活輸入,在輸入緩沖器中存在足夠數(shù)量的未處理的位,而且在輸出緩沖器中存在存儲(chǔ)空間(如果輸出已被激活),則它只能對(duì)輸入數(shù)據(jù)進(jìn)行處理。VLx程序?yàn)镮/O配置GB引擎,并且在使用或產(chǎn)生位的GB操作之前,負(fù)責(zé)檢驗(yàn)是否存在足夠的位或存儲(chǔ)空間。利用br.gbstall指令實(shí)現(xiàn)此檢驗(yàn)過(guò)程。
      或者通過(guò)顯式安排數(shù)據(jù)(例如,拼接為輸出比特流)或者作為移位輸入緩沖器內(nèi)的碼元的副作用(濾波或預(yù)分析),均可以將產(chǎn)生的輸出送到輸出緩沖器。如果將GB配置為用于輸出,并且如果它在輸出緩沖器內(nèi)具有足夠空間用于寫入更多的位,則它只能產(chǎn)生輸出。當(dāng)至少4個(gè)字節(jié)的有效位被送到輸出緩沖器時(shí),GB引擎將通過(guò)DMA總線將4字節(jié)傳送到DS。對(duì)寫出的DMA進(jìn)行各字節(jié)位翻轉(zhuǎn)處理。
      對(duì)于MAP 1000,輸入緩沖器為112位的緩沖器。輸出緩沖器的大小為92位的緩沖器。當(dāng)40位被讀取時(shí),則在輸入緩沖器內(nèi)存在足夠輸入供移位。輸出緩沖器必須具有21位的存儲(chǔ)空間以進(jìn)行GB輸出操作。4.2.4.2 GetBits 配置VLx程序?qū)B I/O進(jìn)行配置。它指出是否激活輸入或是否激活輸出,如果激活,則指出輸入到哪個(gè)DS緩沖器或從哪個(gè)DS緩沖器輸出。該程序能夠回讀當(dāng)前配置,該配置不僅包括是否激活I(lǐng)/O以及使用哪個(gè)DS緩沖器,而且包括輸入緩沖器和輸出緩沖器的當(dāng)前狀態(tài)(例如緩沖器內(nèi)的各位以及當(dāng)前位的索引)。
      這樣就允許VLx程序交換并恢復(fù)與特定DS緩沖器交互的狀態(tài)。例如,如果將兩個(gè)緩沖器用于處理各比特流(一個(gè)用于處理輸入,一個(gè)用于處理輸出),通過(guò)在適當(dāng)點(diǎn)(例如在圖像之間)交換GB狀態(tài)(向CM存儲(chǔ)的存儲(chǔ)狀態(tài)和從CM恢復(fù)的恢復(fù)狀態(tài))支持對(duì)多個(gè)比特流的并發(fā)處理,可以支持多比特流。4.2.4.3 GetBits 方式GB支持多種操作方式。第一種方式是直接轉(zhuǎn)發(fā)位使用量(并選擇性地將使用的位發(fā)送到輸出緩沖器)??梢栽诘?9頁(yè)的表4-3“GB移位操作流水線”中查到此流水線。可能會(huì)影響Symbol、dctSign、以及nZero虛擬寄存器的數(shù)值。如果正在處理DCT系數(shù)(DCT處理),則GB將對(duì)寄存器文件進(jìn)行訪問(wèn)以在流水線的DCT查閱階段讀tbase寄存器。
      第二種操作方式是將各位被顯式推入或拼接到輸出寄存器的操作方式。在這種方式下,輸入寄存器不發(fā)生變化。如果這會(huì)導(dǎo)致輸出閾值被超出,則拼接到輸出寄存器的各位可以觸發(fā)I/O寫。在這種操作方式下,與虛擬寄存器狀態(tài)有關(guān)的GB不發(fā)生任何變化。

      表4-4 GB 拼接流水線第三種操作方式用于對(duì)GB本身進(jìn)行配置。在這種方式下,與拼接的情況相同,GB選擇性地使用第二操作數(shù)和acc數(shù)值。在第三種操作方式中,至于GB將通過(guò)I/O總線與哪個(gè)DS緩沖器交互,可以對(duì)GB進(jìn)行配置??梢宰x取或恢復(fù)特定比特流的I/O狀態(tài)。請(qǐng)注意,為了保留I/O的全部狀態(tài),可以全面實(shí)現(xiàn)保存/恢復(fù)。另一種配置選擇是,通過(guò)將它移動(dòng)到字節(jié)定位邊界,可以改變輸入緩沖器和/或輸出緩沖器的當(dāng)前位的位置(將0填充到輸入緩沖器,在輸出緩沖器上進(jìn)行截?cái)?。當(dāng)調(diào)整GB I/O狀態(tài)時(shí),會(huì)影響symbol數(shù)值。

      表4-5 GB I/O設(shè)置流水線

      表4-6 GB I/O狀態(tài)交換流水線

      表4-7 VLx GB I/O狀態(tài)VLx GB I/O狀態(tài)示于表4-7。GB I/O狀態(tài)包括·GB控制狀態(tài)nZero的前導(dǎo)0或前導(dǎo)1計(jì)數(shù)(僅對(duì)前導(dǎo)0或前導(dǎo)1計(jì)數(shù)或?qū)烧呔?jì)數(shù))、輸入源的DS緩沖器索引、輸出目標(biāo)的DS緩沖器索引(參考第47頁(yè)的表5-23,“GB控制位”)。
      ·輸出緩沖器控制作為輸出自動(dòng)產(chǎn)生在輸出緩沖器內(nèi)的位置(參考第47頁(yè)的表5-24,“GB輸出緩沖器控制”)。
      ·輸出緩沖器內(nèi)的位·輸入緩沖器內(nèi)的位·輸入緩沖器控制輸入緩沖器內(nèi)位的位置GB硬件支持第四種處理方式,這種方式中,已知當(dāng)前symbol數(shù)值就可以查詢特定MPEG2表數(shù)值。在第23頁(yè)的4.2.4.4節(jié)“MPEG2硬件加速處理”中對(duì)此進(jìn)行了說(shuō)明。4.2.4.4 MPEG2硬件加速處理除了起到巨型移位器和I/O裝置的作用外,GB還支持MPEG2比特流的加速處理。首先,它支持DCT系數(shù)提取方式。在這種方式下,GB可以查詢軟件數(shù)據(jù)表并利用DCT系數(shù)表來(lái)確定游程、灰度級(jí)信息。這可以利用對(duì)tbase寄存器進(jìn)行聯(lián)合預(yù)置和CM內(nèi)的VLC編碼數(shù)據(jù)表來(lái)實(shí)現(xiàn)(GB和CPU共享這些通用寄存器)。需要更詳細(xì)的內(nèi)容,請(qǐng)參考第24頁(yè)的第4.2.4.5節(jié),“DCT處理”。
      對(duì)MPEG2的特殊支持包括支持查詢對(duì)應(yīng)于VLC的適當(dāng)數(shù)值的硬件表,·dct_dc_size_luminance·dct_dc_size_chrominance·motion_code·coded_block_pattern·macroblock_address_increment·macroblock_type in I-pictures·macroblock_type in P-pictures·macroblock_type in B-pictures對(duì)于這些硬件加速查詢功能,symbol數(shù)值取表數(shù)值的形式,而非輸入緩沖器的前16位。在第49頁(yè),第5.8.4節(jié)“GB MPEG2硬件表查詢操作”,和第53頁(yè),第5.8.5節(jié)“GB DCT操作”中對(duì)此有詳細(xì)說(shuō)明。
      4.2.4.2 DCT處理當(dāng)GB正在處理DCT系數(shù)時(shí),它利用由移位操作確定的Symbol數(shù)值來(lái)產(chǎn)生適當(dāng)軟件查詢表(支持表0-MPEG2 B.14或表1-MPEG2B.15),而且在另一種操作方式將GB方式復(fù)位之前,它還使適當(dāng)表的CM地址可以作為symbol數(shù)值使用。
      差別在處理的DCT查詢階段(參考第19頁(yè),表4-3,“GB移位處理流水線”)。在處理的DCT查詢階段,則GB·GB讀由nZero數(shù)值指出的寄存器。它是tbase寄存器。nZero數(shù)值為0與12之間的數(shù)值。如果該數(shù)值為0,GB就使用tbase0(r0)。如果該數(shù)值為12,則使用tbase 12(r12)。同樣,對(duì)于其間的數(shù)值,可以使用適當(dāng)寄存器。
      ·存儲(chǔ)在tbase寄存器內(nèi)的數(shù)值被編譯為三個(gè)字段tskip、tkeep以及tbase。Tbase為指到CM地址的指針,CM地址為所有具有nZero位數(shù)的前導(dǎo)1或前導(dǎo)0的VLC的子表的基地址。tkeep用于構(gòu)建位標(biāo)記,它可以標(biāo)識(shí)有多少碼元被檢驗(yàn)到超出前導(dǎo)特征tkeepMask,其中所設(shè)置的位數(shù)由tkeep數(shù)值規(guī)定。Tskip標(biāo)識(shí)在計(jì)算表偏移過(guò)程中是否計(jì)數(shù)第一位。如果子表僅含有前導(dǎo)0或前導(dǎo)1,而不是含有兩者,則在計(jì)位時(shí)忽略第一位不計(jì)。這樣就將子表的大小減小了一半。

      nzeroI=(counting either lor 0 bits) nZero:((nZero==0) 1:nZero)(等式1)·下式示出作為symbol數(shù)值返回的數(shù)值symbol=tbase+((symbol>>(nzeroI+tskip))&amp; tkeepMask(等式2)注意等式右側(cè)的symbol數(shù)值由輸入緩沖器的前16位獲得。
      symbol虛擬寄存器內(nèi)的最后結(jié)果為CM地址,可以將CM地址用于讀上述VLC的表輸入數(shù)值。在此操作過(guò)程中,此計(jì)算不會(huì)改變輸入緩沖器的前16位。GB方式對(duì)它們進(jìn)行編譯。
      在第60頁(yè),第6.4節(jié),“DCT表的建立”中說(shuō)明了建立支持MPEG2表0和MPEG2表1的表的方法。5.VLx指令集VLx CPU為16位處理器。所有的指令字均為16位。對(duì)于所有的指令格式,5位字段指出操作方式。根據(jù)操作方式,存在·1位寫回指示符,2個(gè)5位寄存器操作數(shù),或者·1位寫回指示符,1個(gè)5位寄存器操作數(shù)和1個(gè)5位常數(shù)值,或者·1位寫回指示符和1個(gè)5位常數(shù)值以及1個(gè)5位寄存器操作數(shù),或者·1位寫回指示符和2個(gè)5位常數(shù),或者·11位常數(shù)值。
      現(xiàn)將它們總結(jié)為下表15 11 10 9 5 4 0位

      圖5-1.VLx指令格式R1和R2為既標(biāo)識(shí)通用寄存器又標(biāo)識(shí)虛擬寄存器的寄存器地址。K1和K2是常數(shù)。K11為11位常數(shù)。如果設(shè)置,Wb指出R1還是結(jié)果寫回的目標(biāo)寄存器。
      注意寫回的目的地總是通用寄存器(r0至r31),切勿使用共享端口的虛擬寄存器。例如,add.w acc,r13的結(jié)果是r0=*acc+*r13。
      4.2符號(hào)與其它慣例以下為VLx指令的形式instr[.w][R1][R2|K2]instr K11macro(R2|K2)instr說(shuō)明指令macro說(shuō)明指向GB的指令,或從替換源獲取操作數(shù)的指令的替換形式.w指出利用兩個(gè)周期等待時(shí)間將結(jié)果寫回由R1規(guī)定的寄存器R1為寄存器源操作數(shù),并且可以選擇目標(biāo)結(jié)果R2為寄存器源操作數(shù)K2為5位常數(shù)源操作數(shù)K11為11位常數(shù)源操作數(shù)*R1為存儲(chǔ)在由R1規(guī)定的寄存器內(nèi)的數(shù)值*R2為存儲(chǔ)在由R2規(guī)定的寄存器內(nèi)的數(shù)值CM[x]為協(xié)處理器存儲(chǔ)地址規(guī)定的16位數(shù)值,其中x為偏離協(xié)處理器存儲(chǔ)器的起始的16位地址。X的數(shù)值可以為*R1、*R2、*K2或K11。
      &amp;CM[x]為由x規(guī)定的協(xié)處理器存儲(chǔ)器內(nèi)的地址5.1.1運(yùn)算示例

      第一個(gè)表中示出對(duì)指令字的位數(shù)值。對(duì)于此例,指令運(yùn)算碼為5位0,表示空操作指令。寫回字段的數(shù)值或者為1或者為0。如果為1,則將運(yùn)算結(jié)果寫入由用R1表示的5位寄存器地址指出的通用寄存器。

      表5-1示例指令指令以表的形式出現(xiàn)。左邊一列為指令。指令之后的列數(shù)指出可以使用調(diào)整寄存器內(nèi)容之后的周期。例如,關(guān)于示例指令,在1個(gè)周期的等待時(shí)間之后,在acc寄存器內(nèi)可以使用新數(shù)值,因?yàn)樵赗1寄存器內(nèi)在之后的周期可以使用此數(shù)值。5.2 空操作5.2.1 空操作指令


      表5-2 單周期空操作執(zhí)行空操作。選擇性地設(shè)置寄存器端口數(shù)值。5.3 設(shè)置操作的寄存器5.3.1 將虛擬寄存器acc設(shè)置為11位常數(shù)


      表5-3 設(shè)置虛擬寄存器acc將虛擬寄存器acc設(shè)置為由11位常數(shù)規(guī)定的數(shù)值。
      5.3.2 將通用寄存器設(shè)置為acc的內(nèi)容


      表5-4 設(shè)置通用寄存器利用虛擬寄存器acc的數(shù)值對(duì)由R1規(guī)定的通用寄存器進(jìn)行設(shè)置。2個(gè)周期之后,在寄存器內(nèi)可以使用虛擬寄存器acc的數(shù)值。5.4 算術(shù)運(yùn)算與邏輯運(yùn)算5.4.1 加法運(yùn)算


      表5-5 加法運(yùn)算對(duì)于下一個(gè)指令,可以在虛擬寄存器acc內(nèi)使用加法運(yùn)算的結(jié)果,或者在兩個(gè)周期之后的結(jié)果寄存器內(nèi)使用加法運(yùn)算的結(jié)果。5.4.2 減法運(yùn)算


      表5-6 減法運(yùn)算對(duì)于下一個(gè)指令可以在虛擬寄存器acc內(nèi)使用減法運(yùn)算的結(jié)果,或者在兩個(gè)周期之后的結(jié)果寄存器內(nèi)使用減法運(yùn)算的結(jié)果。5.4.3 按位邏輯“與”運(yùn)算



      表5-7 按位邏輯“與”運(yùn)算可以將R1、R2和常數(shù)K2的內(nèi)容作為16位布爾串進(jìn)行處理。對(duì)于下一個(gè)指令,可以在虛擬寄存器acc內(nèi)使用邏輯“與”運(yùn)算結(jié)果,或者在兩個(gè)周期之后在結(jié)果寄存器中使用邏輯“與”運(yùn)算結(jié)果。5.4.4 按位邏輯“或”運(yùn)算


      表5-8 按位邏輯“或”運(yùn)算可以將R1、R2和常數(shù)K2的內(nèi)容作為16位布爾串進(jìn)行處理。對(duì)于下一個(gè)指令,可以在虛擬寄存器acc內(nèi)使用邏輯“或”運(yùn)算結(jié)果,或者在兩個(gè)周期之后在結(jié)果寄存器中使用邏輯“或”運(yùn)算結(jié)果。5.4.5 按位邏輯“異或”運(yùn)算


      表5-9 按位邏輯“異或”運(yùn)算可以將R1、R2和常數(shù)K2的內(nèi)容作為16位布爾串進(jìn)行處理。對(duì)于下一個(gè)指令,可以在虛擬寄存器acc內(nèi)使用邏輯“異或”運(yùn)算結(jié)果,或者在兩個(gè)周期之后在結(jié)果寄存器中使用邏輯“異或”運(yùn)算結(jié)果。5.4.6 選擇Endian交換,按位左移位


      表5-10 在進(jìn)行左移位之前選擇性進(jìn)行Endian交換R1如果對(duì)*R2或常數(shù)K2進(jìn)行設(shè)置,則對(duì)*R1進(jìn)行endian反向。第3位至第0位規(guī)定左移位的位數(shù)。對(duì)于下一個(gè)指令,可以在虛擬寄存器acc內(nèi)使用移位結(jié)果,或者在兩個(gè)周期之后在結(jié)果寄存器中使用移位結(jié)果??臻e位的地址填入0值位。5.4.7 選擇Endian交換,按位右移位


      表5-11 在進(jìn)行左移位之前選擇性進(jìn)行Endian交換R1如果對(duì)*R2或常數(shù)K2進(jìn)行設(shè)置,則對(duì)*R1進(jìn)行endian反向。第3位至第0位規(guī)定右移位的位數(shù)。對(duì)于下一個(gè)指令,可以在虛擬寄存器acc內(nèi)使用移位結(jié)果,或者在兩個(gè)周期之后在結(jié)果寄存器中使用移位結(jié)果。空閑位的地址填入0值位。5.5 協(xié)處理器存儲(chǔ)器定位操作利用VLx產(chǎn)生的16位數(shù)對(duì)協(xié)處理器存儲(chǔ)器進(jìn)行尋址。用距離協(xié)處理器存儲(chǔ)器起始的偏移規(guī)定載入目標(biāo)和存儲(chǔ)目的地。5.5.1 載入


      表5-12 從協(xié)處理器存儲(chǔ)器載入兩個(gè)周期之后,在結(jié)果寄存器內(nèi)可以使用從協(xié)處理器存儲(chǔ)器載入的16位數(shù)值。無(wú)需寫回的ld僅會(huì)影響載入實(shí)現(xiàn)區(qū)CM,而且作為副作用,這可以引起run虛擬寄存器的數(shù)值和lev虛擬寄存器的數(shù)值發(fā)生變化,但未發(fā)生其它有用的事情。如果對(duì)寫回位進(jìn)行設(shè)置,則實(shí)際將載入的數(shù)值載入R1寄存器。5.5.2 存儲(chǔ)


      表5-13 存儲(chǔ)到協(xié)處理器存儲(chǔ)器該指令將R1規(guī)定的寄存器內(nèi)的數(shù)值寫入由R2數(shù)值規(guī)定地址的存儲(chǔ)器位置。5.6 轉(zhuǎn)移操作轉(zhuǎn)移操作會(huì)導(dǎo)致在指令流的執(zhí)行過(guò)程出現(xiàn)3個(gè)周期的掛起(如同插入3個(gè)空操作指令、GB操作持續(xù)進(jìn)行)。其例外情況是快速轉(zhuǎn)移,它根據(jù)已經(jīng)存儲(chǔ)到指令緩沖器的指令進(jìn)行循環(huán)。5.6.1 goto指令


      表5-14 goto指令這是一個(gè)無(wú)條件轉(zhuǎn)移到由K11規(guī)定的目標(biāo)地址的無(wú)條件轉(zhuǎn)移指令。5.6.2 根據(jù)虛擬寄存器acc數(shù)值等于0的轉(zhuǎn)移


      表5-15 根據(jù)acc數(shù)值等于0的轉(zhuǎn)移這是一個(gè)有條件轉(zhuǎn)移到由K11根據(jù)虛擬寄存器acc的狀態(tài)規(guī)定的目標(biāo)地址的條件轉(zhuǎn)移指令。如果acc的值為零,則進(jìn)行轉(zhuǎn)移。5.6.3 根據(jù)虛擬寄存器acc數(shù)值大于0的轉(zhuǎn)移


      表5-16 根據(jù)acc數(shù)值大于0的轉(zhuǎn)移這是一個(gè)有條件轉(zhuǎn)移到由K11根據(jù)虛擬寄存器acc的狀態(tài)規(guī)定的目標(biāo)地址的條件轉(zhuǎn)移指令。如果acc的數(shù)值大于0,則進(jìn)行轉(zhuǎn)移。請(qǐng)注意,將acc的數(shù)值作為有正負(fù)號(hào)的16位數(shù)進(jìn)行處理。5.6.4 復(fù)雜條件轉(zhuǎn)移


      這是一個(gè)有條件轉(zhuǎn)移到由*R1根據(jù)滿足的條件之一規(guī)定的目標(biāo)地址的條件轉(zhuǎn)移指令。通過(guò)將K2作為標(biāo)記進(jìn)行處理,可以對(duì)此組合做規(guī)定??梢酝瑫r(shí)檢驗(yàn)相同存儲(chǔ)體內(nèi)的任何一組條件。在第38頁(yè),表5-17,“brai條件”內(nèi)對(duì)這些進(jìn)行說(shuō)明

      表5-17 brai條件請(qǐng)注意,如果acc不為0(accne0),則利用11011′b的K2數(shù)值可以實(shí)現(xiàn)轉(zhuǎn)移。5.6.5 fastbranch指令



      表5-18 fastbranch指令快速轉(zhuǎn)移為1至8個(gè)指令循環(huán),其中所有的指令均駐留在指令緩沖器內(nèi),因此,返回到循環(huán)的起始位置不存在延遲,并且不需要進(jìn)行指令預(yù)提取。利用ioif指令建立循環(huán)。需要將代碼流形式的指令安排到8指令塊內(nèi),而且將循環(huán)的最后一條指令安排到塊的末端。利用ioif指令將VLx CPU設(shè)置為快速轉(zhuǎn)移方式,并利用ioif指令對(duì)循環(huán)的起始規(guī)定指令緩沖器內(nèi)的起始地址。起始地址被規(guī)定為*R1。或者利用匯編語(yǔ)言或者通過(guò)程序員,可以根據(jù)下列等式事先計(jì)算起始地址(4*InnerLoopOffset)+2(等式3)其中InnerLoopOffset是一個(gè)與在對(duì)齊的8指令塊內(nèi)循環(huán)的第一條指令對(duì)應(yīng)的數(shù)。InnerLoopOffset值為0表示對(duì)齊的8指令塊內(nèi)的第一條指令。
      注意編譯支持可以隱藏此對(duì)齊問(wèn)題。例如,將fastloop{instr…instr}結(jié)構(gòu)放到適當(dāng)位置,其中將嵌入的指令適當(dāng)對(duì)齊,并且將ioiffastbranch指令插入指令流中。5.7 DS操作5.7.1 DsContinue指令


      表5-19 DsContinue指令對(duì)于由*R1規(guī)定的通道標(biāo)識(shí)符,該指令將Dscontinue請(qǐng)求發(fā)送到DS。在進(jìn)行此操作之前,VLx程序無(wú)法檢測(cè)到通道已經(jīng)停止。由于當(dāng)另一個(gè)DsContinue指令在進(jìn)行時(shí),由VLx發(fā)出的DsContinue指令將導(dǎo)致通道標(biāo)識(shí)符被覆蓋,所以,在進(jìn)行此操作之前必須對(duì)Dtsbusy轉(zhuǎn)移指令進(jìn)行檢驗(yàn),而且只將一條DsContinue指令發(fā)送到DS。5.8 GB運(yùn)算指令

      將GetBits運(yùn)算指令從VLx CPU發(fā)送到GB。有兩條指令可以用于將運(yùn)算顯式傳遞到GB:gb直接將K1操作數(shù)編譯為GB操作。

      表5-20 gb運(yùn)算指令K2或*R2為GB運(yùn)算使用的參數(shù)。對(duì)于MPEG2表查詢功能,K1操作數(shù)規(guī)定利用硬件加速表查詢所要求的這些表之一。K2或*R2操作數(shù)說(shuō)明哪個(gè)表正被使用。5.8.1 GB移位操作指令GB K1助記符號(hào)K1值G_GETSYM 0b00011G_REVSYM 0b00000G_ADV2 0b10100

      可以有計(jì)劃地對(duì)GB使用輸入緩沖器內(nèi)的位進(jìn)行控制。在第19頁(yè),圖4-3,“GB移位運(yùn)算流水線”中說(shuō)明了虛擬寄存器受影響時(shí)的流水線。
      Symbol數(shù)值為從輸入緩沖器索引的當(dāng)前位置獲得的后16位。例如,下表示出根據(jù)比特流中的位表示的數(shù)值。第1位和第0位代表VLC0b′00001′,VLC 0b′00001′的后面是“s v0 v1 v2”的數(shù)值。將VLC及其數(shù)值從輸入流中移出要求使用10位,即VLC、數(shù)值以及符號(hào)位。15 0 位的位置x x x x x x s v2 v1 v0 1 0 0 0 0 0 輸入數(shù)據(jù)流中的數(shù)值* * * * * nZero=0GBsign=sx x x x x x s v2 v1 v0 1 0 0 0 0 0 G_GETSYM碼元0 0 0 0 0 1 v0 v1 v2 s x x x x x x G_REVSYM碼元表5-21 symbol(碼元)示例5.8.2 GB拼接操作指令GB K1 助記符號(hào) K1值G_SPLICE0b01111拼接操作指令僅改變輸出緩沖器的狀態(tài)。而不改變諸如dctSign、symbol和nZero的虛擬寄存器的狀態(tài)。利用作為源比特流的acc數(shù)值,將各位以從最高有效位到最低有效位的順序拼接到輸出數(shù)據(jù)流中。

      5.8.3 GB配置操作指令GB K1 助記符號(hào)K1值G_ALIGN 0b01000G_SETOPT 0b01100G_WRITE 0b11000配置操作調(diào)整輸入緩沖器、輸出緩沖器的狀態(tài)或?qū)B進(jìn)行配置。請(qǐng)注意,由于輸入寄存器的狀態(tài)是變化的,所以可能會(huì)影響到支持symbol、nZero的數(shù)值,以及受GBsign影響的數(shù)值。


      5.8.3.1 GB SETOPT選擇將GB選擇作為一組位數(shù)值G_WRITE進(jìn)行處理。位意義4 如果設(shè)置,則使GB進(jìn)入DCT處理方式3 規(guī)定誰(shuí)對(duì)作為前導(dǎo)0或前導(dǎo)1的nZero進(jìn)行計(jì)數(shù)。2 如果清除,則根據(jù)被計(jì)數(shù)的第一位的數(shù)值,忽視第3位不計(jì)并對(duì)鄰接的0或1進(jìn)行計(jì)數(shù)。如果設(shè)置,則僅對(duì)第3位所說(shuō)明的內(nèi)容進(jìn)行計(jì)數(shù)。1 如果設(shè)置,則不將任何輸入讀入到輸入緩沖器(使輸入失效)0 如果設(shè)置,則將產(chǎn)生的輸出送到輸出緩沖器(激活輸出)表5-22 GB G_SETOPT位設(shè)置例如,如果對(duì)0b′00101的數(shù)值進(jìn)行規(guī)定,則輸入和輸出均被激活并且僅對(duì)前導(dǎo)0的位數(shù)進(jìn)行計(jì)數(shù)。5.8.3.2 GB配置選擇(G_WRITE)GB的配置允許I/O狀態(tài)可以被讀出(如果n==0)或被讀出/寫入(如果n>0)。由數(shù)值n確定什么狀態(tài)部分被讀出/寫入。為了確定n的什么數(shù)值影響什么狀態(tài),請(qǐng)參考第23頁(yè)的圖4-7,“VLx GB I/O狀態(tài)”。
      下面說(shuō)明GB控制位。位意義15如果設(shè)置,則當(dāng)對(duì)輸入比特流進(jìn)行移位時(shí)不產(chǎn)生輸出14如果設(shè)置,則激活輸出13如果清除,則根據(jù)被計(jì)數(shù)的第一位的數(shù)值,忽視第12位不計(jì)并對(duì)鄰接的0或1進(jìn)行計(jì)數(shù)。如果設(shè)置,則僅對(duì)第12位所說(shuō)明的內(nèi)容進(jìn)行計(jì)數(shù)。12規(guī)定誰(shuí)對(duì)作為前導(dǎo)0或前導(dǎo)1的nZero進(jìn)行計(jì)數(shù)。11至6 填充輸入緩沖器的DS緩沖器ID5至0 輸出數(shù)據(jù)將要發(fā)送到的DS緩沖器ID。
      表5-23 GB控制位輸出緩沖器控制狀態(tài)包括下列字段。位 意義15至10 保留9至5規(guī)定當(dāng)前位地址索引。將新位附加到此地址4至2保留1 如果設(shè)置,則可以將產(chǎn)生的輸出送到輸出緩沖器(激活輸出)0 規(guī)定在使用輸入時(shí),是否產(chǎn)生輸出。
      表5-24 GB輸出緩沖器的控制下表說(shuō)明了輸入緩沖器的控制。位 意義15至11 保留10至5規(guī)定當(dāng)前位地址索引。將從此地址開(kāi)始使用各位4至0 保留表5-25 GB輸入緩沖器的控制
      5.8.4 GB MPEG2硬件表查詢操作

      這些操作與MPEG2表中數(shù)值的查詢相對(duì)應(yīng)。K1數(shù)值(G_HWACC)總是0b10000。K2或*R2指出進(jìn)行查詢的MPEG2表。對(duì)于所有硬件編碼MPEG2表,利用將VLC的長(zhǎng)度加數(shù)值位長(zhǎng)來(lái)對(duì)內(nèi)部寄存器進(jìn)行設(shè)置。必須使用G_ADV2 GB操作來(lái)使比特流將VLC及其數(shù)值提前到G_MOT比特流的下一個(gè)單元。
      GB K2或*R2助記符號(hào)GB K2或*R2數(shù)值G_CHR 0b00000G_LUM 0b00001G_MOT 0b00011G_MBI 0b00101G_MBP 0b00110G_MBB 0b00111G_MAI 0b01000G_CBP 0b01001G_NZPA0b00100表引用是對(duì)H.262內(nèi)MPEG2定義的表的所有引用。



      請(qǐng)注意,G_MOT屬于多級(jí)GB操作,需要兩倍GB周期數(shù)來(lái)執(zhí)行。

      5.8.5 GB DCT操作

      顯然可以強(qiáng)迫使GB進(jìn)入DCT處理方式。K1操作數(shù)的數(shù)值為‘0b0000’。還可以通過(guò)G_SETOPT使GB進(jìn)入DCT方式。詳細(xì)信息,請(qǐng)參考第24頁(yè),第4.2.4.5節(jié)“DCT處理”以及第60頁(yè),第6.4節(jié)“DCT表的建立”。

      5.8.6 VLx PIO寄存器各位列表下表列出VLx PIO寄存器位的屬于情況。在MAP 1000 PIO內(nèi)存分配圖中定義了一個(gè)寄存器。根據(jù)此寄存器的工作方式,各位取不同的值。存在4種工作方式·常規(guī)方式Break為0并且NormalSetRFAddr為0·RF讀方式Break為0,而NormalSetRFAddr為1,并且RFReadWriteRF為0·RF寫方式Break為0,而NormalSetRFAddr為1,并且RFReadWriteRF為1·斷點(diǎn)方式SetBkptBreak為1,SetBkptRFAddr為0該表并不能代替MAP 1000 PIO內(nèi)存分配圖,這只是提供了一種方便。應(yīng)以MAP 1000 PIO內(nèi)存分配圖為準(zhǔn)。

      表5-26 VLx的PIO寄存器


      表5-26 VLx的PIO寄存器位5.9 PIO寄存器位的說(shuō)明5.9.1 Run
      Run位(NormalRun、RFReadRun、RFWriteRun)指出VLx CPU以及GB時(shí)鐘的狀態(tài)。如果設(shè)置該位,則開(kāi)啟時(shí)鐘。如果清除該位,則關(guān)閉時(shí)鐘。5.9.2 GBCoolGBCool位(NormalGBCool、RFReadGBCool、RFWriteGBCool)指出是否激活GB輸入。當(dāng)設(shè)置此位時(shí),輸入被禁止。當(dāng)清除此位時(shí),輸入被激活。5.9.3 GBPendingGBPending位(NormalGBPending、RFReadGBPending、RFWriteGBPending)指出在進(jìn)行GB輸入或輸出過(guò)程中是否存在I/O事務(wù)。如果清除此位,則進(jìn)行過(guò)程中無(wú)I/O事務(wù)。6.程序員注意事項(xiàng)在激活VLx CPU和GB時(shí)鐘之前,·應(yīng)將CPU的PC復(fù)位到0(已知狀態(tài)),·應(yīng)將VLx程序載入CM,以及·應(yīng)將CM1激活以便被VLx訪問(wèn)。
      激活CPU時(shí)鐘時(shí),VLx就開(kāi)始執(zhí)行指令。當(dāng)將GB操作從CPU傳送到它時(shí),GB將執(zhí)行。
      在將VLx程序載入CM之前,為了使VLx能允許DTS對(duì)CM存儲(chǔ)體進(jìn)行訪問(wèn),必須將FFU內(nèi)的CM1存儲(chǔ)體激活。這就要求通過(guò)3d2dContuolRegister內(nèi)的單位位將FFU設(shè)置為vld_mode。
      在使用之前,要求建立DsContinue,由VLx發(fā)出。VLx利用標(biāo)識(shí)DS通道將被DsContinue的6位(第17位至第12位)提供VldDsContinue。但是VLIM程序復(fù)雜對(duì)VldDsContinue寄存器的剩余位進(jìn)行初始化,以致將6位從VLx寫入會(huì)導(dǎo)致將PIO發(fā)送到DS。6.2 停機(jī)/對(duì)上下文切換的狀態(tài)保存在VLIW核心執(zhí)行的程序的控制下進(jìn)行VLx的可靠停機(jī)或上下文切換,但是還要求當(dāng)前執(zhí)行的VLx程序的配合。其執(zhí)行順序如下·VLIW程序以請(qǐng)求停機(jī)/上下文切換的特定應(yīng)用方式傳遞到VLx程序。和在GBstall條件下相同,這種方式的一種原理是由VLIW程序?qū)懭隒M內(nèi)的商定命令地址,VLx程序?qū)⒃诖_切時(shí)間對(duì)商定命令地址進(jìn)行校驗(yàn)。
      ·如果VLx程序正在進(jìn)行輸入,則VLIW程序或VLx程序關(guān)閉最終會(huì)導(dǎo)致GB失效的GB I/O輸入。
      ·通過(guò)與0位進(jìn)行拼接,VLx程序消除GB輸出。
      ·VLx程序關(guān)閉I/O輸出。
      ·VLx程序?qū)⑷我粫簳r(shí)程序狀態(tài)(諸如寄存器數(shù)值)保存到CM,VLx程序可以以這樣的方式被寫入,以致通過(guò)對(duì)適當(dāng)狀態(tài)進(jìn)行校驗(yàn)并根據(jù)狀態(tài)轉(zhuǎn)移到適當(dāng)程序地址,復(fù)位之后執(zhí)行的第一條指令進(jìn)行校驗(yàn)以檢驗(yàn)這是新開(kāi)始還是再開(kāi)始。
      ·通過(guò)完成狀態(tài)保存的特定應(yīng)用方式,VLx程序向VLIW程序發(fā)信號(hào)。
      ·VLIW程序停止VLx CPU時(shí)鐘。
      ·在釋放被另一個(gè)VLx程序或FFU程序使用的CM之前,VLIW程序開(kāi)始將適當(dāng)CM內(nèi)容傳輸?shù)桨踩刂贰?br> 利用下列順序可以對(duì)VLx進(jìn)行突然停機(jī)·VLIW程序禁止GB I/O輸入請(qǐng)求。
      ·VLIW程序在VLx程序的幾個(gè)周期進(jìn)入失效狀態(tài)。
      ·VLIW程序?qū)Lx CPU時(shí)鐘關(guān)閉。
      請(qǐng)注意,不支持在VLx搶先之后重新開(kāi)始執(zhí)行VLx程序。
      此外,注意,通過(guò)關(guān)閉VLx CPU時(shí)鐘,可以保存VLx狀態(tài)。因此,如果需要轉(zhuǎn)換到另一種用途的唯一資源是CM(正如用于運(yùn)行3DTAC處理),那么這可以在對(duì)VLx進(jìn)行上述突然停機(jī)后通過(guò)簡(jiǎn)單保存并恢復(fù)CM狀態(tài)實(shí)現(xiàn),然后再激活GB I/O輸入并開(kāi)啟VLx CPU時(shí)鐘。
      6.2 通道交換從某種意義上說(shuō),對(duì)比特流復(fù)用進(jìn)行處理的通道交換要求利用VLx程序進(jìn)行處理。沒(méi)有VLx程序的配合,無(wú)法通過(guò)VLIW程序完全實(shí)現(xiàn)。
      通道交換要求·關(guān)閉GB I/O,既關(guān)閉GB I/O輸入又關(guān)閉GB I/O輸出,·交換通道狀態(tài)(參考第21頁(yè)的“GetBits方式”),以及·再激活I(lǐng)/O。
      必須全面對(duì)通道交換進(jìn)行處理。部分交換將會(huì)使GB I/O進(jìn)入中間狀態(tài)。表6-1列出完成此任務(wù)的可能指令序列。請(qǐng)注意,在此示例中,L_GBDATA000為16字節(jié)對(duì)齊地址。G_write將使用地址的后4位確定將哪個(gè)數(shù)值寫入/或讀出。
      register tmp3 r3;register gbind r24;L_GBSWAP#通過(guò)確定不處于Gbstall或setacc$; #Gbpending狀態(tài)來(lái)保存通道狀態(tài),bf.gbstall acc; #然后交換其它setreg gbind,L_GBDATA000;#GB狀態(tài)所處的位置nop;ld.w tmp3,gbind; #用狀態(tài)設(shè)置tmp3fastloop{ #設(shè)置快速轉(zhuǎn)移;gbind低5位=0
      gb G_WRITE,gbind #將值寫入tmp3以聲明gbindadd tmp3,0; #tmp3值狀態(tài)值寫入add tmp3,0;nop; #注意碼元有效嵌套循環(huán)st symbol,gbind; #在gbind位置保留碼元至CMadd gbind,1; #進(jìn)至下一狀態(tài)進(jìn)行交換br.acc4eq0 pcsave; #如果gbind低4位=0,則返回至調(diào)用程序ld.w tmp3,gbind; #設(shè)置下一狀態(tài)以寫入GB}GBDATA000需要為G_write而對(duì)齊,G_write看地址的低4位作為對(duì)讀寫內(nèi)容的指示。
      align 16L_GBDATA000:
      data 0b 0000 0000 0000 0000 #N=0data 0b 0 00 00010 000011#N=1,新輸入通道2,新的輸出通道3#N=2,產(chǎn)生輸出作為使用過(guò)的輸入data 0b 0000 0 110000 100 00 允許輸出;輸出緩沖器中無(wú)輸出data 0(12) #N=3-14輸入/輸出數(shù)據(jù)data 0b 0000 0 110000 100 00 #N=15,使輸入填滿的初始序列表6-1 GB通道交換示例6.4 DCT表的建立為了將GB用于DCT處理,所建立的表必須作為查詢表序列象數(shù)據(jù)一樣駐留在CM內(nèi)。必須激活tbase寄存器來(lái)識(shí)別組成該表的子表的大小和地址。在第24頁(yè),第4.2.4.5節(jié)“DCT處理”中,對(duì)tbase寄存器數(shù)值進(jìn)行了說(shuō)明。tkeep指出該表的大小,其中該表中的項(xiàng)目數(shù)為2tkeep-tskip。項(xiàng)目由VLC內(nèi)剩余位內(nèi)的數(shù)值以位翻轉(zhuǎn)順序組成,而且一定不是跳躍項(xiàng)目。例如,如果tkeep對(duì)tbase1規(guī)定數(shù)值3而tskip對(duì)tbase1規(guī)定數(shù)值1,其中對(duì)前導(dǎo)0進(jìn)行計(jì)數(shù),子表具有4個(gè)項(xiàng)目,它們分別處理VLC‘0100’(項(xiàng)目0;MSB最左邊的位)、VLC‘0110’(項(xiàng)目1)、VLC‘0101’(項(xiàng)目2)以及VLC‘0101’(請(qǐng)注意,最過(guò)時(shí)的位-MSB在右側(cè))‘xxxxxxxxxxxx1010’將使GB移位2位(tkeep-tskip),獲得‘xxxxxxxxxxxxxx10’,然后利用tkeepMask來(lái)屏蔽這些位(請(qǐng)參考第24頁(yè)的“DCT處理”),使得可以在子表中使用項(xiàng)目‘10’或2。
      請(qǐng)注意,如果這些項(xiàng)目數(shù)值中的任何一個(gè)數(shù)值是非法的或要求進(jìn)行特殊處理,在表項(xiàng)目中規(guī)定0位長(zhǎng)來(lái)終止dct循環(huán)。還請(qǐng)注意,如果VLC‘0110’和‘0111’實(shí)際是相同的VLC(即,‘011’),可以將此位長(zhǎng)規(guī)定為4位,并且將最后一位作為符號(hào)位處理。
      正如MPEG2 B.14和B.15中說(shuō)明的那樣,表項(xiàng)目包括游程和灰度級(jí)。表項(xiàng)目還包括VLC的長(zhǎng)度的長(zhǎng)度字段。如果通過(guò)載入操作將表項(xiàng)目從CM中讀取,則游程和灰度級(jí)將分別成為虛擬寄存器run的數(shù)值和虛擬寄存器lev的數(shù)值。

      默許將長(zhǎng)度用于將比特流移位的位長(zhǎng)度與VLC匹配。如果在表中規(guī)定了0位長(zhǎng),則call.dct將轉(zhuǎn)移到正在處理DCT的循環(huán)外。
      所獲得的表的結(jié)構(gòu)和狀態(tài)集示于第61頁(yè)的圖6-1中。tbase寄存器


      CM表


      2-項(xiàng)目子表項(xiàng)目0代表VLC‘10’項(xiàng)目1代表VLC‘11’4-項(xiàng)目子表項(xiàng)目00代表VLC‘0100s’項(xiàng)目01代表VLC‘011s’項(xiàng)目10代表VLC‘010ls’項(xiàng)目11代表VLC‘011s’8-項(xiàng)目子表項(xiàng)目000代表VLC‘001000’項(xiàng)目001代表VLC‘001100’項(xiàng)目010代表VLC‘001010’項(xiàng)目011代表VLC‘001110’項(xiàng)目100代表VLC‘001001’項(xiàng)目101代表VLC‘001101’項(xiàng)目110代表VLC‘001011’項(xiàng)目111代表VLC‘001111’表6-1. DCT Tbase寄存器和表的建立有兩種方法可以使GB進(jìn)入DCT處理方式。第一種方式是顯式設(shè)置這種方式gb_setopt(0b1xxxx);#設(shè)置第4位。
      這樣可以將碼元數(shù)值采用DCT CM結(jié)果用于當(dāng)前VLC。
      另一種方法是利用gb_dct(0);該指令強(qiáng)迫以DCT處理方式對(duì)操作進(jìn)行處理。
      此外,call.dct(r)為實(shí)際可以使在GB、CPU中以及對(duì)CM進(jìn)行訪問(wèn)的幾種操作并行進(jìn)行的專用指令。
      ·利用當(dāng)前的symbol數(shù)值,啟動(dòng)ld.w lev,symbol CM的讀操作。請(qǐng)注意,這樣可以讀由應(yīng)該建立用來(lái)讀表項(xiàng)目數(shù)值的symbol規(guī)定的CM。
      ·如果表項(xiàng)目中的長(zhǎng)度數(shù)值為0,或者如果gbstall條件成立,則轉(zhuǎn)移到規(guī)定的寄存器。
      ·否則,就啟動(dòng)一個(gè)特殊GB操作,這類似于將gb_dct(長(zhǎng)度-retumed-from-last-CM-read)發(fā)送到GB。7.設(shè)計(jì)者的簡(jiǎn)短說(shuō)明將GB、CPU以及CM的交互設(shè)計(jì)為支持5個(gè)周期的DCT處理循環(huán)。所需要的代碼與示例代碼非常一致以滿足等待時(shí)間和沖突問(wèn)題的要求。該解釋同樣適用于運(yùn)動(dòng)向量處理、亮度處理以及其它特殊加速處理。
      權(quán)利要求
      1.一種可變長(zhǎng)度編碼/解碼處理器,包括中央處理單元;與中央處理單元相連的指令緩沖器;以及與中央處理單元相連的GETBITS處理引擎。
      2.根據(jù)權(quán)利要求1所述的處理器,進(jìn)一步包括與中央處理單元和gebits處理引擎相連的寄存器文件。
      3.根據(jù)權(quán)利要求1所述的處理器,進(jìn)一步包括與GETBITS處理引擎相連的輸入緩沖器。
      4.根據(jù)權(quán)利要求1所述的處理器,進(jìn)一步包括與GETBITS處理引擎相連的輸出緩沖器。
      5.根據(jù)權(quán)利要求1所述的處理器,其中中央處理單元包括虛擬累加寄存器。
      6.根據(jù)權(quán)利要求1所述的處理器,進(jìn)一步包括與GETBITS處理引擎相連的輸入緩沖器;并且其中輸入緩沖器包括虛擬碼元寄存器。
      7.一種功能處理塊,它包括指令緩沖器;存儲(chǔ)器;GETBITS處理引擎;以及與指令緩沖器、存儲(chǔ)器以及GETBITS處理引擎相連的中央處理單元。
      8.根據(jù)權(quán)利要求7所述的功能處理塊,其中存儲(chǔ)器被連接到指令緩沖器。
      9.根據(jù)權(quán)利要求7所述的功能處理塊,其中存儲(chǔ)器被連接到GETBITS處理引擎。
      10.根據(jù)權(quán)利要求7所述的功能處理塊,進(jìn)一步包括與處理器、GETBITS處理引擎以及中央處理單元相連的寄存器文件。
      11.根據(jù)權(quán)利要求7所述的功能處理塊,進(jìn)一步包括與GETBITS處理引擎相連的輸入緩沖器;與GETBITS處理引擎相連的輸出緩沖器;與輸入緩沖器和輸出緩沖器相連的輸入/輸出總線。
      12.一種處理器,包括核心電路;與核心電路相連的控制器;以及與控制器相連的功能處理塊,該功能處理塊包括存儲(chǔ)器,輸入/輸出總線,以及與存儲(chǔ)器、輸入/輸出總線相連的可變長(zhǎng)度編碼/解碼處理器,該可變長(zhǎng)度編碼/解碼處理器包括與輸入/輸出總線相連的GETBITS處理引擎,以及與GETBITS處理引擎相連的中央處理單元。
      13.一種方法,該方法包括利用可變長(zhǎng)度編碼/解碼處理器的GETBITS引擎對(duì)數(shù)據(jù)進(jìn)行處理;以及利用可變長(zhǎng)度編碼/解碼處理器的中央處理單元對(duì)GETBITS引擎進(jìn)行控制。
      14.根據(jù)權(quán)利要求13所述的方法,該方法進(jìn)一步包括利用中央處理單元執(zhí)行存儲(chǔ)在指令緩沖器內(nèi)的指令。
      15.根據(jù)權(quán)利要求13所述的方法,該方法進(jìn)一步包括利用GETBITS引擎從輸入/輸出總線接收數(shù)據(jù);以及利用GETBITS引擎將數(shù)據(jù)送到輸入/輸出總線。
      16.根據(jù)權(quán)利要求13所述的方法,進(jìn)一步包括利用核心處理器對(duì)可變長(zhǎng)度編碼/解碼處理器進(jìn)行控制。
      17.根據(jù)權(quán)利要求13所述的方法,進(jìn)一步包括利用GETBITS引擎對(duì)可變長(zhǎng)碼元進(jìn)行分析;以及根據(jù)可變長(zhǎng)碼元的數(shù)值訪問(wèn)查詢表。
      18.根據(jù)權(quán)利要求13所述的方法,進(jìn)一步包括利用GETBITS引擎對(duì)可變長(zhǎng)碼元進(jìn)行分析;以及根據(jù)可變長(zhǎng)碼元內(nèi)的前導(dǎo)0的個(gè)數(shù)訪問(wèn)查詢表。
      19.根據(jù)權(quán)利要求13所述的方法,進(jìn)一步包括利用GETBITS引擎對(duì)可變長(zhǎng)碼元進(jìn)行分析;以及根據(jù)可變長(zhǎng)碼元內(nèi)的前導(dǎo)1的個(gè)數(shù)訪問(wèn)查詢表。
      全文摘要
      可變長(zhǎng)度編碼/解碼處理器(11)包括中央處理單元(16)和與中央處理單元(16)相連的指令緩沖器(32)和GETBITS處理引擎(18)??梢岳锰幚砥?11)將數(shù)據(jù)作為可變長(zhǎng)碼元進(jìn)行編碼或利用MPEG協(xié)議對(duì)可變長(zhǎng)碼元進(jìn)行解碼。
      文檔編號(hào)H04N7/50GK1306697SQ99807791
      公開(kāi)日2001年8月1日 申請(qǐng)日期1999年6月24日 優(yōu)先權(quán)日1998年6月25日
      發(fā)明者理查德·迪利, 亞廷·芒庫(kù), 李愚彬 申請(qǐng)人:赤道技術(shù)公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1