国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

H.265/HEVC 熵解碼的分組并行流水線實(shí)現(xiàn)

2023-11-10 11:25:18王世豪周志剛郭旭殷先英薛曉娜趙靖宇
電子技術(shù)應(yīng)用 2023年10期
關(guān)鍵詞:算術(shù)解碼器流水線

王世豪,周志剛,郭旭,殷先英,薛曉娜,趙靖宇

(杭州電子科技大學(xué) 電子信息學(xué)院,浙江 杭州 310018)

0 引言

與H.264/AVC 相比,視頻壓縮標(biāo)準(zhǔn)H.265/HEVC 能夠在相同的圖像質(zhì)量下實(shí)現(xiàn)更低的碼率,即更高的壓縮比[1]?;谏舷挛牡亩M(jìn)制自適應(yīng)算術(shù)編碼(Context-Adaptive Binary Arithmetic Coding,CABAC)是H.265/HEVC 支持的熵編碼方案。CABAC 在熵編碼方案中具有極高的數(shù)據(jù)壓縮率,相對于另一種熵編碼方案基于上下文的自適應(yīng)可變長編碼(Context-Adaptive Variable Length Coding,CAVLC),在同等編碼質(zhì)量下,CABAC 可節(jié)約10%~15%的比特率。

在CABAC中,上下文建模的保持與更新需要大量的計(jì)算和內(nèi)部存儲器件的訪問。在解碼過程中,語法元素需要其前面的語法元素來確定上下文地址,在每個(gè)binVal 被解碼獲得時(shí),解碼過程需要檢查流是否被更改或保持在相同的語法元素中。因此,解碼過程比編碼過程具有更多的依賴性。同時(shí),在標(biāo)準(zhǔn)的熵解碼流程中,由于位流指針(binIdx)的存在,導(dǎo)致熵解碼過程串行程度過高,占用了較長的解碼時(shí)間。導(dǎo)致CABAC 模塊成為視頻解碼器的吞吐量瓶頸。因此,有必要針對以上問題設(shè)計(jì)一種高并行、高吞吐量的硬件結(jié)構(gòu)。

目前CABAC 解碼器的工作可以分為3類,分別是基于流水線的時(shí)域并行性擴(kuò)展、基于單周期的多位解碼、基于預(yù)測的解碼和基于子區(qū)間重排序的解碼。文獻(xiàn)[2-3]通過流水線的方式擴(kuò)展時(shí)域并行性,但碼流之間的高數(shù)據(jù)依賴使反饋環(huán)路串行程度過高,導(dǎo)致在流水線架構(gòu)中過多的時(shí)鐘冗余。文獻(xiàn)[4-9]通過增加額外的解碼邏輯來增加每周期的解碼輸出位,但該種方法實(shí)現(xiàn)的時(shí)鐘速率較低。文獻(xiàn)[8-9]通過使用基于預(yù)測解碼的方法節(jié)省了預(yù)存解碼信息的硬件開銷,但帶來了額外的關(guān)鍵路徑延遲,且有較高的預(yù)測失誤懲罰,導(dǎo)致了較低的吞吐量。文獻(xiàn)[10]提出適用于HEVC 的多路并行硬件CABAC 解碼器架構(gòu)。該CABAC 解碼器采用multi-bin解碼方式,其吞吐量可達(dá)到3 026 Mbins/s。這種結(jié)構(gòu)改進(jìn)算術(shù)編碼(子區(qū)間重排序),縮短了關(guān)鍵路徑,但這種架構(gòu)前端的碼流控制容易出現(xiàn)性能瓶頸。文獻(xiàn)[11]在算術(shù)編碼子區(qū)間重排序的基礎(chǔ)上,采用5 級流水線的結(jié)構(gòu),進(jìn)一步使用鎖存器來減少熵解碼的面積開銷,布局布線后可實(shí)現(xiàn)峰值為1 696 Mbins/s 的解碼性能。但使用子區(qū)間排序后,編碼器和解碼器必須同時(shí)使用才能保證編解碼一致性,實(shí)用性不高。

