国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

H.264解碼器中CABAC硬件加速器的實(shí)現(xiàn)

發(fā)布時間:2010-9-17 10:59    發(fā)布者:techshare
關(guān)鍵詞: CABAC , 解碼器 , 硬件加速器
H.264是由國際電信聯(lián)盟(ITU)和國際標(biāo)準(zhǔn)化組織(ISO)共同制定的新一代視頻編碼標(biāo)準(zhǔn),該標(biāo)準(zhǔn)采用一系列先進(jìn)的編碼技術(shù),在編碼效率、網(wǎng)絡(luò)適應(yīng)性等諸多方面都超越了以往的視頻標(biāo)準(zhǔn)。H.264有兩種熵編碼方案:一種是從可變長編碼方案發(fā)展而來的基于上下文的自適應(yīng)可變長編碼CAVLC;另一種是從算術(shù)編碼發(fā)展而來的基于上下文的自適應(yīng)二進(jìn)制算術(shù)編碼CABAC。與CAVLC相比,CABAC可以節(jié)省約7%的碼流,但增加了10%的計(jì)算時間。在解高清碼流時,用軟件來做CABAC這樣復(fù)雜的熵解碼,無法完成實(shí)時解碼的任務(wù),因此,設(shè)計(jì)硬件加速器是非常必要的。

CABAC解碼算法

在H.264解碼器的輸入碼流中,數(shù)據(jù)的基本單位是句法元素(Syntax Element),碼流是由一個個句法元素依次銜接而成的。每個句法元素由若干比特組成,表示某個特定的物理意義。在H.264定義的碼流中,句法元素被組織成有層次的結(jié)構(gòu),分別描述序列(Sequence)、圖像(Picture)、片(Slice)、宏塊(Macroblock)、子宏塊(Subblock)五個層次的信息,CABAC主要負(fù)責(zé)對片層以下的句法元素進(jìn)行解碼。

CABAC解碼的總體過程可以分為三個步驟:初始化、二進(jìn)制算術(shù)解碼歸一化、反二進(jìn)制。

初始化

該過程在每一個片開始時執(zhí)行,包括上下文模型變量(Context Variable)的初始化和解碼引擎(Decoding Engine)的初始化。

二進(jìn)制算術(shù)解碼和歸一化

二進(jìn)制算術(shù)解碼是CABAC解碼的核心部分,該過程實(shí)現(xiàn)1bit數(shù)據(jù)的解碼,對每個句法元素進(jìn)行解碼都需要調(diào)用該過程。H.264中二進(jìn)制算術(shù)解碼有三種模式:規(guī)則解碼(Decode Decision)、旁路解碼(Decode Bypass)和結(jié)束解碼(Decode Terminate)。對不同句法元素進(jìn)行解碼時,分別調(diào)用這三種模式的一種或多種。

反二進(jìn)制化

CABAC定義了四種二進(jìn)制化方法:一元碼(Unary)、截?cái)嘁辉a(Truncated Unary)、K階指數(shù)哥倫布碼(kth order Exp-Golomb)和定長碼(Fixed-Length)。一個句法元素可以對應(yīng)一種或兩種上述二進(jìn)制化方法,但特殊的是,句法元素mb_type和sub_mb_type的反二進(jìn)制化獨(dú)立于上述四種方法,它們通過查表來實(shí)現(xiàn)。

CABAC硬件加速器的架構(gòu)設(shè)計(jì)

H.264解碼器的軟/硬件劃分

H.264解碼過程采用軟/硬件聯(lián)合的解碼方案,整個解碼器由32位CPU、DSP結(jié)構(gòu)的運(yùn)算單元和硬件加速器組成。CABAC熵解碼部分,主要是一些判斷和分支操作,數(shù)據(jù)接口、吞吐量不大,這些任務(wù)由軟件和硬件加速器共同完成。本文設(shè)計(jì)的CABAC解碼模塊就是一個CABAC硬件加速器。

CABAC硬件加速器的總體構(gòu)架

CABAC硬件加速器的總體架構(gòu)如圖1所示。其總體架構(gòu)分為兩層:頂層是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模塊負(fù)責(zé)上下文模型變量的初始化,解句法元素,更新Context,并將解出的殘差數(shù)據(jù)傳給IQ&IDCT模塊;Context模塊是雙口RAM,存放459個上下文模型變量,可同時對一個地址的上下文模型變量進(jìn)行讀操作并對另外一個地址的上下文模型變量進(jìn)行寫操作;Neighbor_MB_Information模塊是SRAM,存放宏塊信息,CABAC解碼器在解析當(dāng)前宏塊中的句法元素時,需要參考上面和左面宏塊的信息,因此,需要在該SRAM內(nèi)保存圖像中當(dāng)前宏塊的上一行宏塊和該行之前宏塊的信息,每解完一個宏塊更新該SRAM;Context_Init模塊是一塊片內(nèi)ROM,用于初始化變量;3個查找表模塊AC_next_state_LPS、AC_next_ state_MPS和RangeLPS由組合邏輯實(shí)現(xiàn),用于二進(jìn)制算術(shù)解碼過程中的查表運(yùn)算。

