一種並行類熵編碼方法及其裝置的製作方法
2023-05-23 18:59:16 3
專利名稱::一種並行類熵編碼方法及其裝置的製作方法
技術領域:
:本發明涉及一種類熵編碼方法及其裝置,尤其涉及一種並行類熵編碼方法及其裝置,屬於視頻編解碼領域。
背景技術:
:在傳統的圖像、視頻壓縮裡,熵編碼器作為不可或缺的一個組成部分處於編碼最後一個環節,用於把已經處理過的圖像數據用最短的Ol比特串表示。AVS標準是擁有獨立產權和自主創新技術的新型視頻編碼技術,目前視頻部分(AVS-P2)已經正式成為國家標準。AVS視頻編碼面向高清廣播電視和音響視頻,在實時編碼中,單位時間裡要處理大量的數據信息,純軟體的編碼實現幾乎不可能,因此,編碼器的硬體加速必不可少。本發明是AVS編碼器硬體加速實現中的一個環節,在編碼器中,熵編碼部分的複雜度大約佔整個編碼複雜度的30%,這個過程主要是對每個係數串行的之字形(zig-zag)掃描來求得編碼每個係數的(run,level),根據係數的(run,level)再查相應的Golomb碼錶得到相應表示的比特數。AVS熵編碼採用自適應變長編碼技術。在AVS熵編碼過程中,所有的語法元素和殘差數據都是以指數哥倫布碼的形式映射成二進位比特流。對預測殘差的塊變換係數,經掃描形成(run、level)對串,level、run不是獨立事件,而存在著很強的相關性,在AVS中level、run採用二維聯合編碼,並根據當前level、run的不同概率分布趨勢,自適應改變指數哥倫布碼的階數。通過觀察殘差係數的(run,level)對,發現level幅值具有遞增的趨勢,而run的值有遞減的趨勢,並且一個有較大level值的(run,level)數對其run值通常較小,這也就是說在序列編碼的不同階段(run,level)的局部概率分布是不一樣的。基於這些統計規律,採用多個2D-VLC碼錶匹配(run,level)的局部概率分布,並且,level幅值的遞增可以識別局部概率分布的變化,即利用level幅值進行碼錶的自動切換。在AVS-P2標準裡,熵編碼總共用到19張2D-VLC表,每個碼錶都採用指數哥倫布(Exp-Golomb)碼,不同類型的變換塊(包括幀內,幀間和色度塊)分別使用不同的碼錶,7個幀內(intra)碼錶、7個幀間(inter)碼錶和5個色度(chroma)碼錶分別用於編碼幀內、幀間和色度塊的變換係數。這些碼錶都為2D-VLC碼錶,每個碼錶定義了(level,歷)及EOB(endofblock)與code誦ber之間的映射關係,code醒ber範圍為059,59表示escape—code(溢出碼),圖1給出了現有方法中熵編碼器的流程圖。
發明內容本發明針對AVS熵編碼器,提供了一種高效的硬體加速實現。本發明的目的在於提供一種並行類熵編碼方法及其基於硬體加速的AVS類熵編碼裝置,以提高編碼器的速度,從而達到實現高清編碼的實時。本發明的技術方案為一種並行類熵編碼方法,其步驟為-1)將每個變換塊的量化係數分組並行輸入輸出於兩寄存器組;2)同一時鐘內計算每組量化係數的編碼係數(run,level);3)將編碼係數(run,level)進行倒序輸出;4)根據輸出的已編碼係數中的level最大值選擇當前量化係數的碼錶;5)根據該變換塊中所有編碼係數的level最大值選擇該變換塊EOB的碼錶;6)將上述選擇的碼錶轉換為位寬表,並計算該變換塊編碼比特數。所述變換塊為8x8塊,所述8x8塊的量化係數以行為單位分為8組數據。所述量化係數分組並行輸入輸出於兩寄存器組的方法為a)在一個時鐘內將一組量化係數存入一寄存器組;b)將該變換塊按組全部輸入到該寄存器組後,在下一時鐘從該寄存器組按照zig-zag的順序按組輸出量化係數,同時從該時鐘開始將後續分組量化係數輸入另一寄存器組;c)重複上述步驟a)和b),實現兩寄存器組的桌球操作。所述方法中採用遊程編碼的方法計算所述每組量化係數的編碼係數(run,level),同時在該變換塊的第一個非零量化係數上標識EOB符號。所述編碼係數的level值為量化係數的絕對值;所述編碼係數的run值計算方法為設定一變量baseO用於給run值賦值、一變量basel用於記錄每組量化係數末尾相鄰0的個數,和一計數器counter用於記錄該變換塊的行數;counter=0,base0=0;counter!=0時,如果baseh8,下一組量化係數的baseO=baseO+basel,如果basel!=8,下一組量化係數的baseO二basel。一種並行類熵編碼裝置,其包括依次連接的數據輸入轉存模塊、遊程編碼模塊、倒序矩陣模塊、碼錶選擇模塊、查表模塊、哥倫布編碼模塊、加和變換塊的比特數模塊;所述數據輸入轉存模塊用於處理每組並行輸入的量化係數,其包括兩存儲矩陣用來實現數據輸入輸出的桌球操作;所述遊程編碼模塊用於在同一時鐘內計算寄存器組中輸入的每組量化係數的編碼係數(run,level),所述倒序矩陣模塊用於完成變換塊的編碼係數(run,level)倒序輸出;所述碼錶選擇模塊用於根據當前倒序輸出的編碼係數(run,level)確定當前量化係數的碼錶和該變換塊EOB的碼錶;所述査表模塊用於將得到的碼錶映射為對應的碼字;所述哥倫布編碼模塊用於將碼字轉換為位寬,得到碼錶對應的位寬表;所述加和變換塊的比特數模塊用於根據位寬表計算當前變換塊所有量化係數的編碼比特數。所述遊程編碼模塊包括一符號位比較器、一計數器和若干輸入數據比較器用於將每組輸入數據與零在同一時鐘內進行比較,所述輸入數據比較器分別與EOB比較器和該組末尾相鄰零個數比較器相連;所述EOB比較器與一選擇器連接,所述該組末尾相鄰零個數比較器經一選擇器與run值比較器連接;所述計數器分別與所述的兩個選擇器連接。所述碼錶選擇模塊的電路連接關係為用於比較變換塊輸入數據的若干輸入數據大小比較器分別與一確定係數前最大值比較電路、一選擇器;所述選擇器的輸出端分別與一EOB多路選擇器和所述確定係數前最大值比較電路連接;所述確定係數前最大值比較電路與若干並行的單級多路選擇器連接;所述選擇器和所述EOB多路選擇器分別與同一計數器的輸出端連接;與所述選擇器連接的若干輸入數據大小比較器輸出端與所述EOB多路選擇器連接,且所述EOB多路選擇器的輸出端與一碼錶選定比較器連接。所述査表模塊的電路連接關係為碼錶類型選通開關分別與碼錶選通開關連接,所述碼錶選通開關分別經一比較器與另一碼錶類型選通開關連接後再與一多路選擇器連接;所述碼錶選通開關和所述多路選擇器分別與一碼錶號輸入線連接;所述比較器和所述多路選擇器分別與輸入數據連接;所述多路選擇器對碼錶inter—VLCO、inter_VLCl、inter_VLC2、inter—VLC3、intra—VLCO、intra—VLCl、intra—VLC2、intra—VLC3、chroma—VLCO、chroma_VLCl、chroma_VLC2的選擇信號參考每張碼錶所對應的所述level值,對碼錶inter一VLC4、inter_VLC5、inter—VLC6、intra_VLC4、intra—VLC5、intra—VLC6、chroma_VLC3、chroma_VLC4的選擇信號參考每張碼錶所對應的所述run值。所述哥倫布編碼模塊的電路連接關係為輸入碼錶號和碼錶類型的級聯比較器經移位器l與一加法器連接,且該加法器輸入端與level絕對值的輸出端連接,其輸出端與按位比較器l連接;所述級聯比較器經另一移位器2與一加法器連接,且該加法器輸入端經一選擇器l與level符號位的輸出端連接、經一移位器3與run值輸出端連接,同時其輸出端與按位比較器2連接;所述按位比較器1和所述按位比較器2經一加法器與一移位器4連接,所述移位器4和所述級聯比較器的兩輸出端經一減法器與一選擇器2的輸入端連接;與所述移位器2連接的級聯比較器輸出端同時與一減法器連接,且該減法器的輸入端經一移位器5與碼字的輸出端連接,同時該減法器的輸出端與所述選擇器2的輸入端連接;所述選擇器2輸入端與所述碼字輸出端連接。本發明所述並行AVS類熵編碼方法,包括1)量化數據的8並行輸入輸出為了進一步提高硬體設計的速度,對於量化後的8x8塊的係數分8個時鐘載入寄存器,每個時鐘載入8個係數,這8個按照自然順序輸入的係數按照Zig-Zag掃描的順序寄存在當前寄存器組的相應位置;2)兩組寄存器組的桌球操作一個8x8塊的數據在8個時鐘載入一個寄存器組,這樣從第9個時鐘開始後續的操作陸續完成,並且每次輸出8個係數的處理結果,為了確保流水線的順利進行,在第9個時鐘,另一個8x8塊的數據開始載入另一個結構完全相同的寄存器組,這樣,從第9個時鐘開始,每次輸出前一個8x8塊的係數和載入當前8x8塊的係數同時執行,這樣,數據的輸入輸出連續不斷,並且以桌球操作選擇在兩個寄存器組之間轉換;3)遊程編碼的Zig-Zag掃描以及(run,level)的獲取,輸入8x8塊係數已經按照Zig-Zag掃描的順序依次存儲在一個寄存器組裡,遊程編碼直接按順序計算每個係數的(run,level),但是,這裡數據的輸入輸出是8並行的,即每次處理8個係數,而run的確定不僅僅涉及當前8個係數,而且與前8個係數中的最後一個非零係數有關,處理完當前8個係數的(run,level)信息,需要記錄當前8個係數中最後一個非零係數的run(即後面零的個數),作為後面相鄰8個係數計算nm值的基礎;4)根據已經編碼係數的最大值進行碼錶選擇熵編碼器軟體實現的碼錶切換都是以前一個編碼係數的level值作為依據,即當前碼錶的選擇必須要等到其前.一個係數的碼錶確定後才能執行,而本發明所述類熵編碼器的硬體設計方法是以8係數並行處理為基礎的,如果按照軟體實現的方法,那麼需要8個時鐘才能處理完一組8並行係數。因此,基於軟體方法的功能,本發明修改了碼錶切換的規則,即以當前係數前已編碼係數的最大值作為碼錶切換的依據,這樣一個時鐘8個比較器就可以實現8個係數的碼錶。而本發明所述類熵編碼器硬體功能完全與軟體實現一致。5)根據所有8x8塊係數的最大值確定編碼E0B選擇的碼錶對於每個8x8塊,第一個非零係數前要加EOB,E0B與碼錶一一對應。在AVS熵編碼器中,係數的編碼從後往前倒序依次編碼,每個係數選擇的碼錶都由其後面相鄰的非零係數決定,EOB碼錶的確定跟係數相同,它選擇的碼錶由第一個非零係數決定。但實質上,根據方法4),EOB碼錶的選擇由8x8塊所有係數的最大值確定。6)建立8x8塊係數的最大值與編碼EOB的比特數之間的直接關係根據碼錶與EOB之間一一映射的關係,本發明所述類熵編碼器硬體設計方法建立8x8塊係數最大值與EOB比特數之間的直接關係,而不需通過相應的碼錶來確定E0B。7)碼錶與位寬表之間的轉換通過邏輯判斷實現熵編碼器的位寬計算,由於每個係數編碼選擇的碼錶,並不需要得到其精確的碼字,而是只要得到其位寬即可,故本發明在每張碼錶跟位寬表之間作一轉換,直接把碼錶中的codenumber映射為編碼該codenumber的比特數。8)碼錶中特殊情況的處理依照AVS標準,在原始附錄碼錶中查到的codenumber值還要做後續處理,即如果原始level為負數,codenumber=codenumber+l,這樣碼錶中查到的codenumber所需要的比特數對於正、負數就有所不同,但大部分所對應的位寬相同,除了個別幾個。這樣通過逐個分析每張碼錶就可以對這些特殊的情況加以處理,從而得到每張碼錶的位寬表。本發明所述AVS類熵編碼器硬體裝置,包括數據輸入轉儲模塊、遊程編碼模塊、倒序矩陣模塊、碼錶選擇模塊、査表模塊和Golomb編碼模塊、加和變換塊的比特數模塊。1)數據輸入轉儲模塊用於處理並行輸入的係數,按照Zig-Zag的掃描順序存儲輸入的係數,使得轉儲以後的係數按逐行掃描的順序排列。2)本發明所述數據輸入轉儲模塊在硬體設計上使用了2個相同結構的寄存器組,來達到桌球操作的效果,如此達到對8x8塊的流水操作。3)本發明所述遊程編碼模塊處理l)中並行輸入的數據,得到每個係數的(run,level),由於輸入8x8塊係數的(run,level)之間的關聯性,當前輸入的係數需要用到前面已經處理係數run的信息,在硬體設計上需要增加一個記錄上一個8並行輸入係數的run,作為當前8並行輸入數據計算run的基準。4)本發明所述碼錶選擇模塊根據硬體設計的需要,修改了標準所述根據上一個編碼係數的level值選擇當前編碼係數的碼錶,而是根據當前8x8塊中當前編碼係數前的係數的最大值來確定當前係數的碼錶,這樣,實質上每個係數碼錶的選擇彼此之間沒有依賴性,從而一個時鐘就可以處理完8個並行輸入的係數。5)本發明碼錶選擇模塊4)同樣對於EOB碼錶的選擇也不必等到第一個非零處理完才能確定,實質上只需要計算所有係數的最大值就可以確定E0B的碼錶了。6)本發明的倒敘模塊功能是根據AVS標準規定,完成變換塊的編碼係數倒序.基本方法就是利用一個8狀態的計數器counter,來控制數據的輸入和倒序輸出(如圖12所示)。7)本發明所述查表模塊根據"碼錶選擇"模塊所確定的碼錶,得到當前係數的碼字,只是在預編碼階段,並不需要實際得到每個係數的真正碼字,而是只需要碼字的位寬,根據Golomb碼字的特點很容易得到每張碼錶所對應的位寬表,但需要處理一些特殊點的處理(如在一些設定的位置,由於數據的正負會影響碼字的位寬,我們需要用符號位做標示)。8)根據6)所述,碼錶轉化為位寬表中的特殊點為正負數不同的處理方法引起。9)本發明所述AVS類熵編碼器硬體裝置使用於預編碼時,碼錶簡化為位寬表,而硬體設計上可以完全採用邏輯判斷實現査位寬表的功能。10)本發明所述Golomb編碼模塊,主要是將7)所得的位寬按照Golomb的不同階數進行編碼,同時對於escape事件也計算所需要編碼的比特數。11)本發明的數據加和變換塊的比特數模塊的主要功能就是將變換塊的所有係數的編碼比特數和E0B的編碼比特數都加起來。本發明的積極效果傳統的熵編碼,需要完成整個熵編碼的各個部件,而且只能串行執行,效率低下,這樣在高清視頻處理中很難做到實時編碼.採用本發明的並行類熵編碼裝置進行熵編碼時,處理速度是傳統方法的8倍,大大改善了整個編碼器的性能.同時本發明在具體硬體實現上,優化了最佔資源的VLC表格,面積大量減小;並用邏輯判斷加以實現,節省了大量硬體資源。圖l.AVS-P2二維變長編碼流程圖2.本發明的原理圖3.本發明的類熵編碼器裝置框圖;圖4.寄存器存儲分配;(a)正常之字形掃描順序,(b)輸出時對應寄存器存儲地址圖5.遊程編碼算法流程圖;圖6.遊程編碼模塊的硬體流水線結構圖;圖7.碼錶選擇的算法流程圖;圖8.碼錶選擇模塊的硬體流水線結構圖;圖9.碼錶R0M存儲;圖IO.查表模塊的硬體流水線結構圖ll.Golomb編碼模塊的硬體流水線結構圖;圖12.倒序原理圖。具體實施例方式下面結合附圖和具體實施方式對本發明作進一步詳細的說明。為了實現硬體並行處理的優勢,並最大限度地節約硬體設計的成本和解決硬體設計上預算法設計上的衝突,本發明提出了若干算法的等價方案,這些方案包括並行zig-zag掃描,遊程編碼中係數的並行處理,消除碼錶選擇係數間的依賴性,EOB碼錶選擇的依據,預編碼模塊查表運算的簡化和硬體設計上查表運算的邏輯實現。本發明的原理如圖2所示。本發明基於硬體實現的類熵編碼方法和裝置,包括用於圖像殘差數據並行輸入的倆寄存器組的桌球操作,對圖像殘差係數進行之字形掃描的遊程編碼模塊,對於每個編碼係數選擇編碼所用的碼錶的碼錶選擇模塊,對於選定碼錶後的編碼係數(run,level)映射為碼字的査表模塊,和把查表得到的codenum(碼字)映射為位寬(比特數)的Golomb編碼模塊。首先熵編碼前的模塊(包括運動估計補償,變換量化)產生編碼的殘差係數以並行輸入並按照預定的次序寄存在兩個寄存器中的一個寄存器內,這個預定的次序就是按照將要進行的之字形掃描的順序把各個係數安放在對應的位置,這樣後面的遊程編碼就可以按照自然順序依次每行從寄存器中取數並遊程編碼,遊程編碼的結果產生每個係數的(level,run),接著,對這些(level,run)根據level的值選擇碼錶,這裡AVS2D-VLC有19張用於係數編碼的碼錶,每個係數的碼錶由其level和已經編碼的係數的level決定,然後,從每個碼錶中取得的碼字再按照Golomb碼字的結構和階數得到將要寫入碼流的位寬。這個過程涉及到的各個模塊將在下面詳細敘述。如圖3為本發明類熵編碼器的流水框圖,它包含以下子模塊1.數據的存儲分配變換量化後的數據位寬為12位,每個8x8塊的數據每次以一行進入寄存器,按照zigzag掃描的結構存儲在如圖4的寄存器組裡。為了保證8並行流水線的順利進行,該模塊採用了兩個8x8的寄存器組,每8個時鐘轉換一次。下面說明存儲矩陣內部的轉換結構。由於數據是8並行輸入,所以為了避免在進行遊程編碼上順序的衝突,我們在存儲時就將數據按照zig-zag的順序存入寄存器組,這種重新編排數據方式很好地解決了數據的並行處理。如圖4所示,zig-zag順序為0,1,8,16,9,2,3,10,17,24,分別對應寄存器矩陣位置為O,1,2,3,4,5,6,7,8,9。以其中的一個矩陣為例,來說明數據流的時鐘安排第一個時鐘,將input的8個數據存到地址0,1,8,16,9,2,3,10;第二個時鐘,將input的數據存到17,24,32,25,18,11,4,5......;第8個時鐘,將input的數據存到53,60,61,54,47,55,62,63;到第9個時鐘,輸入的數據已經轉到另外一個矩陣上了,並且當前矩陣開始輸出數據,0,1,8,16,9,2,3,10;第IO個時鐘,輸出17,24,32,25,18,11,4,5;第16個時鐘,輸出53,60,61,54,47,55,62,63。2.遊程編碼遊程編碼算法結構如圖5所示,這個模塊的主要功能就是將寄存器組裡的數進行遊程編碼,掃描矩陣的每個數,對每個非零的係數,分別產生一個(run,level)對,同時在第一個非零的係數上標示EOB符號,所以對於每一個不全為零的block(cbp不為零)中都有一個E0B符號。level為輸入係數的絕對值,可以直接對輸入的係數求絕對值得到。關鍵是求nm,由於數據是並行輸入的,所以要構造一個run的基準變量,設為base0,假設數據是8並行輸入的,記為(a0,al,a2,a3,a4,a5,a6,a7},base0用來表示a0前相鄰0的個數,這樣如果aO不等於0,a0的run等於base0;知道了a0的run,同一行裡的a0,al,a2,a3,a4,a5,a6和a7的run就可以求得,如此,數據的並行處理就可以實現,一個時鐘內就可以處理完一行的數據。base0的計算按照如下方式進行以8並行輸入為例,首先要有一個計數器counter從0到7,用來表示這段時鐘內輸入的是同一個block的數據。很明顯,在counter=0時,base0=0(在輸入第一組8個數據時counte產O,也對應第一個時鐘,counter等於幾就對應第幾個時鐘);其他時候base0則是一個變化的量,為此,可以定義另外一個變量basel,basel表示輸入的該行8個數據中,最末尾的相鄰的零的個數。對於輸入的8個數,例如對於0,12,3,0,0,4.,0,0;basel=2。對於l,0,3,0,0,0,3,7;basel=0。對於0,0,0,0,0,0,0,0;basel=8。綜上所述base0可以這樣確定,counter=0,base0=0;counter!=0時(即counter不等於0時,!=表示不等於),如果basel-8,下一行的base0=base0+basel,如果basel!=8,下一行的base0=basel如圖6所示,整個模塊的硬體結構大致可以分為4級流水線,以8並行輸入為例說明4級流水過程第一級,主要若干並行的比較器和一個計數器控制。使用8個比較器分別產生每個輸入的係數是否為零的標示符,記為sign—zero,比如所產生的8個標識符分別為0、1、0、1、0、0、1、1,則記為sign—zero(sign_zero=01010011);計數為輸入有效數據的拍數,每8拍為同一個block8x8的數據。第二級,主要包括兩個並行的找1邏輯。通過從sign—zero[7]到sign—zero[O]找1邏輯可以得到每一行中第一個非零的係數,並標示為l,其他為零。這樣每一行的E0B[7:0]就得到了。很明顯每行的EOB[7:0]中最多只有1個1,或者都是零。從sign—zero到sign—zero[7]找1邏輯可以得到該行最後一個非零係數後零的個數,記為basel。第三級,主要包括兩個選擇器。利用counter選擇器對E0B加以控制,在同一個塊內,一旦出現了第一個非零係數後,就將以後的係數都標示為O,保證每個變換快最多只出現1個E0B等於1的情況;另外一個選擇器是用來構造每行第一個係數的run值,記為base0[5:0];在counter=0時,base0=0,其他時候如果basel!=8,base0〈=basel,如果basel=8,base0=8+baseO。第四級,主要包括8個比較器,用來得到每個係數的(run,level),這裡要說明的是傳統的zig-zag,只編碼非零的係數,由於我們這裡採用的是8並行的結構,所以在輸入的係數等於零時,記(run=0,level=0),也參與編碼,只不過編碼需要的比特數等於0。在第3級已經知道了每行第一個係數前的run值base0,結合sign一zero[7:0],通過比較器很容易得到該行每個係數的(nm,level)。3.碼錶選擇根據AVS標準,初始變量maxAbsLevel(表示絕對值最大的level)為0,並且第一個非零係數選擇碼錶VLC0。然後比較每個係數絕對值(abslevel)與maxAbsLevel的大小,如果abslevel大於maxAbsLevel,則發生碼錶切換,否則碼錶不變,切換碼錶後將abslevel的值賦給maxAbsLevel,這樣循環往復地將每個係數解碼完成。就編碼器而言,編碼的下一個係數的碼錶,取決於上一個係數選擇的碼錶,以及上一個碼錶的maxAbsLevel。由於我們現在採用的是並行的結構,顯然這樣的算法很難用硬體實現。我們通過分析得到這樣一個重要結論當前係數選擇的碼錶,僅由己編碼係數的最大值確定,所以只要我們能求得該係數前的最大值,即可得到該係數的碼錶。根據以上結論碼錶選擇的算法流程如圖7所示。算法步驟如下(以8並行輸入為例)第一步依次比較8個係數level值(level[(T7])得到8個最大值(記為max和maxlevell},此8個最大值分別定義為max(^maxUevel(H,maxl=max{levelO,levell},max2=max{levelO,levell,level2},......,max6=max{level06},maxlevell=max{level07},這裡maxlevell表示輸入的該行中最大的數值;第二步確定8x8塊中已經輸入數據的最大值,記為maxleve10。很顯然,counter=0時,maxlevelO=0;在counter!=0時,比較maxlevelO與maxlevell,取較大者為maxlevelO;第三步確定選擇碼錶的參數值,記為tab—value07。根據我們的結論當前係數選擇的碼錶,僅由己編碼係數的最大值確定。很顯然,對輸入的8個係數level07,level0的碼錶由tab—valueO=maxlevelO的大小確定;levell的碼錶由tab—valuel=max{maxlevelO,raaxO)確定,......,level7的碼錶由tab—value7=max{maxlevelO,max6}確定;第四步依據AVS標準選擇相應的碼錶。另外,EOB碼錶的選擇按照標準是由最後一個編碼非零係數的level決定,但實質上按照以上的分析,EOB碼錶的選擇由8x8塊中最大的數來確定。整個模塊的硬體流水線結構如圖8所示,分為4級完成第一級,主要包括56個比較器和計數器counter[2:0]。為了保證在一個時鐘內,求得max07[ll:0]。每個輸入的數據分別與其他7個數據比較,共需要56個比較器。Counter[2:0]用來表示輸入數據的拍數,每8拍為一個8x8塊。第二級,包括一個依據counter[2:0]的選擇器。在輸入的是第一行數據時,maxlevelO[ll:0]等於0,其他時候則等於maxlevelO與maxlevell的較大者。第三級,確定每個係數前的最大值比較電路包括7個並行的比較器。Max06[ll:0]分別與maxlevelO[ll:0]比較,得到每個係數的査表參數tab—valuel7;而第一個係數的査表參數則僅由maxlevelO[ll:0]確定,即:Tab_valueO[ll:0]=maxleve10[11:0]。第四級,包括8個並行的單級多路選擇器,E0B多路選擇器和E0B碼錶選取比較器。4.查表該模塊的主要作用是査詢碼錶來確定碼字(codenumber)值。在硬體實現的時候最常見的方法是將碼錶存在ROM中,然後根據地址進行査詢,碼錶ROM存儲如圖9所示。在第3部分得到了每個(run,level)需要査詢的碼錶;接著,基於碼錶選擇的多路選擇器尋址ROM到相應的碼錶;然後,根據level選擇對應表中的codenumber值。2D—VLC熵編碼與preceding預編碼最大的區別就是前者需要將codenumber生成碼流,而後者只需要codenumber碼流的比特數。根據碼錶中codenumber和Golomb碼字的位寬,可以得到每個碼錶對應的位寬表,以intra—VLC4為例說明碼錶和位寬表的映射關係。表1.tableseeoriginaldocumentpage15對於escape事件,我們可以讓信息位的比特數等於7來做標示。表2中兩個特殊情況(run=l,level=2)和(run=0,level=6)會出現兩個變動的值,這是因為依照標準,在原始附錄碼錶中査到的codenumber值還要做如下處理如果原始level為負數,codenumber=codenumber+l。上邊兩組特殊的數據對應的codenumber分別為11,27,如果level為正數,編碼信息位分別為3,4,如果level為負數,編碼信息位則分別為4,5。按照上面的方法,轉換其他碼錶。通過觀察發現,對於碼錶中的信息位比特數,只有16和7,這樣便可以用簡單邏輯設計代替rom來實現precoding。圖10是以intra_VLC4為例說明了怎樣得到(run,level)的信息位比特數,輸入的是某個係數的(run,level)、表類型和對應的碼錶,通過一系列的邏輯判斷最終得到這個係數的信息位比特數。在以上分析基礎上,查表硬體結構如圖10所示可以分為3級流水線第一級,由碼錶類型的選通開關和碼錶選通開關級聯構成,用它來定位到唯一的特定碼錶。也就是說在任意時刻,只有一張碼錶是選通的第二級,由若干並行的比較器構成,根據每個係數的(run,level)確定碼字。在硬體設計上,查表使用比較器實現,值得說明的是,在這裡的比較對象會根據碼錶不同而有所變化。例如inter_VLC0可使用run為比較對象,inter—VLC6可使用level為比較對象,總之目的為了儘量減小比較器的數量。第三級,主要由一個選通開關和多路選擇器構成。選通開關於前面的選通邏輯相同,用來選擇3條通路中的其中一條;多路選擇器的選擇信號與第二級的比較信號要交替,即inter—VLCO,inter_VLCl,inter_VLC2,inter—VLC3,intra—VLCO,intra_VLCl,intra—VLC2,intra一VLC3,chroma—VLCO,chroma—VLC1,chroma一VLC2這11張表選擇器的選擇信號sel信號參考level值;其他表的選擇信號sel信號參考run值。通過以上三步便可以得到每對(run,level)的信息位的比特數,當比特數等於7時,即為溢出(escape)事件。5.哥倫布編碼該模塊的主要功能是得到每對(run,level)的比特數。Golomb碼的信息位有如下規律M=y/oorlog2(coc/ew訓+2*),其中,k表示Golomb碼的編碼階數,codenumber表示要編碼的數值,M表示編碼得到的信息位位寬。從而每個係數的編碼codenumber所需要的比特數為M—欲e鎖=2M+1—A:對於escape事件,run的編碼仍然使用當前碼錶所對應的Golomb階數編碼,而level則按照標準所規定的哥倫布碼的階數編碼。整個模塊的硬體實現如圖11分如下幾步完成第一步包括一個級聯比較器,3個移位器和一個選擇器。根據AVS標準,級聯比較器由輸入信號table—type[1:0]和table_num[2:0],得到編碼run和escape事件的Golomb階數。其中的兩個移位器是對run和level的Golomb階數移位。另外一個移位器則是對run[5:0]移位。選擇器則是用來選者esc鄰e事件中編碼run時所加的常數,sign為正時加60,否則加59。第二步包括兩個加法器。完成C_level=level+K<esc—rank,和C—run=2*run+59/60+lrank0第三步包括兩個並行的比較器。用來求得編碼level和run的信息位位寬,由於硬體實現不能直接取對數,所以可以由一個從高位到低位的找一邏輯來完成該功能。第四步包括一個加法器。即M—level[3:0]+M_run[3:0]。第五步包括兩個移位器和兩個加法器(減法)。分別求得escape事件和非escape事件的編碼比特數。第六步包括一個選擇器。當value[2:0]等於7時,表示為escape事件則輸出bits—esc[5:0];否則輸出bits[3:0]。權利要求1.一種並行類熵編碼方法,其步驟為1)將每個變換塊的量化係數分組並行輸入輸出於兩寄存器組;2)同一時鐘內計算每組量化係數的編碼係數(run,level);3)將編碼係數(run,level)進行倒序輸出;4)根據輸出的已編碼係數中的level最大值選擇當前量化係數的碼錶;5)根據該變換塊中所有編碼係數的level最大值選擇該變換塊EOB的碼錶;6)將上述選擇的碼錶轉換為位寬表,並計算該變換塊編碼比特數。2.如權利要求1所述的方法,其特徵在於所述變換塊為8x8塊,所述8x8塊的量化係數以行為單位分為8組數據。3.如權利要求2所述的方法,其特徵在於所述量化係數分組並行輸入輸出於兩寄存器組的方法為-a)在一個時鐘內將一組量化係數存入一寄存器組;b)將該變換塊按組全部輸入到該寄存器組後,在下一時鐘從該寄存器組按照zig-zag的順序按組輸出量化係數,同時從該時鐘開始將後續分組量化係數輸入另一寄存器組;c)重複上述步驟a)和b),實現兩寄存器組的桌球操作。4.如權利要求1所述的方法,其特徵在於採用遊程編碼的方法計算所述每組量化係數的編碼係數(run,level),同時在該變換塊的第一個非零量化係數上標識EOB符號。5.如權利要求1或4所述的方法,其特徵在於所述編碼係數的level值為量化係數的絕對值;所述編碼係數的run值計算方法為設定一變量base0用於給run值賦值、一變量basel用於記錄每組量化係數末尾相鄰0的個數,和一計數器counter用於記錄該變換塊的行數;counter=0,baseO=0;counter!=0時,如果basel-8,下一組量化係數的&&360=&&360+basel,如果basel!=8,下一組量化係數的baseO=basel。6.—種並行類熵編碼裝置,其包括依次連接的數據輸入轉存模塊、遊程編碼模塊、倒序矩陣模塊、碼錶選擇模塊、查表模塊、哥倫布編碼模塊、加和變換塊的比特數模塊;所述數據輸入轉存模塊用於處理每組並行輸入的量化係數,其包括兩存儲矩陣用來實現數據輸入輸出的桌球操作;所述遊程編碼模塊用於在同一時鐘內計算寄存器組中輸入的每組量化係數的編碼係數(腦,level),所述倒序矩陣模塊用於完成變換塊的編碼係數(run,level)倒序輸出;所述碼錶選擇模塊用於根據當前倒序輸出的編碼係數(run,level)確定當前量化係數的碼錶和該變換塊EOB的碼錶;所述査表模塊用於將得到的碼錶映射為對應的碼字;所述哥倫布編碼模塊用於將碼字轉換為位寬,得到碼錶對應的位寬表;所述加和變換塊的比特數模塊用於根據位寬表計算當前變換塊所有量化係數的編碼比特數。7.如權利要求6所述的裝置,其特徵在於所述遊程編碼模塊包括一符號位比較器、一計數器和若干輸入數據比較器用於將每組輸入數據與零在同一時鐘內進行比較,所述輸入數據比較器分別與EOB比較器和該組末尾相鄰零個數比較器相連;所述EOB比較器與一選擇器連接,所述該組末尾相鄰零個數比較器經一選擇器與run值比較器連接;所述計數器分別與所述的兩個選擇器連接。8.如權利要求6所述的裝置,其特徵在於所述碼錶選擇模塊的電路連接關係為用於比較變換塊輸入數據的若干輸入數據大小比較器分別與一確定係數前最大值比較電路、一選擇器;所述選擇器的輸出端分別與一EOB多路選擇器和所述確定係數前最大值比較電路連接;所述確定係數前最大值比較電路與若干並行的單級多路選擇器連接;所述選擇器和所述EOB多路選擇器分別與同一計數器的輸出端連接;與所述選擇器連接的若干輸入數據大小比較器輸出端與所述EOB多路選擇器連接,且所述EOB多路選擇器的輸出端與一碼錶選定比較器連接。9.如權利要求6所述的裝置,其特徵在於所述査表模塊的電路連接關係為碼錶類型選通開關分別與碼錶選通開關連接,所述碼錶選通開關分別經一比較器與另一碼錶類型選通開關連接後再與一多路選擇器連接;所述碼錶選通開關和所述多路選擇器分別與一碼錶號輸入線連接;所述比較器和所述多路選擇器分別與輸入數據連接;所述多路選擇器對碼錶inter—VLCO、inter—VLC1、inter_VLC2、inter—VLC3、intra—VLCO、intra一V!Xl、intra—VIX2、intra—V1X3、chroma_VLC0、chroma一VLCl、chroma_VIX2的選擇信號參考每張碼錶所對應的所述level值,對碼錶inter一VLC4、inter_VLC5、inter_VLC6、intra—V1X4、intra—V!X5、intra—VLC6、chroma一V!X3、chroma_V!X4的選擇信號參考每張碼錶所對應的所述rim值。10.如權利要求6所述的裝置,其特徵在於所述哥倫布編碼模塊的電路連接關係為輸入碼錶號和碼錶類型的級聯比較器經移位器1與一加法器連接,且該加法器輸入端與level絕對值的輸出端連接,其輸出端與按位比較器1連接;所述級聯比較器經另一移位器2與一加法器連接,且該加法器輸入端經一選擇器l與level符號位的輸出端連接、經一移位器3與run值輸出端連接,同時其輸出端與按位比較器2連接;所述按位比較器1和所述按位比較器2經一加法器與一移位器4連接,所述移位器4和所述級聯比較器的兩輸出端經一減法器與一選擇器2的輸入端連接;與所述移位器2連接的級聯比較器輸出端同時與一減法器連接,且該減法器的輸入端經一移位器5與碼字的輸出端連接,同時該減法器的輸出端與所述選擇器2的輸入端連接;所述選擇器2輸入端與所述碼字輸出端連接。全文摘要本發明公開了一種並行類熵編碼方法及其裝置,屬於視頻編解碼領域。本發明的方法為首先將每個變換塊的量化係數分組並行輸入輸出於兩寄存器組;然後掃描每組量化係數的編碼係數(run,level);根據已編碼係數中的level最大值選擇當前量化係數的碼錶,以及根據所有編碼係數的level最大值選擇該變換塊EOB的碼錶;最後將所選的碼錶轉換為位寬表,計算該變換塊編碼比特數。本發明的裝置包括數據輸入轉存模塊、遊程編碼模塊、倒序矩陣模塊、碼錶選擇模塊、查表模塊、哥倫布編碼模塊、加和變換塊的比特數模塊。本發明大大提高了數據處理速度,優化了表格,同時節省了硬體資源。文檔編號H04N7/26GK101355700SQ200810119769公開日2009年1月28日申請日期2008年9月9日優先權日2008年9月9日發明者興張,彭小明,曹喜信申請人:北京大學軟體與微電子學院