專利名稱:一種基于寄存器組的行程解碼與反掃描實現方法
技術領域:
本發(fā)明屬于視頻解碼及VLSI設計技術領域,應用于視頻解碼的ASIC設計或軟硬件協同設計,涉及一種基于寄存器組的行程解碼與反掃描實現方法。
背景技術:
在大多數的圖像與視頻壓縮標準中,如JPEG、MPEG-1、MPEG-2、MPEG-4、H.264,編碼時,先對幀內數據或幀間殘差的基本塊數據(一般大小為8×8)進行離散余弦變換和量化,然后按一定的順序掃描后進行行程編碼,最后進行可變長編碼。圖1所示為MPEG2視頻解碼器的功能框圖,主要由幀內數據或幀間殘差數據解碼、運動補償、存儲器控制、各種碼表及系統內的各種同步電路構成。幀內或幀間的數據解碼包括的關鍵單元電路為可變長解碼器、行程解碼與反掃描(反掃描嵌在行程解碼中實現)、反量化和反離散余弦變換(IDCT)??勺冮L解碼的輸出為Run-Level對,其中Run表示非零AC系數前連續(xù)零的個數,Level表示非零AC系數的值,如Run_Level=(4,5),表示4個零后加一個5,即00005。行程解碼器從可變長解碼電路的輸出緩存中取出Run_Level對,將其解釋成一串數,并按照如圖2所示的兩種反掃描方式中的一種(由解碼中的系統參數確定)將一個基本塊的全部64個系數寫入1個8×8的緩存區(qū)后,再以先行后列或先列后行的順序讀出緩存區(qū)的數據,輸出給反量化模塊及反離散余弦變換模塊進行計算,最終得到解碼后的基本塊圖像數據。
在上述行程解碼的實現中常常需要使用2片雙端口RAM塊或3片單端口RAM塊(每片RAM塊大小為768Bit,因Level值為12bit,塊大小為64),使行程解碼電路、反掃描與反量化、IDCT能夠完全并行流水實現,因此存儲器的實現資源大(1536Bit或2304Bit),功耗高,且增加后端布局布線復雜度。
當在嵌入式RISC核中用軟件實現時,由于核的片上寄存器文件大小一般為32×32Bit,即使配置為64×16Bit使用,行程解碼也不能完全基于寄存器文件(寄存器堆)實現,而需使用片上或片外存儲器作數據暫時存儲區(qū)(降低解碼速度和效率)。
發(fā)明內容
針對上述背景技術中存在的缺陷和不足,本發(fā)明的目的在于,提供一種基于寄存器組的行程解碼與反掃描實現方法,該方法在行程解碼與反離散余弦變換之間僅使用32×12Bit的寄存器組,即可實現行程解碼、反掃描、反量化和IDCT的并行流水工作。
為了實現上述任務,本發(fā)明采用如下的解決方案一種基于寄存器組的行程解碼與反掃描實現方法,其特征在于在行程解碼與反離散余弦變換之間僅使用32×12Bit的寄存器組,構成行程解碼、反掃描、反量化與IDCT的并行流水工作結構;上述32×12Bit的寄存器組,在工作中用于分時共享存放基本塊的64個系數,該寄存器組在讀寫時序上等價于同步雙端口RAM;上述寄存器組的寫策略為寄存器組的初始值均為0,當對按掃描順序輸入的32個前半部塊數據僅用其非零的系數更新完寄存器組后,對掃描順序地址計數器Scanindex(Scanindex初值為32)對應的0或非0系數,逐個時鐘按寄存器組中32個前半部系數的反掃描輸出順序對寄存器組寫覆蓋;上述寄存器組的數據讀策略當Scanindex>31時,并且IDCT可接受輸入,可以開始依據反掃描的順序,從上到下逐行(掃描方式1)或從左到右逐列(掃描方式2)讀取塊內數據;當按反掃描順序的應讀塊內數據對應為掃描順序的32個后半部塊內數據時,依據寫策略覆蓋原則在寄存器組尋址得到當前的反掃描數據;上述寄存器組的低功耗讀寫方法是記錄解碼EOB時的掃描順序位置EOBindex,根據此值可提前結束寄存器組寫操作;同時在讀時,當反掃描輸出數據對應的掃描順序序號值>EOBindex時,輸出數據直接為0;上述行程解碼、反掃描、反量化與IDCT的并行流水工作結構,是使用按掃描順序輸入的32個前半部數據中的非零系數更新寄存器組后,且當IDCT標記為可接受輸入時,將系數從寄存器組逐行或逐列按反掃描順序讀出給IDCT;同時繼續(xù)從Run_Level對緩沖中讀取后半部的Run-Level對解碼,對寄存器組寫覆蓋至輸出的前半部數據位置。
本發(fā)明針對視頻解碼中的行程解碼和反掃描設計,給出一種基于寄存器組的高效、低代價的實現方法;并對該寄存器組的尺寸,以及使用該方法的行程解碼、反掃描、反量化與IDCT流水工作結構以及寄存器組的讀寫地址生成和數據讀寫策略,以MPEG-2的行程解碼、反掃描實現予以說明。
圖1是視頻解碼器整體結構及主要功能框圖;圖2是MPEG2解碼的兩種掃描方式(或掃描-反掃描轉換模板);圖3是所述行程解碼電路的功能框圖構成;圖4是寄存器組的二維存儲結構及按掃描順序的32個后半部數據寫覆蓋示意圖(對掃描方式1,IDCT的輸入按行讀取);圖5是按掃描順序輸入的32個后半部系數到前半部系數的寫覆蓋地址映射表;圖6是行程解碼、反掃描、反量化與IDCT的并行流水工作示意圖。
以下結合附圖和實施例對本發(fā)明作進一步的詳細說明。
具體實施例方式
發(fā)明的基于寄存器組的行程解碼與反掃描實現方法,按以下方式進行1)使用32×12Bit的系數寄存器組。
2)行程解碼、反掃描、反量化與IDCT的并行流水工作結構。
3)給出一種該寄存器組的數據寫策略。
4)給出一種該寄存器組的數據讀策略。
5)給出一種上述策略下寄存器組低功耗讀寫方法6)當完全輸出一個基本塊的64個系數后,將寄存器組復位至初值0。
所述32×12Bit的寄存器組,也可由全定制的Register file實現;在工作中用于分時共享存放基本塊的64個系數,該寄存器組在讀寫時序上等價于同步雙端口RAM。
上述的行程解碼、反掃描、反量化與IDCT的并行流水工作結構,指僅用按掃描順序輸出的32個前半部系數中的非0系數更新寄存器組后,如果IDCT的模塊當前可以輸入,則開始從寄存器組中讀出系數數據輸出給反量化、IDCT模塊,直到讀出64個塊數據;同時繼續(xù)從Run_Level對緩沖中讀取后半部的Run-Level對解碼,對寄存器組中已讀出的前半部數據位置寫覆蓋。因此行程解碼、反掃描、反量化與IDCT呈并行流水執(zhí)行。
上述寄存器組的數據寫策略寄存器組的初始值均為0,當僅用按掃描順序輸入的32個前半部系數數據中非0的系數更新完寄存器組后,對掃描順序地址計數器Scanindex(31<Scanindex<64)對應的0或非0系數,逐個時鐘按寄存器組中32個前半部系數的反掃描輸出順序對寄存器組寫覆蓋(如圖5的寫覆蓋地址映射表所示)。
上述寄存器組的數據讀策略當Scanindex的值>31時,并且IDCT當前可輸入,可以開始依據如圖2的掃描-反掃描的轉換模板,從左到右按行(對掃描方式2,從上到下按列)逐個讀取塊內系數數據,當應讀塊系數對應的掃描順序序號<32時,可從寄存器組直接尋址輸出;當應讀塊系數對應的掃描順序序號>32時,需根據圖5的寫覆蓋地址映射表在寄存器組內間接尋址得到該數據。
上述寄存器低功耗讀寫方法記錄解碼EOB時的掃描順序位置EOBindex,根據此值可提前結束寄存器組寫操作;同時在讀時,當反掃描的輸出數據對應的掃描順序序號>EOBindex時,輸出數據直接為0。
當已從寄存器組中讀出64個系數給IDCT后,對寄存器組復位至初值0。
如圖3所示為行程解碼電路的功能框圖,主要由寫地址生成與映射、Level值(系數)寄存器組、讀地址生成與映射,及其與可變長解碼、反量化的接口組成。Scanindex初始值為31;Runindex指示解碼Run-Level對行程累加計數器,初始值為0;wrdata指示寄存器組的寫數據,值為0或非0系數。系數寄存器組的物理地址為0→31,一個基本塊Run_Level對解碼的輸出系數按掃描順序編號為0→63,對于前半部32個數據,順序為0→31的塊數據與系數寄存器組是一一直接映射,即0-0,1-1,......,31-31;對于后半部32個數據(掃描順序為32→63的塊數據),依次寫覆蓋至寄存器組,對應地址為根據圖2按反掃描順序的逐行輸出數據中按掃描順序序號為0→31之間的塊數據地址(如圖4的寫覆蓋示意圖與圖5的寫覆蓋地址映射表所示)。同理,對于根據圖2的按反掃描順序逐行讀取的系數數據中的掃描順序序號為32→63的塊數據,也需按圖5的地址映射關系得到該數據的地址以查詢寄存器組,得到正確按行輸出的反掃描數據給IDCT。具體實現如下1、寫地址、寫數據的生成策略Runindex=Runindex+run+1;ifRunindex<32,且Level非0時,wrdata=Levelwradd值即為Runindex值。
Else Runindex>=32時,
如IDCT的狀態(tài)為可以輸入數據,且Run_Level緩沖中至少有一個基本塊的Run_Level對數據時,則開始啟動Scanindex(Scanindex計數器每個時鐘累加1),按掃描順序輸出的data_32,data_33,.....,data_63按行(對掃描方式1)覆蓋Level寄存器組中的data_0,data_1,data_5,.......,data_21的位置,具體示意如圖4所示。在實現時wradd的值可由圖5的所示地址映射表查詢得到,如當Scanindex=35,則查詢圖5的得到其對應的系數寄存器組的地址應為6,則wradd=6,寫入策略如下If Scanindex<Runindex時wrdata=0Else Scanindex=Runindex時wrdata=Level且從緩存中讀取一個新的Run-Level對解碼。
2、讀地址產生當開始啟動Scanindex時,對寄存器組已可以依反掃描方式按行(對掃描方式2,按列)讀出Level值輸出給反量化、IDCT,故同時啟動Rdindex計數器(指示塊讀地址計數器,每個時鐘周期累加1,初始值為0)。Rdindex指示的數據應根據反掃描順序(如圖2所示的二維矩陣)按行輸出,而系數寄存器組的存儲是按掃描順序存儲,由Rdindex查詢圖2的掃描方式表,得到其對應的掃描順序值RdScan,如當Rdindex=7時,對應的RdScan值為28。
If RdScan<32,Rdadd=RdScanElse RdScan>31,查詢圖5的按掃描順序的32個后半部系數到前半部系數的地址映射表,得到其對應的寄存器組地址值RdScan’,則Rdadd=RdScan’,由Rdadd可以從系數寄存器組中讀出對應的Level值。
3、當完成讀取1個基本塊內的64個系數后,用1個時鐘周期將系數寄存器組的所有寄存器清零。
4、在將1個基本塊內按掃描順序序號0→31內的Level值寫入系數寄存器組時,行程解碼和IDCT是串行的(相當于流水線的預充),如圖6所示,等待的時間t1主要決定于32個前半部系數中非零系數的個數,對237幀的352×288的標準MPEG2視頻序列(Foreman)測試,此值為232572,說明流水線的效率較高。
5、當IDCT的輸入要求僅為連續(xù)一行或一列輸入時,Rdindex可暫時停止累加,Scanindex也需同時停止累加,以保證寫覆蓋不能超前于讀系數寄存器。
6、設Scan[5:0]表示1個6位的地址,對圖5的地址映射表實現時,可直接采用如下所示的組合查詢邏輯Case(Scan)32Scan’=0;33Scan’=1;34Scan’=5;35Scan’=6;;........;56Scan’=24;57Scan’=31;58RdScan’=10;59Scan’=19;60Scan’=23;61Scan’=20;62Scan’=22;63Scan’=21;該邏輯在Altera的EP1S10FC780-7器件上綜合時,占用了15個LUT邏輯資源,速度為185MHz,在實現寫和讀系數寄存器組時,使用了2個如圖5所示的查詢邏輯,實現方式如上,說明在讀寫地址映射中引入該模塊對資源和速度的影響較小。
7、圖2包含掃描與反掃描關系的掃描方式表在實現時,仍然直接采用如下所示的組合查詢邏輯(以掃描方式1為例,從上至下按行輸出)Case(RdIndex)0RdScan=0; 1RdScan=1; 2RdScan=5; 3RdScan=6;4RdScan=14; 5RdScan=15; 6RdScan=27; 7RdScan=28;;........;
60RdScan=57;61RdScan=58;62RdScan=62;63RdScan=63;8、使用上述方法實現時,在從Run-Level對緩沖中讀取到EOB時,可記錄解碼EOB前的Runindex值為EOBindex,當Scanindex=EOBindex或EOBindex<32時,可提前結束對寄存器組的寫;在讀時,當RdScan>EOBindex系數寄存器輸出值應為零。使用此方法后,可大大減少寄存器組的讀寫功耗與速度。
權利要求
1.一種基于寄存器組的行程解碼與反掃描實現方法,其特征在于在行程解碼與反離散余弦變換之間僅使用32×12Bit的寄存器組,構成行程解碼、反掃描、反量化與IDCT的并行流水工作結構;上述32×12Bit的寄存器組或由寄存器文件實現,在工作中用于分時共享存放基本塊的64個系數,讀寫時序上等價于同步雙端口RAM;上述寄存器組的寫策略為寄存器組的初始值均為0,當對按掃描順序輸入的32個前半部塊數據僅用其非零的系數更新完寄存器組后,對掃描順序地址計數器Scanindex對應的0或非0系數,逐個時鐘按寄存器組中32個前半部系數的反掃描輸出順序對寄存器組寫覆蓋;上述寄存器組的數據讀策略當Scanindex>31時,并且IDCT可接受輸入,可以開始依據反掃描的順序,從上到下逐行或從左到右逐列讀取塊內數據;當按反掃描順序的應讀塊內數據對應為掃描順序的32個后半部塊內數據時,根據寫策略覆蓋原則在寄存器組尋址得到當前的反掃描數據;上述寄存器組的低功耗讀寫方法是記錄解碼EOB時的掃描順序位置EOBindex,根據此值可提前結束寄存器組寫操作;同時在讀時,當反掃描的輸出數據對應的掃描順序序號值>EOBindex時,輸出數據直接為0;上述行程解碼、反掃描、反量化與IDCT的并行流水工作結構,是使用按掃描順序輸入的32個前半部數據中的非零系數更新寄存器組后,且當IDCT標記為可接受輸入時,將系數從寄存器組逐行或逐列按反掃描順序讀出給IDCT;同時繼續(xù)從Run_Level對緩沖中讀取后半部的Run-Level對解碼,對寄存器組寫覆蓋已輸出的前半部數據位置。
2.如權利要求1所述的方法,其特征在于,所述的寄存器組,當已輸出全部64個系數給IDCT后,對寄存器組復位至初值0。
全文摘要
一種基于寄存器組的行程解碼與反掃描的實現方法在行程解碼與IDCT之間僅使用寄存器組實現行程解碼與反掃描,并可于反量化、IDCT流水工作。對于行程解碼的按掃描順序輸入的32個前半部基本塊系數,僅用其中非零系數更新寄存器組;對按掃描順序輸入的32個后半部基本塊系數,逐個時鐘覆蓋寄存器組中已按反掃描順序逐行或逐列輸出的系數位置;對依據反掃描順序的輸出系數,當應讀的系數對應為掃描順序的32個后半部塊數據時,根據寫覆蓋原則在寄存器組內尋址以得到當前的反掃描數據;同時根據記錄解碼EOB時的掃描順序位置值,可提前結束寄存器組寫操作且可在寄存器讀時將部分輸出值直接選0以減少寄存器組的讀寫功耗;當已輸出64個塊系數給IDCT后,對寄存器組復位至初值0。
文檔編號H04N7/26GK1852441SQ20061004275
公開日2006年10月25日 申請日期2006年4月30日 優(yōu)先權日2006年4月30日
發(fā)明者曾強, 梅魁志, 鄭南寧, 高劍, 王西京 申請人:西安交通大學