CABAC的硬件化分析

本設(shè)計(jì)的目標(biāo)是使整個H.264解碼器的芯片能夠?qū)Ω咔鍒D像(1920×1088)進(jìn)行實(shí)時解碼。假設(shè)芯片工作在166MHz的頻率下,圖像播放速率是25fps,則平均解一個宏塊的時間是823個時鐘周期。考慮到H.264熵解碼部分的運(yùn)算總體上是串行解碼,并行性較差,因此CABAC硬件加速器需要在3個時鐘周期內(nèi)完成1bit數(shù)據(jù)的解碼。假設(shè)視頻圖像的壓縮比為20:1,YUV為4:2:0取樣,因?yàn)槿又凳?bit,則每個像素為8bit×1.5=12bit。CABAC的解碼率約為1:1.2,所以CABAC要解的碼流是(1920×1088×12bit/20)×1.2,約1.43Mb。芯片工作頻率是166MHz,每3個時鐘解出1bit,則解碼數(shù)據(jù)率約為55.3Mbps,本設(shè)計(jì)在解碼時CABAC占用了90%,約為49.8Mbps。因此解碼速度為49.8/1.43,約34.7fps,即1s可以解34.7幀,則解1幀(1920×1088)大約需要28.8ms。

為了達(dá)到該目標(biāo),CABAC硬件加速器的設(shè)計(jì)必須對核心的二進(jìn)制算術(shù)解碼進(jìn)行優(yōu)化。根據(jù)歸一化算法的特點(diǎn),即循環(huán)的次數(shù)可由輸入的codIRange、codIOffset和查表得到的codIRangeLPS事先判斷出來,因此可以合并二進(jìn)制化和歸一化這兩個步驟,使其在1個時鐘周期內(nèi)完成。由于篇幅有限,下面僅以三種模式中的規(guī)則解碼為例,說明二進(jìn)制算術(shù)解碼和歸一化的硬件化,旁路解碼和結(jié)束解碼可參考H.264協(xié)議。

規(guī)則解碼的二進(jìn)制算術(shù)解碼和歸一化過程主要包括比較、減法、查表、移位操作。在H.264中,為了減少計(jì)算的復(fù)雜度,
CABAC首先建立一個64×4的二維表格rangeTabLPS[64],存放預(yù)先計(jì)算好的乘法結(jié)果。表格的入口參數(shù)是pStateIdx和qCodIRangeIdx,其中qCodIRangeIdx由變量codIRange量化而來,量化方法是(codIRange>>6)&3。其Verilog HDL實(shí)現(xiàn)如下:

assign qCodIRangeIdx= (codIRange>>6)&2'b11;

always@(pStateIdx or qCodIRangeIdx)

begin 

case{pStateIdx, qCodIRangeIdx}  

0: codIRangeLPS="0";  

… …  

255:codIRangeLPS=63;

endcase

end

建立了概率模型和乘法模型后,在遞進(jìn)計(jì)算過程中CABAC必須保存一下變量:當(dāng)前區(qū)間的下限codIOffset、當(dāng)前區(qū)間的大小codIRange、當(dāng)前MPS(大概率符號)字符valMPS、LPS(小概率符號)的概率編號pStateIdx。transIdxLPS[pStateIdx]和transIdxMPS[pStateIdx]是兩個深度為64項(xiàng)的表格,其中pStateIdx的取值為0"63。接下來是歸一化判斷,當(dāng)codIRange小于0x0100時,需進(jìn)行歸一化。這樣就能在1個時鐘周期內(nèi)完成二進(jìn)制化和歸一化兩個步驟,其Verilog HDL實(shí)現(xiàn)如下:

always@(posedge clk or negedge rst)

if( !rst)

... ...

else

begin  

if(codIOffset>= codIRange-codIRangeLPS)

begin

binVal<="valMPS;

codIOffset<=codIOffset-(codIRange-codIRangeLPS);

codIRange<=codIRangeLPS;  

if(pStateIdx==0)  

valMPS<=1-valMPS;

pStateIdx<=transIdxLPS[pStateIdx];

end  

else

begin

binVal<=valMPS;

pStateIdx<=transIdxMPS[pStateIdx];&nb
sp;  

end  

while(codIRange<0x100) //注:此語句不可綜合

begin

codIRange<= (codIRange-codIRangeLPS)<<1;

codIOffset<=(codIOffset<<1) |read_bits(1);  

end  

end  

CABAC的加速策略

狀態(tài)機(jī)的設(shè)計(jì)