針對上述方法存在的不足,本文根據(jù)CABAC 解碼算法特點(diǎn)和FPGA 硬件高并行的特性,提出了一種多路并行的CABAC 解碼器。通過將語法元素分組并行處理,減少了內(nèi)部寄存器使用與訪問次數(shù),優(yōu)化了關(guān)鍵路徑,增加了CABAC 解碼器的吞吐量,并且在編碼端不需做任何特殊配置,所提出的結(jié)構(gòu)實(shí)用性很高。

1 CABAC 解碼

CABAC 解碼器架構(gòu)如圖1 所示,由上下文建模器、二值化解碼器和去二值化解碼器組成。圖1 箭頭方向表示數(shù)據(jù)及控制。其中,二值化解碼器依據(jù)不同語法元素的解碼通路分為常規(guī)算術(shù)解碼、旁路解碼和終止解碼。

圖1 CABAC 整體算法架構(gòu)圖

常規(guī)算術(shù)解碼模塊適用于解碼概率分布不均勻的語法元素,需要估計(jì)符號的概率,關(guān)鍵路徑較長。其算法流程如圖2 所示,其中stage1 為區(qū)間劃分與位流判決,stage2 為重歸一化工程。首先,初始化算術(shù)解碼引擎:區(qū)間大小ivlCurrRange 和偏移量ivlOffset。對于Main 檔次,ivlCurrRange 初始值為510,ivlOffset初始化為輸入碼流的高9 bit。然后以ivlCurrRange 的高2 位和概率狀態(tài)索引pStateIdx 為查找表索引,查表得出小概率區(qū)間值RLPS 值、小概率狀態(tài)transIdxLps 以及比特流左移的位數(shù)。最后,根據(jù)這些數(shù)據(jù)和當(dāng)前ivlOffset 值一起解碼出1 bit 的二進(jìn)制值binVal,將更新后的上下文變量valMps、pStateIdx 合并為上下文模型,回寫到上下文存儲器中。同時(shí),區(qū)間大小ivlCurrRange 和ivlOffset 進(jìn)行重整歸一化處理,即ivlCurrRange 向左移位,ivlOffset 向左移動位并與輸入的比特流相加得到更新后的偏移量ivlOffset,始終保證ivlCurrRange 的值大于等于256。

圖2 常規(guī)算術(shù)解碼算法流程圖

與邏輯復(fù)雜的常規(guī)算術(shù)解碼模塊不同,旁路解碼模塊適用于解碼近似均勻分布的語法元素,無需上下文建模,從碼流控制模塊直接過渡至旁路解碼模塊。圖3 為旁路解碼算法流程圖。這個(gè)過程的輸入是位流、偏移量和區(qū)間范圍,輸出是解碼bin 值、偏移量和區(qū)間范圍的更新值。當(dāng)終止解碼模塊只用于解碼少數(shù)語法元素,如Slice 解碼結(jié)束標(biāo)志,執(zhí)行的終端解碼過程。終端解碼的流程如圖4 所示。

圖3 旁路解碼算法流程圖

圖4 終止解碼算法流程圖

2 多路并行流水線實(shí)現(xiàn)結(jié)構(gòu)

針對傳統(tǒng)CABAC 解碼器吞吐量穩(wěn)定性較差的問題,提出一種流水線結(jié)構(gòu),如圖5 所示。根據(jù)H.265/HEVC 碼流的特性,對二值化解碼器部分進(jìn)行了優(yōu)化。其中,不同種類的二值化解碼為并行運(yùn)算,在調(diào)用頻率最高的常規(guī)算術(shù)解碼模塊內(nèi)部也采用了并行優(yōu)化。考慮到在HEVC 解碼器中CABAC 熵解碼模塊是首先接收比特流的模塊,因此輸入端采用串行輸入。

圖5 CABAC 解碼器流水線架構(gòu)圖

