H.264解碼器中CABAC硬件加速器的實現
發布時間:2007/8/30 0:00:00 訪問次數:530
來源:電子設計應用 作者:同濟大學超大規模集成電路研究所 洪佳華 林濤
摘 要:在H.264解碼器中,為了能夠完成高清碼流的實時解碼任務,本文提出了一種CABAC硬件加速器的設計方案。通過采用高效率的狀態機和流水線結構,該方案可在每1~3個時鐘周期內完成1bit數據的解碼。本設計在中芯國際0.18mm CMOS工藝標準單元庫的基礎上進行綜合,硬件加速器面積為0.38mm2,工作時鐘頻率可達166MHz。
關鍵詞:CABAC;H.264;硬件加速器
引言
H.264是由國際電信聯盟(ITU)和國際標準化組織(ISO)共同制定的新一代視頻編碼標準,該標準采用一系列先進的編碼技術,在編碼效率、網絡適應性等諸多方面都超越了以往的視頻標準。H.264有兩種熵編碼方案:一種是從可變長編碼方案發展而來的基于上下文的自適應可變長編碼CAVLC;另一種是從算術編碼發展而來的基于上下文的自適應二進制算術編碼CABAC。與CAVLC相比,CABAC可以節省約7%的碼流,但增加了10%的計算時間。在解高清碼流時,用軟件來做CABAC這樣復雜的熵解碼,無法完成實時解碼的任務,因此,設計硬件加速器是非常必要的。
CABAC解碼算法
在H.264解碼器的輸入碼流中,數據的基本單位是句法元素(Syntax Element),碼流是由一個個句法元素依次銜接而成的。每個句法元素由若干比特組成,表示某個特定的物理意義。在H.264定義的碼流中,句法元素被組織成有層次的結構,分別描述序列(Sequence)、圖像(Picture)、片(Slice)、宏塊(Macroblock)、子宏塊(Subblock)五個層次的信息,CABAC主要負責對片層以下的句法元素進行解碼。
CABAC解碼的總體過程可以分為三個步驟:初始化、二進制算術解碼歸一化、反二進制。
初始化
該過程在每一個片開始時執行,包括上下文模型變量(Context Variable)的初始化和解碼引擎(Decoding Engine)的初始化。
二進制算術解碼和歸一化
二進制算術解碼是CABAC解碼的核心部分,該過程實現1bit數據的解碼,對每個句法元素進行解碼都需要調用該過程。H.264中二進制算術解碼有三種模式:規則解碼(Decode Decision)、旁路解碼(Decode Bypass)和結束解碼(Decode Terminate)。對不同句法元素進行解碼時,分別調用這三種模式的一種或多種。
反二進制化
CABAC定義了四種二進制化方法:一元碼(Unary)、截斷一元碼(Truncated Unary)、K階指數哥倫布碼(kth order Exp-Golomb)和定長碼(Fixed-Length)。一個句法元素可以對應一種或兩種上述二進制化方法,但特殊的是,句法元素mb_type和sub_mb_type的反二進制化獨立于上述四種方法,它們通過查表來實現。
CABAC硬件加速器的架構設計
H.264解碼器的軟/硬件劃分
H.264解碼過程采用軟/硬件聯合的解碼方案,整個解碼器由32位CPU、DSP結構的運算單元和硬件加速器組成。CABAC熵解碼部分,主要是一些判斷和分支操作,數據接口、吞吐量不大,這些任務由軟件和硬件加速器共同完成。本文設計的CABAC解碼模塊就是一個CABAC硬件加速器。
CABAC硬件加速器的總體構架
CABAC硬件加速器的總體架構如圖1所示。其總體架構分為兩層:頂層是CABAC_TOP;底層有7個模塊,包括CABAC_Center_ Control_Unit、Context、 Neighbor_MB_Information, Context_Init、AC_next_ state_LPS、 AC_next_state_MPS和RangeLPS。
CABAC_Center_Control_Unit模塊負責上下文模型變量的初始化,解句法元素,更新Context,并將解出的殘差數據傳給IQ&IDCT模塊;Context模塊是雙口RAM,存放459個上下文模型變量,可同時對一個地址的上下文模型變量進行讀操作并對另外一個地址的上下文模型變量進行寫操作;Neighbor_MB_Information模塊是SRAM,存放宏塊信息,CABAC解碼器在解析當前宏塊中的句法元素時,需要參考上面和左面宏塊的信息,因此,需要在該SRAM內保存圖像中當前宏塊的上一行宏塊和該行之前宏塊的信息,每解完一個宏塊更新該SRAM;Context_Init模塊是一塊片內ROM,用于初始化變量;3個查找表模塊AC_next_state_LPS、AC_next_ state_MPS和RangeLPS由組合邏輯實現,用于二進制算術解碼過程中的查表運算。
CABAC的硬件化分析
本設計的目標是使整個H.264解碼器的芯片能夠對高清圖像(1920×1088)進行實時解碼。假設芯片工作在166MHz的頻率下,圖像播放速率是25fps,則平均解一個宏塊的時間是823個時鐘周期。考慮到H.264熵解碼部分的運算總體上是串行解碼,并行性較差,因此CABAC硬件加速器需要在3個時鐘周期內完成1bit數據的解碼。假設視頻圖像的壓縮比為20:1,YUV為4:2:0取樣,因為取樣值是8bit,則每個像素為8bit×1.5=12bit。CABAC的解碼率約為1:1.2,所以CABAC要解的碼流是(1920×1088×12bit/20)×1.2,約1.43Mb。芯片工作頻率是166MHz,每3個時鐘解
來源:電子設計應用 作者:同濟大學超大規模集成電路研究所 洪佳華 林濤
摘 要:在H.264解碼器中,為了能夠完成高清碼流的實時解碼任務,本文提出了一種CABAC硬件加速器的設計方案。通過采用高效率的狀態機和流水線結構,該方案可在每1~3個時鐘周期內完成1bit數據的解碼。本設計在中芯國際0.18mm CMOS工藝標準單元庫的基礎上進行綜合,硬件加速器面積為0.38mm2,工作時鐘頻率可達166MHz。
關鍵詞:CABAC;H.264;硬件加速器
引言
H.264是由國際電信聯盟(ITU)和國際標準化組織(ISO)共同制定的新一代視頻編碼標準,該標準采用一系列先進的編碼技術,在編碼效率、網絡適應性等諸多方面都超越了以往的視頻標準。H.264有兩種熵編碼方案:一種是從可變長編碼方案發展而來的基于上下文的自適應可變長編碼CAVLC;另一種是從算術編碼發展而來的基于上下文的自適應二進制算術編碼CABAC。與CAVLC相比,CABAC可以節省約7%的碼流,但增加了10%的計算時間。在解高清碼流時,用軟件來做CABAC這樣復雜的熵解碼,無法完成實時解碼的任務,因此,設計硬件加速器是非常必要的。
CABAC解碼算法
在H.264解碼器的輸入碼流中,數據的基本單位是句法元素(Syntax Element),碼流是由一個個句法元素依次銜接而成的。每個句法元素由若干比特組成,表示某個特定的物理意義。在H.264定義的碼流中,句法元素被組織成有層次的結構,分別描述序列(Sequence)、圖像(Picture)、片(Slice)、宏塊(Macroblock)、子宏塊(Subblock)五個層次的信息,CABAC主要負責對片層以下的句法元素進行解碼。
CABAC解碼的總體過程可以分為三個步驟:初始化、二進制算術解碼歸一化、反二進制。
初始化
該過程在每一個片開始時執行,包括上下文模型變量(Context Variable)的初始化和解碼引擎(Decoding Engine)的初始化。
二進制算術解碼和歸一化
二進制算術解碼是CABAC解碼的核心部分,該過程實現1bit數據的解碼,對每個句法元素進行解碼都需要調用該過程。H.264中二進制算術解碼有三種模式:規則解碼(Decode Decision)、旁路解碼(Decode Bypass)和結束解碼(Decode Terminate)。對不同句法元素進行解碼時,分別調用這三種模式的一種或多種。
反二進制化
CABAC定義了四種二進制化方法:一元碼(Unary)、截斷一元碼(Truncated Unary)、K階指數哥倫布碼(kth order Exp-Golomb)和定長碼(Fixed-Length)。一個句法元素可以對應一種或兩種上述二進制化方法,但特殊的是,句法元素mb_type和sub_mb_type的反二進制化獨立于上述四種方法,它們通過查表來實現。
CABAC硬件加速器的架構設計
H.264解碼器的軟/硬件劃分
H.264解碼過程采用軟/硬件聯合的解碼方案,整個解碼器由32位CPU、DSP結構的運算單元和硬件加速器組成。CABAC熵解碼部分,主要是一些判斷和分支操作,數據接口、吞吐量不大,這些任務由軟件和硬件加速器共同完成。本文設計的CABAC解碼模塊就是一個CABAC硬件加速器。
CABAC硬件加速器的總體構架
CABAC硬件加速器的總體架構如圖1所示。其總體架構分為兩層:頂層是CABAC_TOP;底層有7個模塊,包括CABAC_Center_ Control_Unit、Context、 Neighbor_MB_Information, Context_Init、AC_next_ state_LPS、 AC_next_state_MPS和RangeLPS。
CABAC_Center_Control_Unit模塊負責上下文模型變量的初始化,解句法元素,更新Context,并將解出的殘差數據傳給IQ&IDCT模塊;Context模塊是雙口RAM,存放459個上下文模型變量,可同時對一個地址的上下文模型變量進行讀操作并對另外一個地址的上下文模型變量進行寫操作;Neighbor_MB_Information模塊是SRAM,存放宏塊信息,CABAC解碼器在解析當前宏塊中的句法元素時,需要參考上面和左面宏塊的信息,因此,需要在該SRAM內保存圖像中當前宏塊的上一行宏塊和該行之前宏塊的信息,每解完一個宏塊更新該SRAM;Context_Init模塊是一塊片內ROM,用于初始化變量;3個查找表模塊AC_next_state_LPS、AC_next_ state_MPS和RangeLPS由組合邏輯實現,用于二進制算術解碼過程中的查表運算。
CABAC的硬件化分析
本設計的目標是使整個H.264解碼器的芯片能夠對高清圖像(1920×1088)進行實時解碼。假設芯片工作在166MHz的頻率下,圖像播放速率是25fps,則平均解一個宏塊的時間是823個時鐘周期。考慮到H.264熵解碼部分的運算總體上是串行解碼,并行性較差,因此CABAC硬件加速器需要在3個時鐘周期內完成1bit數據的解碼。假設視頻圖像的壓縮比為20:1,YUV為4:2:0取樣,因為取樣值是8bit,則每個像素為8bit×1.5=12bit。CABAC的解碼率約為1:1.2,所以CABAC要解的碼流是(1920×1088×12bit/20)×1.2,約1.43Mb。芯片工作頻率是166MHz,每3個時鐘解