二進(jìn)制算術(shù)解碼的狀態(tài)機(jī)是本設(shè)計(jì)的核心,該部分效率的高低將直接影響到CABAC硬件加速器的解碼速度。在CABAC模塊沒有被啟動時,狀態(tài)機(jī)將一直停留在初始狀態(tài),當(dāng)一個新片開始時,初始化解碼引擎;當(dāng)收到CPU發(fā)出的解碼請求時,首先進(jìn)入預(yù)解碼狀態(tài),讀取上下文模型變量,然后在下一個時鐘進(jìn)入二進(jìn)制算術(shù)解碼狀態(tài),完成1bit數(shù)據(jù)的解碼。在CABAC解碼過程中,系統(tǒng)會根據(jù)句法元素的種類和當(dāng)前數(shù)據(jù)的位置選擇解碼模式。

流水線的設(shè)計(jì)

CABAC對1bit數(shù)據(jù)進(jìn)行解碼的過程可分為兩個步驟:讀取上下文模型變量、解碼并更新上下文模型變量。本設(shè)計(jì)采用兩級流水線結(jié)構(gòu),在對當(dāng)前數(shù)據(jù)進(jìn)行解碼的同時,可讀取下個數(shù)據(jù)的上下文模型變量,因此加快了解碼速度。

碼流讀取的雙緩沖設(shè)計(jì)

在進(jìn)行解碼的時候,為了提高傳輸效率,采用雙緩沖的形式。在總線給其中一個緩沖傳輸數(shù)據(jù)的時候,解碼器可從另外一個緩沖里讀取數(shù)據(jù)進(jìn)行解碼,從而使傳輸和解碼同時進(jìn)行,有效提高了傳輸效率。

設(shè)計(jì)結(jié)果與性能仿真

在設(shè)計(jì)完成后,利用JVT提供的標(biāo)準(zhǔn)測試碼流進(jìn)行測試,通過了仿真驗(yàn)證。結(jié)果顯示,本設(shè)計(jì)平均每2個時鐘周期可完成1bit數(shù)據(jù)的解碼。

在SMIC 0.18mm CMOS工藝標(biāo)準(zhǔn)單元庫的基礎(chǔ)上進(jìn)行DC(Design Compile)綜合,硬件加速器的面積為0.38mm2(不包括片外SRAM所占用的面積),工作頻率可達(dá)166MHz,達(dá)到了預(yù)期要求。

為了顯示硬件加速器的優(yōu)勢,選擇參考軟件JM7.4的函數(shù)biari_decode_symbol完成二進(jìn)制算術(shù)解碼和歸一化。Visual C++6.0編譯器的編譯結(jié)果顯示該函數(shù)使用了109個匯編指令,因此用軟件完成1bit數(shù)據(jù)的解碼至少需要100個時鐘周期。而利用本設(shè)計(jì)完成同樣的步驟時,最多只需3個時鐘周期,很好地達(dá)到了加速器的作用。

結(jié)語

由于采用了一系列的優(yōu)化方案,同時,在設(shè)計(jì)時考慮了解碼速度及解碼系統(tǒng)中各個模塊之間的協(xié)調(diào),本文實(shí)現(xiàn)了熵解碼CABAC的快速解碼,能完成高清碼流的實(shí)時解碼任務(wù),在視頻解碼芯片中有很好的應(yīng)用價值。
本文地址:http://m.qingdxww.cn/thread-27470-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本网站在线播放| 香港经典a毛片免费观看爽爽影院 香港三级日本三级韩国三级 | 久久99国产综合精品AV蜜桃| 操中国老太太| 久久免费黄色| 特级黑人三人共一女| 欧美成人精品福利在线视频| 亚洲综合伊人| 日韩aaa| 亚洲黄色一区二区| 窝窝看一夜七次郎在线视频| 一二三四免费观看高清动漫视频| 亚洲综合色吧| 郭德纲于谦2012最新相声| 毛片免费观看| 玩高中女同桌肉色短丝袜脚文 | 巨大乳hdbbw| 诱受H嗯啊巨肉舍友1V1| 亚洲草逼视频| 日本一片免费观看高清完整| 丝瓜视频草莓| 在线视频亚洲| 国产一卡2卡3卡4卡孕妇网站| 精品无码日本蜜桃麻豆| 神马伦理2019影院不卡片| 微拍秒拍99福利精品小视频| 日韩欧美一区二区三区在线播放| 青娱乐国产视频| 新男人天堂| 亚洲精品国精品久久99热| 99热国产这里只有精品免费 | 四月婷婷| 五月天综合久久| 99热这里只有 精品| 蜜芽最新域名解析网站| 在公交车上被JB草坏了被轮J了 | 日本二区在线观看| 中日韩在线视频| 一本大道香蕉中文在线高清| 后入式啪gif动态图| 亚洲精品tv久久久久久久久久|