完整的CABAC 解碼器總體為3 級流水線設(shè)計(jì),首先第1 級流水線中比特流經(jīng)過語法元素狀態(tài)機(jī),通過解析不同語法元素所需要經(jīng)過的不同數(shù)據(jù)通路,輸出各個(gè)解碼模塊所需使能信號;第2 級流水線中上下文狀態(tài)機(jī)通過判別上一級流水線收到的使能信號建立特定的上下文索引寄存器,對應(yīng)的語法元素與初始化信息一并存儲在上下文模型存儲器中,這也是在后續(xù)解碼過程中存儲上下文更新模型的地方,這一模塊將準(zhǔn)備好的使能信號、上下文模型與slice data 送入狀態(tài)選擇器;第3 級流水線為解碼器中的解碼部分,解碼出二進(jìn)制的語法元素值binVal 后傳入語法元素各自所在的模塊中進(jìn)行去歸一化(De-Binarization,DB)。其中常規(guī)算術(shù)解碼根據(jù)不同的語法元素的上下文建模大小并行為5路,減少了CABAC 解碼過程中的不同大小的語法元素之間的寄存器等待。采用流水線的設(shè)計(jì),減少了語法元素的解碼延時(shí),提高了硬件資源的利用率。

由于常規(guī)算術(shù)解碼算法中各模塊之間相關(guān)性很強(qiáng),且不同的語法元素所需的上下文建模存儲位寬不同,為提高該模塊的吞吐量,提出一種基于上下文模型位寬的并行硬件結(jié)構(gòu),如圖6 所示。

圖6 基于上下文模型位寬的5 路并行結(jié)構(gòu)

根據(jù)不同類型語法元素所需上下文建模位寬的不同,將常規(guī)算術(shù)解碼分組并行為5路,分組為樣值自適應(yīng)偏移組、編碼單元組、預(yù)測矢量組、殘差系數(shù)組、sig,在不同組模塊內(nèi)完成上下文模型讀取與上下文模型更新,解碼計(jì)算模塊在模塊內(nèi)單獨(dú)進(jìn)行例化。通過整體流水線結(jié)構(gòu)中第2 級流水線中輸出的控制信號控制不同組的解碼流程。其中單路常規(guī)算術(shù)解碼硬件結(jié)構(gòu)如圖5 所示,結(jié)合stage2 重歸一化環(huán)節(jié)的判斷左移并補(bǔ)位的結(jié)構(gòu),本模塊輸入裁切為當(dāng)前碼流的高5 位。在stage1中,各組需要通過查表進(jìn)行概率狀態(tài)轉(zhuǎn)移和概率區(qū)間的讀取,狀態(tài)轉(zhuǎn)換數(shù)據(jù)沒有規(guī)律,為了提高吞吐量,在硬件設(shè)計(jì)時(shí)使用LUT 預(yù)存儲需要更新的數(shù)值。在stage2中,根據(jù)硬件特性,將原本的比較結(jié)構(gòu)改為移位判斷選擇器結(jié)構(gòu),通過直接判決ivlCurrRange 最高位,減少了關(guān)鍵路徑,增加了吞吐量。

3 FPGA 實(shí)現(xiàn)與性能驗(yàn)證

整體的硬件實(shí)現(xiàn)整體結(jié)構(gòu)如圖7 所示,算術(shù)解碼模塊、旁路解碼模塊和終止解碼模塊的硬件實(shí)現(xiàn)如圖8~圖10 所示。

圖7 提出的CABAC 解碼器硬件架構(gòu)圖

圖8 單路常規(guī)算術(shù)解碼硬件實(shí)現(xiàn)

圖9 旁路解碼硬件結(jié)構(gòu)

圖10 終止解碼硬件結(jié)構(gòu)

單路常規(guī)算術(shù)解碼模塊輸入的rbsp 為高5位,結(jié)合重歸一化部分的判斷后左移讀取位流補(bǔ)位的結(jié)構(gòu),因此輸入舍棄了低3 位。在stage1中,最重要的步驟是通過查表進(jìn)行狀態(tài)的轉(zhuǎn)移和ivlLpsRange 的讀取,因?yàn)楸碇袛?shù)據(jù)沒有規(guī)律,無法進(jìn)行邏輯推導(dǎo),因此在設(shè)計(jì)時(shí)使用兩個(gè)LUT 預(yù)存需要更新的數(shù)值。在stage2中,通過優(yōu)化原始的比較大小改進(jìn)為逐位判斷選擇器結(jié)構(gòu),ivl-CurrRange[8]等于1時(shí),ivlCurrRange 必大于256。在硬件電路中減少判斷所需的路徑,提升了吞吐量。

