• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于HEVC的CABAC二進(jìn)制算術(shù)編碼器的FPGA實(shí)現(xiàn)

      2020-05-08 02:02:02湯心溢
      紅外技術(shù) 2020年4期
      關(guān)鍵詞:算術(shù)二進(jìn)制編碼器

      王 堯,湯心溢

      (1.中國(guó)科學(xué)院上海技術(shù)物理研究所 中國(guó)科學(xué)院紅外探測(cè)與成像技術(shù)重點(diǎn)實(shí)驗(yàn)室,上海 200083;2.中國(guó)科學(xué)院大學(xué),北京 100049;3.上??萍即髮W(xué) 信息科學(xué)與技術(shù)學(xué)院,上海 201210)

      0 引言

      作為新一代視頻編碼標(biāo)準(zhǔn),H.265/HEVC(high efficiency video coding)可支持3840 pixel×2160 pixel以上級(jí)別高清視頻的壓縮編碼,同時(shí)幀率達(dá)到30 幀/s以上級(jí)標(biāo)準(zhǔn),要求視頻流編碼具有更高的壓縮率。H.265/HEVC標(biāo)準(zhǔn)同上一代H.264/AVC標(biāo)準(zhǔn)相比,在相同的圖像質(zhì)量下碼流數(shù)據(jù)可減少50%左右[1],同時(shí)也要求更復(fù)雜的編碼計(jì)算;同CAVLC(context-based adaptive variable-length coding)相比,CABAC(context-based adaptive binary arithmetic coding,上下文自適應(yīng)二進(jìn)制算術(shù)編碼)可節(jié)省9%~14%的碼流數(shù)據(jù),同時(shí)要求運(yùn)算量提高約40%[2]。

      HEVC標(biāo)準(zhǔn)的結(jié)構(gòu)框圖如圖1所示,主要分為預(yù)測(cè)、量化、濾波和熵編碼部分。其中,熵編碼采用CABAC 編碼器,輸入為量化后的殘差數(shù)據(jù)流,通過(guò)CABAC 編碼器后輸出比特流,即最終的H.265 視頻數(shù)據(jù)流。本文基于HEVC標(biāo)準(zhǔn),在硬件加速方面對(duì)CABAC的二進(jìn)制算術(shù)編碼器進(jìn)行了設(shè)計(jì)實(shí)現(xiàn)與優(yōu)化。

      1 CABAC二進(jìn)制算術(shù)編碼器

      CABAC 編碼器分為3 部分:二值化,上下文建模,以及二進(jìn)制算術(shù)編碼器。二值化過(guò)程將輸入的非二進(jìn)制殘差數(shù)據(jù)語(yǔ)法元素轉(zhuǎn)化為二進(jìn)制序列(bins);在上下文建模過(guò)程中,對(duì)二值化后的序列中每個(gè)符號(hào)(bin)出現(xiàn)的概率進(jìn)行估計(jì),分為最大概率符號(hào)(most probability symbol,MPS)和最小概率符號(hào)(least probability symbol,LPS);二進(jìn)制算術(shù)編碼器則將此序列通過(guò)算術(shù)編碼的形式編碼為最終的比特流符號(hào),完成HEVC編碼輸出。該算術(shù)編碼的本質(zhì)就是用一個(gè)碼字表示一段數(shù)據(jù)流,這個(gè)碼字是對(duì)一段數(shù)據(jù)流不斷分割后獲得的[3]。每個(gè)bin 在編碼完成后都需要對(duì)其上下文模型進(jìn)行更新,即概率估計(jì)過(guò)程,該過(guò)程在上下文建模部分中完成,更新當(dāng)前概率狀態(tài)索引σ和LPS的值。CABAC 算術(shù)編碼器整體結(jié)構(gòu)如圖2所示。

      在CABAC編碼中,概率狀態(tài)(state)代表當(dāng)前符號(hào)所對(duì)應(yīng)的LPS出現(xiàn)概率,概率狀態(tài)估計(jì)值由一組有限的集合表示,LPS概率取值區(qū)間為[0.01875,0.5],對(duì)應(yīng)64個(gè)概率索引值。概率理論值可由公式(1)計(jì)算得出:

      式中:σ為概率狀態(tài)索引;pσ為索引值σ對(duì)應(yīng)的LP S出現(xiàn)概率理論值;α為迭代計(jì)算系數(shù)。

      圖1 HE VC編碼架構(gòu)Fig.1 HEVCcoding architecture

      圖2 CABAC算術(shù)編碼器基本結(jié)構(gòu)Fig.2 Basicstructureof CABACarithmeticencoder

      邊界情況下,當(dāng)MPS出現(xiàn)時(shí),概率狀態(tài)索引σ根據(jù)特定的規(guī)則跳轉(zhuǎn)增加[4],LPS對(duì)應(yīng)的概率降低;當(dāng)LPS出現(xiàn)時(shí),概率狀態(tài)索引σ跳轉(zhuǎn)降低至對(duì)應(yīng)的下一個(gè)值,LPS概率升高。當(dāng)σ=0時(shí),LPS與MPS所對(duì)應(yīng)的符號(hào)互換。CABAC概率估計(jì)更新模型如圖3[4]所示,該更新過(guò)程決定了二進(jìn)制算術(shù)編碼過(guò)程中概率狀態(tài)索引和LPS的輸入值,同時(shí)將當(dāng)前編碼符號(hào)bin輸入至二進(jìn)制算術(shù)編碼器中。

      在二進(jìn)制算術(shù)編碼模塊中,輸入數(shù)據(jù)包括當(dāng)前待編碼符號(hào)bin,LPS值,以及上下文建模/更新后的概率狀態(tài)索引σ。該模塊主要負(fù)責(zé)編碼區(qū)間的更新,并將更新好的編碼區(qū)間打包輸出比特流。描述編碼區(qū)間的參數(shù)由low和range構(gòu)成,low為當(dāng)前區(qū)間的下界值,range為當(dāng)前區(qū)間長(zhǎng)度,每輸入一個(gè)bin,二進(jìn)制算術(shù)編碼通過(guò)σ和目前的range值查表得到bin=LPS時(shí)所對(duì)應(yīng)的range更新值,記為rLPS,之后將對(duì)lo w和range的取值進(jìn)行更新。

      圖3 CABAC的概率估計(jì)更新模型Fig.3 CABAC probabilityestimation update model

      對(duì)當(dāng)前符號(hào)bin,如果bin=LPS,則當(dāng)前區(qū)間更新為:

      如果bin=MPS,則當(dāng)前區(qū)間更新為:

      low和range值更新完畢后,編碼數(shù)據(jù)通過(guò)重歸一化[5]進(jìn)行實(shí)時(shí)的打包輸出,完成二進(jìn)制算術(shù)編碼器的比特流輸出。CABAC二進(jìn)制算術(shù)編碼器的算法流程如圖4所示,虛線(xiàn)所示流程為概率估計(jì)更新的計(jì)算過(guò)程,可在上下文建模部分中完成[6],其中σ的更新計(jì)算通常使用查找表的方式代替式(1)的概率轉(zhuǎn)移運(yùn)算。隨著新的編碼區(qū)間計(jì)算完畢,會(huì)產(chǎn)生部分已確定的編碼位,后來(lái)輸入的符號(hào)無(wú)法修改這部分編碼。重歸一化的目的是將已確定的編碼位進(jìn)行及時(shí)的打包輸出,并保證更新后的編碼區(qū)間仍然可以用有限位的精度來(lái)表示。

      圖4 CABAC二進(jìn)制算術(shù)編碼器的算法流程Fig.4 Algorithm flow of CABAC binary arithmetic encoder

      2 編碼器算法實(shí)現(xiàn)與優(yōu)化

      根據(jù)硬件平臺(tái)的并行運(yùn)算特性,該二進(jìn)制算術(shù)編碼器采用如圖5所示的多級(jí)流水線(xiàn)的硬件加速結(jié)構(gòu),通過(guò)犧牲硬件資源提高數(shù)據(jù)編碼速度。編碼器主要針對(duì)常規(guī)編碼模式,支持四路bin 并行輸入,首先對(duì)輸入數(shù)據(jù)進(jìn)行預(yù)處理,提取編碼二進(jìn)制bin值、當(dāng)前LPS取值及索引值σ;之后依據(jù)圖4所示的二進(jìn)制算術(shù)編碼器算法流程,以硬件流水線(xiàn)的形式計(jì)算每個(gè)bin 對(duì)應(yīng)的rLPS、新的range值和low值,并對(duì)編碼區(qū)間進(jìn)行重歸一化,最后以每8個(gè)比特作為一個(gè)字節(jié)打包輸出編碼比特流,完成編碼器輸出。

      圖5 二進(jìn)制算術(shù)編碼器多級(jí)流水線(xiàn)硬件結(jié)構(gòu)Fig.5 Multi-stage pipeline hardware structure of binary arithmetic encoder

      該二進(jìn)制算術(shù)編碼器在流水線(xiàn)結(jié)構(gòu)中分為4個(gè)編碼階段。在第一階段中,對(duì)每個(gè)bin,編碼器判斷當(dāng)前字符bin是否為L(zhǎng)PS,并根據(jù)輸入的概率狀態(tài)索引σ查表得到rLPS值。由于此時(shí)尚未讀取到最新的range值,rLPS的計(jì)算依賴(lài)于該range值的最高兩位,其可能取值有4種,所以需要計(jì)算并存儲(chǔ)每個(gè)bin的所有4種rLPS 取值,記錄為rLPSTab,并在第二階段range的更新中通過(guò)式(4)的規(guī)則進(jìn)行查表讀取,解決了rLPS對(duì)range值的數(shù)據(jù)依賴(lài)問(wèn)題:

      在每路rLPSTab的計(jì)算中,各使用一路寄存器保存rLPSTab的值,該過(guò)程每次需要1個(gè)時(shí)鐘周期進(jìn)行數(shù)據(jù)更新;在第二階段中,編碼器需要通過(guò)寄存器維護(hù)最新的編碼區(qū)間長(zhǎng)度range_last的值,根據(jù)當(dāng)前bin是否為L(zhǎng)PS、range_last 以及通過(guò)式(4)查表讀取到的rLPS值,通過(guò)式(2)、(3)得到更新后的編碼區(qū)間長(zhǎng)度range_update,并各使用一路寄存器進(jìn)行數(shù)據(jù)暫存。編碼階段1、2 采用如圖6所示的電路計(jì)算結(jié)構(gòu),在range 計(jì)算后需要對(duì)range值進(jìn)行重整,當(dāng)bin 為MPS時(shí),在計(jì)算后的range值(rMPS)最高位為0時(shí)需要對(duì)其算術(shù)左移一位,可以通過(guò)二選一MUX 解決;當(dāng)bin 為L(zhǎng)PS時(shí),range值即為重整后的rLPS值,此時(shí)range的重整過(guò)程被預(yù)存在 rLPSupdateTab 中,rLPSupdateTab 保留了4種rLPS值所對(duì)應(yīng)的重整結(jié)果,可在編碼階段1 內(nèi)預(yù)先完成,需要時(shí)從LUT 中調(diào)取,避免了本級(jí)流水線(xiàn)對(duì)range值的數(shù)據(jù)依賴(lài)。之后,根據(jù)當(dāng)前bin是否為L(zhǎng)PS,得到編碼階段2 對(duì)應(yīng)的range_update 結(jié)果,進(jìn)行l(wèi)ow的計(jì)算。數(shù)據(jù)從預(yù)處理到計(jì)算結(jié)果送入編碼階段3的過(guò)程需要2個(gè)時(shí)鐘周期。

      在第三階段中,編碼器需要通過(guò)寄存器維護(hù)最新的編碼區(qū)間下界low_last的值,根據(jù)當(dāng)前bin是否為L(zhǎng)PS、rMPS和low_last,通過(guò)式(2)、(3)得到更新后的low_update;第四階段為重歸一化過(guò)程,由于low的部分高位二進(jìn)制數(shù)值不再隨輸入而產(chǎn)生變化,需要重新維護(hù)編碼區(qū)間,判斷已確定的編碼比特,將緩沖比特序列算術(shù)左移,將待輸出的bit 存放在比特暫存區(qū)中,并將已確定的二進(jìn)制編碼數(shù)據(jù)以8個(gè)bit 為一個(gè)單位打包輸出,即為二進(jìn)制算術(shù)編碼器的輸出比特流。由于每個(gè)bin 從輸入該模塊到輸出比特流需要依賴(lài)數(shù)據(jù)打包等待過(guò)程,完成比特輸出需要1~3個(gè)不等的時(shí)鐘周期,為防止數(shù)據(jù)溢出,設(shè)置深度為64 bit的比特buffer,將四路編碼進(jìn)行緩沖存儲(chǔ)。編碼階段3、4的電路結(jié)構(gòu)如圖7所示。

      在實(shí)際運(yùn)算中,對(duì)概率估計(jì)更新過(guò)程,使用查表法代替乘法運(yùn)算,可大大減少運(yùn)算時(shí)間,節(jié)省時(shí)鐘周期和資源占用。采用概率狀態(tài)轉(zhuǎn)移查找表,表示每個(gè)σ對(duì)應(yīng)的下一個(gè)概率狀態(tài)及概率估計(jì)值,將概率估計(jì)更新后的概率數(shù)據(jù)存放在SRAM 中,在下一次概率估計(jì)更新時(shí)對(duì)SRAM 進(jìn)行讀取和重新寫(xiě)入,以完成概率模型的動(dòng)態(tài)更新,避免了使用寄存器存儲(chǔ)大量數(shù)據(jù)導(dǎo)致的芯片資源和面積消耗。本文的二進(jìn)制算術(shù)編碼器對(duì)概率估計(jì)更新進(jìn)行了運(yùn)算效率的優(yōu)化,由于編碼器模塊每次的輸入為同一數(shù)據(jù)塊中連續(xù)的4個(gè)bin,可將該并行輸入的4個(gè)bin的概率估計(jì)更新過(guò)程簡(jiǎn)化為只計(jì)算其中第一個(gè)bin的概率估計(jì)更新,減少硬件資源占用和運(yùn)算時(shí)間;這一過(guò)程對(duì)輸入的二進(jìn)制編碼數(shù)據(jù)進(jìn)行打包處理,即以4個(gè)符號(hào)的包為單位進(jìn)行編碼(對(duì)應(yīng)文獻(xiàn)[7]中N=4的情況),并將概率估計(jì)更新的計(jì)算結(jié)果在SRAM 中進(jìn)行更新。當(dāng)輸入的4 bit 序列的后三位為交替出現(xiàn)的序列,即{LPS,MPS,LPS}或{MPS,LPS,MPS}時(shí),對(duì)于編碼效率的影響最小,此時(shí)只有1個(gè)bin的概率估計(jì)更新值受到1次σ跳轉(zhuǎn)的影響[7];而對(duì)于最差情況[8],輸入的4 bit 序列的后三位為同一符號(hào),即{LPS,LPS,LPS}或{MPS,MPS,MPS}時(shí),此組序列僅有3次σ跳轉(zhuǎn)的偏差,整體而言可兼顧運(yùn)算資源與編碼效率的平衡,并將算術(shù)編碼器部分的SRAM 使用數(shù)量減少為原始算法[9]的2/5,同時(shí)略微提高硬件編碼速度。

      圖6 Range_update的計(jì)算結(jié)構(gòu)Fig.6 Calculation structure of range_update

      圖7 Low的計(jì)算和比特輸出Fig.7 Calculation and bit output of low

      3 仿真與結(jié)果

      對(duì)本文的二進(jìn)制算術(shù)編碼器在Vivado 2018.2 平臺(tái)上進(jìn)行前仿真,仿真結(jié)果如圖8所示,在不考慮初始化及中斷復(fù)位的情況下,該算術(shù)編碼器每個(gè)時(shí)鐘周期可以完成4個(gè)bin的編碼,相比文獻(xiàn)[3]的結(jié)構(gòu)有顯著的編碼速度提升。

      采用Xilinx的xczu9eg-ffvb1156 FPGA 對(duì)本文的二進(jìn)制算術(shù)編碼器模塊進(jìn)行硬件實(shí)現(xiàn),綜合實(shí)現(xiàn)后的資源占用情況如表1所示。

      在本文設(shè)計(jì)中,將DSP 乘法器運(yùn)算全部轉(zhuǎn)化為查找表運(yùn)算,避免了時(shí)序問(wèn)題的同時(shí)提高整體編碼速度,數(shù)據(jù)輸出時(shí)延為3~5個(gè)時(shí)鐘周期。本文與其他參考文獻(xiàn)的實(shí)現(xiàn)結(jié)果對(duì)比如表2所示,與文獻(xiàn)[3]相比,本文的二進(jìn)制算術(shù)編碼器消耗了大量的LUT 資源用于概率索引查找表以及range、low的快速計(jì)算,而每個(gè)Slice可提供4個(gè)6 輸入的LUT,在該系列Xilinx 器件中每個(gè)CLB 邏輯單元對(duì)應(yīng)2個(gè)Slice,導(dǎo)致承載LUT的CLB的數(shù)量消耗為文獻(xiàn)[3]的4倍左右,與后者每時(shí)鐘周期0.7個(gè)bin的編碼速度對(duì)比,本文在犧牲了大量片上資源的基礎(chǔ)上,獲得了更快的編碼速度,實(shí)時(shí)性更強(qiáng),在相同條件下可支持1080p 視頻數(shù)據(jù)在30~60 f/s 幀率下的實(shí)時(shí)編碼,符合基于HEVC高效的CABAC二進(jìn)制算術(shù)編碼器的設(shè)計(jì)要求。

      圖8 二進(jìn)制算術(shù)編碼器仿真結(jié)果Fig.8 Binary arithmetic encoder simulation results

      表1 二進(jìn)制算術(shù)編碼器資源使用情況Table1 Binary arithmetic encoder resource usage

      表2 與其他文獻(xiàn)實(shí)現(xiàn)結(jié)果對(duì)比Table2 Comparison with implementation results of other references

      4 總結(jié)

      本文實(shí)現(xiàn)了HEVC的CABAC二進(jìn)制算術(shù)編碼器常規(guī)編碼模式下的硬件加速結(jié)構(gòu),基于并行流水線(xiàn)對(duì)二進(jìn)制算術(shù)編碼器進(jìn)行硬件結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn),通過(guò)SRAM 存儲(chǔ)概率估計(jì)更新數(shù)據(jù),使用查找表優(yōu)化概率估計(jì)及編碼區(qū)間的計(jì)算過(guò)程,避免DSP 乘法運(yùn)算,縮短運(yùn)行時(shí)間。結(jié)果表明,本文的硬件CABAC二進(jìn)制算術(shù)編碼器平均每時(shí)鐘周期可以完成4個(gè)bin的編碼,適用于對(duì)HEVC 視頻編碼實(shí)時(shí)性要求較高的場(chǎng)合,功耗相對(duì)有限,編碼效率高,支持較高幀率的1080p 視頻實(shí)時(shí)編碼,具有較快的數(shù)據(jù)編碼傳輸能力。

      猜你喜歡
      算術(shù)二進(jìn)制編碼器
      用二進(jìn)制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
      有趣的進(jìn)度
      二進(jìn)制在競(jìng)賽題中的應(yīng)用
      基于FPGA的同步機(jī)軸角編碼器
      算算術(shù)
      學(xué)算術(shù)
      基于PRBS檢測(cè)的8B/IOB編碼器設(shè)計(jì)
      小狗算算術(shù)
      JESD204B接口協(xié)議中的8B10B編碼器設(shè)計(jì)
      電子器件(2015年5期)2015-12-29 08:42:24
      做算術(shù)(外一則)
      吉木乃县| 拜城县| 湘潭县| 乐清市| 新昌县| 邛崃市| 郁南县| 西昌市| 图木舒克市| 甘孜| 枣强县| 岐山县| 台南县| 冕宁县| 凌源市| 行唐县| 柏乡县| 沾化县| 惠州市| 安顺市| 苍梧县| 师宗县| 铜山县| 莫力| 华坪县| 蓝山县| 青海省| 乐山市| 合肥市| 重庆市| 嵩明县| 疏附县| 酒泉市| 彰武县| 石渠县| 卢湾区| 招远市| 积石山| 邳州市| 蕲春县| 白山市|