專利名稱:一種快速游程長度編解碼電路的實現方法
技術領域:
本發明采用一種新穎的硬件架構,利用較少的硬件資源,實現了快速游程長度編解碼(Run length code/Run length decode)硬件電路設計。該發明可直接應用于數字圖形圖像壓縮解壓硬件加速器(如JPEG硬件壓縮解壓、動態視頻圖像壓縮解壓)芯片的設計,它有效地降低了游程長度編解碼(RLC/RLD)電路的實現規模,同時提高了游程長度編解碼的硬件處理速度,從整體上提高了系統的性能。
背景技術:
目前,比較通用的游程長度編碼(RLC)硬件電路的實現方法是(1)首先將基于塊處理(Block processing)的量化器(Quantizer)輸出的量化系數存儲到量化系數暫存器(quantized coefficients memory)中,每個塊的大小通常是8×8(如JPEG編碼),也可以是4×4或16×16;(2)在當前塊量化完成后,按照掃描順序(水平,垂直或zigzag掃描),掃描量化系數暫存器,并計算出0值的游程長度,得到當前塊的游程編碼(Run length code),并將其存儲到相應的RLC暫存器中。
(3)將RLC暫存器中的游程長度編碼(RLC編碼)送至下一級處理單元,即硬件或軟件霍夫曼(Huffman)編碼。
通用的游程長度解碼(RLD)的實現方法是(1)將霍夫曼解碼得到的游程碼寫入RLC暫存器中。
(2)反掃描得恢復出每個量化系數,并將其寫至量化系數暫存器的相應位置。
(3)將游程解碼(RLD)得到的量化系數送至下一級處理單元,即反量化器(Dequantizer)。
通用的游程長度編解碼硬件電路在電路功能上沒有任何問題,但電路實現規模相對較大,每個系數的掃描都單獨占用一個時鐘周期,在整體性能上,增加了一個塊處理的流水延遲。
發明內容
本發明采用一種新穎的硬件架構,利用較少的硬件資源(無需游程長度編碼輸出暫存器RLC暫存器),去除了通用游程長度編解碼(RLC/RLD)硬件實現時塊掃描占用的時鐘周期,在具體硬件實現時做到了快速高效地實現游程長度編解碼。
本發明解決其技術問題所采用的技術方案如下總體設計思想是在編碼時將游程長度編碼(RLC)拆分到量化和霍夫曼編碼兩個階段完成即在量化輸出的同時完成非零系數的標記,在霍夫曼編碼時實時完成掃描(Scanning)和游程長度編碼(RLC)。在解碼時,將游程長度解碼(RLD)拆分到霍夫曼解碼和反量化兩個階段完成,即在霍夫曼解碼時完成反掃描(Inverse Scanning),在反量化時實時完成量化系數的恢復。
本發明的具體方案是(1)游程長度編碼(RLC)的實現采用本發明的實現方法,需要為每一個量化系數設一個標記位寄存器,標記位的缺省值為0,對于一個8×8的塊,需要64個標記位寄存器。在量化輸出時,如果當前系數為非0值,則將相應標記位設為1,否則仍保持為0。當量化完成后,接下來需要完成的是實時RLC編碼,其具體實現原理是,將非零標記位按掃描順序重新排列,即完成了當前非零系數的的掃描,這個過程不占用額外的時鐘周期,標記位的重新排列,也僅需很少的組合電路(如果設計支持水平、垂直,zigzag三種掃描方式,則每一個系數的重新列最多只需一個三選一的選擇,如果設計只支持zigzag掃描方式,則無須任何硬件資源,只是一個排列順序的改變)。同時將對應的非零系數提前取出,計算出當前系數之前0的游程長度(按照掃描順序兩個相鄰非零量化系數之間的持續0的個數),完成RLC編碼,存儲到RLC輸出寄存器中。當對當前塊進行霍夫曼編碼來讀取RLC編碼時,立即將預先編好的一個RLC編碼送出,并同時完成下一個非零系數的RLC編碼,更新到RLC輸出寄存器,這樣可以確保霍夫曼編碼在讀取RLC編碼時,沒有任何等待周期,當當前塊的最后一個RLC編碼被取走,當前塊的游程長度編碼也結束。
(2)游程長度解碼(RLD)的實現游程長度解碼(RLD)的原理是在霍夫曼解碼階段,當解碼電路接收RLC編碼時,在接收每一個RLC編碼的同一個時鐘周期,根據當前RLC編碼中的游程長度信息得到當前量化系數在當前處理塊中的位置(quantized coefficients memory中的對應地址),并將從當前RLC編碼中得到的非零系數寫入到對應的地址中,同時將對應的系數標記位寄存器置1。在當前處理塊的最后一個RLC編碼接收完的同時,當前塊的反掃描也同時結束。接下來啟動當前塊的反量化操作,對于8×8的塊反量化時,需要依次讀取從0到63個量化系數,根據對應的非零標記位狀態,若當前讀取的量化系數為零,則直接將當前送到反量化器的系數強置為0,若當前讀取的量化系數為非零值,則從量化系數暫存器中讀出相應的量化系數,并送到反量化器。當最后一個量化系數被送出,當前塊的游程長度解碼也即完成。
本發明的有益效果是(1)以較少的硬件資源實現游程長度編解碼;(2)無需額外的專用時鐘周期來完成游程長度編解碼(RLC/RLD),減少了系統的流水線延遲;(3)在實現游程長度編解碼(RLC/RLD)時,只存取非零量化系數,降低了訪問量化數暫存器的功耗。
圖18×8塊處理(Block Processing)時64位非零標記位寄存器向量的置位流程圖。QC[i]指當前量化系數,NZF[i]是其對應的非零標記寄存器。
圖28×8塊處理(Block Processing)時游程長度編碼實時RLC編碼流程圖。Rrlc是RLC編碼輸出寄存器,Aprenz是指前一個非零系數的掃描坐標值,Acurnz指當前非零系數的掃描坐標值,NZF[63:0]指當前塊的原始非零標記寄存器向量,NZFs[63:0]指掃描順序轉置后的非零標記向量,R指實時計算出的當前非零系數的0值游程長度,RLC[Acurnz]指當前非零系數的RLC編碼。
圖3RLD解碼時的反掃描流程圖。Aprenz是指前一個非零系數的反掃描坐標值,Acurnz指當前非零系數的反掃描坐標值,NZF[63:0]指當前塊的原始非零標記寄存器向量,QCrlc是指當前RLD解碼得到的當前非零系數值,QCmem[Acurnz]指當前非零系數對應在量化系數暫存器的的存儲單元圖4RLD解碼時的量化系數實時恢復流程圖。NZF[i]指當前塊的原始非零標記寄存器向量,QC[i]指送到反量化器的量化系數,QCmem[i]指量化系數暫存器中的第i個存儲單元。
具體實施例方式
圖1是8×8塊處理(Block Processing)時64位非零標記位寄存器向量的置位流程圖。在當前塊量化開始之前,NZF[63:0]初值為0。在量化開始后,一旦硬件電路檢測到當前量化系數QC[i]不為零,則將相應的非零標記寄存器位置1,當量化器輸出當前塊的最后一個量化系數NZF[63]同時,當前塊的非零標記完成。
圖2是8×8塊處理(Block Processing)時游程長度編碼實時RLC編碼流程圖。實際電路工作時分兩個時鐘周期完成一個非零系數的RLC編碼。第一個周期為預取編碼周期,第二個周期為RLC編碼讀出周期,但同時也是下一個非零系數的預取編碼周期,從而實現了預取編碼和RLC編碼讀出的流水線操作,一個8×8的塊最少的RLC編碼時鐘周期數為第一個預取周期加上當前塊的RLC編碼個數。預取編碼的工作原理如下首先,將當前塊的非零標記寄存器向量NZF[63:0]轉置為按掃描順序排列的非零零標記向量NZFs[63:0]。設掃描排列順序為{b0,b1,b2,…b62,b63},則NZFs012345678······15········································5657····6263··=NZFb0b1b2b3b4b5b6b7b8······b15········································b56b57····b62b63]]>
轉置過程完成了對當前非零系數的掃描。
然后,對NZFs進行優先權編碼,得到當前非零系數的掃描坐標值Acurnz。NZFs
優先權最高,NZFs[63]優先權最低。NZFs
為1時,Acurnz=0,當只有NZFs[63]為1時,Acurnz=63。Acurnz在下一個時鐘被送至Aprenz寄存器。當前非零系數的掃描坐標值Acurnz減去上一個非零系數的掃描坐標Aprenz即得到了當前非零系數的游程長度R,它和當前系數的值被編碼得到當前系數的RLC編碼RLC[Acurnz]并鎖存至RLC輸出寄存器Rrlc,在RLC讀出周期被送出。當當前非零系數在預取周期完成編碼后,其對應的非零標記寄存器在讀出周期被清0,釋放出優先編碼權,開始了下一個非零系數的預取編碼。當最后一個非零系數的RLC編碼被讀出,當前塊的RLC編碼結束。
圖3是RLD解碼時的反掃描流程圖。當RLD解碼電路接收到霍夫曼解碼得到的RLC編碼時,立即從的RLC碼中的游程長度信息解出當前非零系數的反掃描坐標值,將相應的非零標記寄存器置1,同時將從RLC碼中解出的系數寫入到量化系數暫存器中。當當前塊的最后一個RLC碼被接收,當前塊的RLD解碼反掃描也即結束。
圖4是RLD解碼時的量化系數實時恢復流程圖。RLD解碼電路實現實時量化系數恢復時,首先判斷反量化器送出的讀信號是否有效,當有效時,若當前系數的非零標記為1,則從量化系數暫存器中讀出該非零系數并送到反量化器,若當前系數的非零標記為0,則不讀取量化系數暫存器,而直接將送到反量化器的量化系數強制為0。同時,量化系數暫存器的地址計數中加1,等待反量化器來讀取下一個量化系數值,當最后一個量化系數被讀出,當前塊的反量化也結束。
權利要求
1.一種數字圖形圖像壓縮解壓硬件加速器中快速游程長度編解碼電路的實現方法。具有電路實現規模小,游程編解碼速度快和功耗低的特點。
2.根據權利要求1所述,利用此方法實現游程長度編解碼時,僅需為每個系數設立一個1bit的非零標記寄存器位,無須RLC暫存器(RLC暫存器用來存儲整個塊的RLC編碼,每個量化系數的RLC編碼占用一個多bit位寬的存儲單元,如MPEG4壓縮解壓時每個RLC編碼位寬為19bit),電路實現規模小。
3.根據權利要求1所述,利用此方法實現游程長度編解碼時,在游程長度編碼(RLC)時,在量化的同時完成非零系數的標記,在系統做霍夫曼編碼時實時掃描完成RLC編碼。在游程長度解碼(RLD)時,它在得到RLC編碼的同時完成了反掃描,在反量化時實時完成量化系數的恢復。每個塊的游程長度編解碼不占用額外的處理時鐘周期,從而達到了快速的目的。其中編碼關鍵技術有以下幾點(1)在量化輸出的同時將非零系數的標記位置1;(2)RLC編碼時的預取機制;(3)直接將標記位寄存器按掃描順序轉置完成當前非零系數的掃描,利用當前塊非零標記寄存器的優先權編碼,實時計算出當前非零值的游程長度,直接從量化系數暫存器中讀出該系數,得到RLC編碼。其中解碼關鍵技術有以下2點(1)在得到RLC編碼的同時,立即根據RLC碼中流程長度信息,解出當前系數在掃描序列中的位置,將其作反掃描,可立即得到當前非零系數在量化系數暫存器中的地址,將相應的非零標記位置1,同時將從RLC碼中解碼得到的量化系數寫入該地址;(2)在解碼做反量化時,實時恢復出量化系數矩陣根據當前塊系數的非零標記,只從量化系數存儲器中讀取非零系數值,對于0值量化系數,無須讀量化系數暫存器,而直接將0值送至反量化器。
4.根據權利要求1、2、3所述,利用此方法實現游程長度編解碼時,電路規模小,在掃描/反掃描時只須讀出/寫入非零系數值,減少了量化系數暫存器的存儲次數。這些優點,都降低了實際電路實現時的功耗。
全文摘要
一種基于塊處理數字圖形圖像壓縮解壓硬件加速器中快速游程長度編解碼(RLC/RLD)電路的實現方法。具有電路實現規模小,快速編解碼,功耗低的優點。在游程長度編碼(RLC)時,在量化的同時標記非零系數,在系統做霍夫曼編碼時實時掃描完成RLC編碼。在游程長度解碼(RLD)時,它在得到RLC編碼的同時完成反掃描,在反量化時實時完成量化系數的恢復。
文檔編號G06T9/00GK1779716SQ200510026218
公開日2006年5月31日 申請日期2005年5月26日 優先權日2005年5月26日
發明者唐宏斌 申請人:智多微電子(上海)有限公司