旁路解碼模塊與終止解碼模塊結(jié)構(gòu)較簡單,其中兩模塊輸入均為1位,旁路解碼整個(gè)過程區(qū)間值保持不變,首先對ivlOffset 偏移量左移1位,同時(shí)從比特流中讀取1 位用以補(bǔ)位,然后進(jìn)行判斷,輸出二進(jìn)制的語法元素值和更新后的ivlOffset。終止解碼直接對偏移量與區(qū)間范圍進(jìn)行比較,判別是否進(jìn)行常規(guī)算術(shù)解碼中相同的重歸一化并輸出bin 值。

為了驗(yàn)證所提出的熵解碼分組多路并行流水線結(jié)構(gòu),基于FPGA 進(jìn)行了實(shí)現(xiàn)和性能評估驗(yàn)證,電路結(jié)構(gòu)采用Verilog HDL 設(shè)計(jì),在XC7Z035-FFG676-2 芯片上綜合通過,使用ModelSim 進(jìn)行仿真,并與HM16.19 測試平臺中的結(jié)果進(jìn)行比較,結(jié)果一致,證明本文設(shè)計(jì)的正確性。如圖11 所示,首先對應(yīng)語法元素所在分組的使能信號拉高,驅(qū)動該解碼模塊工作,輸出更新的區(qū)間值和偏移量,結(jié)束常規(guī)算術(shù)解碼的程序后,該使能信號重新拉低,旁路解碼的使能信號拉高輸出更新的偏移量。本設(shè)計(jì)中偏移量和區(qū)間值的更新均延后了一個(gè)時(shí)鐘周期進(jìn)行。

圖11 ModelSim 仿真圖

本設(shè)計(jì)所占用的資源如圖12 所示,與同類工作的對比如表1 所示。通過對比可知,本設(shè)計(jì)在減少板上資源的情況下,提高了每周期輸出的語法元素?cái)?shù)量。

表1 同類工作性能對比

圖12 硬件資源消耗

4 結(jié)論

本文提出了一種基于H.265 的CABAC 解碼的硬件設(shè)計(jì),由于CABAC 解碼過程中有極高的數(shù)據(jù)依賴性,在解碼過程中十分消耗時(shí)間。因此,通過分析并優(yōu)化CABAC 解碼過程中運(yùn)行占比最高的常規(guī)算術(shù)解碼模塊,根據(jù)不同的語法元素的上下文模型,分組并行處理常規(guī)算術(shù)解碼,提高了該模塊的工作效率。系統(tǒng)采用Verilog 語言進(jìn)行設(shè)計(jì),經(jīng)過綜合、仿真驗(yàn)證,證明了該模塊工作的正確性。通過與同類工作對比,本工作在邏輯面積的使用上進(jìn)行了優(yōu)化,減少了寄存器的使用,增加了整體的解碼效率。

猜你喜歡
算術(shù)解碼器流水線
Gen Z Migrant Workers Are Leaving the Assembly Line
科學(xué)解碼器(一)
科學(xué)解碼器(二)
科學(xué)解碼器(三)
流水線
線圣AudioQuest 發(fā)布第三代Dragonfly Cobalt藍(lán)蜻蜓解碼器
算算術(shù)
學(xué)算術(shù)
小狗算算術(shù)
報(bào)廢汽車拆解半自動流水線研究
新密市| 武隆县| 格尔木市| 瑞丽市| 郓城县| 松原市| 乐昌市| 乌拉特前旗| 宁化县| 达孜县| 元江| 凤台县| 日土县| 大兴区| 巧家县| 松滋市| 灯塔市| 定安县| 满城县| 普陀区| 涡阳县| 平原县| 鄢陵县| 启东市| 乐陵市| 昌邑市| 泰州市| 正定县| 仁怀市| 东阿县| 兴化市| 博湖县| 乐昌市| 庄河市| 合山市| 辽阳市| 宜阳县| 永寿县| 望都县| 滦平县| 金门县|