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

?

一種高效的CABAC熵編碼硬件設(shè)計(jì)

2020-04-07 06:11:10鄭明魁陳志峰施隆照
關(guān)鍵詞:碼流算術(shù)流水線

傅 晨,鄭明魁,陳志峰,施隆照,王 炎

(福州大學(xué)物理與信息工程學(xué)院,福建 福州 350108)

0 引言

視頻信息是人與人之間聯(lián)系的重要媒介,數(shù)字電視、視頻監(jiān)控、行車記錄等各種視頻系統(tǒng)成為現(xiàn)代各個(gè)行業(yè)和信息化建設(shè)領(lǐng)域的重點(diǎn).視頻編碼聯(lián)合組[1](joint collaborative team on video coding,JCT-VC)于2010年提出了新一代高效率視頻編碼標(biāo)準(zhǔn)H.265/HEVC,并在2013年正式成為國際標(biāo)準(zhǔn).與前一代視頻編碼標(biāo)準(zhǔn)H.264/AVC相比,使用諸如四叉樹的CTU劃分[2]和更高效的熵編碼[3]等新技術(shù),HEVC在相同視頻質(zhì)量下可節(jié)省約50%的視頻碼流,但是其復(fù)雜度也成倍增加[4],這嚴(yán)重阻礙了其在各個(gè)領(lǐng)域的快速應(yīng)用.并且HEVC熵編碼模塊只保留了復(fù)雜度較高且編碼過程具有前后數(shù)據(jù)依賴關(guān)系的CABAC作為唯一的編碼方式,同時(shí)還要求CABAC處理更多且更為復(fù)雜的語法元素及殘差數(shù)據(jù),這給CABAC的硬件實(shí)現(xiàn)提出了更高的要求[5-6].

近年來涌現(xiàn)出許多對(duì)優(yōu)化熵編碼硬件的研究: 文[7-9]提出流水線CABAC編碼器架構(gòu)和降低資源消耗、提高吞吐率的方案;文[10]提出多路并行方式的CABAC架構(gòu)設(shè)計(jì);文[11-13]從算法層面上提出一些方案用以優(yōu)化編解碼器架構(gòu),提高編碼效率.但是對(duì)于流水線的CABAC編碼器架構(gòu),上述文獻(xiàn)并沒有解釋如何應(yīng)對(duì)一些難以連續(xù)流水線作業(yè)的特殊情況,例如處理連續(xù)相同上下文模型的語法元素時(shí),因?yàn)樯舷挛男枰露斐傻碾y以完全流水這種情況.一些文獻(xiàn)雖然提出了如何提高熵編碼模塊的編碼效率,但是對(duì)于輸入輸出部分還可以進(jìn)一步優(yōu)化.對(duì)于CABAC的并行化架構(gòu),雖然可顯著提高吞吐率,但是相應(yīng)的硬件資源消耗也會(huì)變大.

通過優(yōu)化架構(gòu),CABAC編碼器在吞吐率方面有很大的進(jìn)步,但是以往的研究存在難以實(shí)現(xiàn)完全流水或者硬件資源消耗較大的問題,并且熵編碼部分與其他模塊的接口數(shù)據(jù)格式還可以進(jìn)一步優(yōu)化.本設(shè)計(jì)從熵編碼硬件實(shí)現(xiàn)出發(fā),對(duì)硬件面積、主頻和編碼器吞吐率方面展開研究,在輸入輸出方式和算術(shù)編碼的流水線實(shí)現(xiàn)進(jìn)行優(yōu)化,以此提高整體編碼效率和吞吐率、降低硬件資源消耗.

1 HEVC與熵編碼原理

H.265/HEVC作為新一代視頻編碼標(biāo)準(zhǔn),整體編碼框架與H.264/AVC類似,通過幀內(nèi)幀間預(yù)測(cè)去除視頻圖像內(nèi)的空域和時(shí)域冗余;采用變換量化將空間域的圖像變換到頻域,得到相關(guān)性較小的變換系數(shù);使用濾波器提高壓縮率,減小碼流;最后經(jīng)過熵編碼將視頻序列中的元素符號(hào)進(jìn)行無損壓縮得到最終碼流.熵編碼作為視頻壓縮系統(tǒng)的最后一步,基于統(tǒng)計(jì)屬性將數(shù)據(jù)壓縮到接近其熵的大小,是保證視頻壓縮效率的重要工具.

圖1 CABAC編碼器框架結(jié)構(gòu)圖Fig.1 CABAC encoder structure diagram

圖2 常規(guī)編碼流程圖Fig.2 Flowchart of regular coding mode

熵編碼模塊的基本框架結(jié)構(gòu)如圖1所示,包括三個(gè)基礎(chǔ)步驟,分別是二值化、上下文建模和二進(jìn)制算術(shù)編碼.其中二值化是將給定的非二進(jìn)制語法元素例如殘差系數(shù)和運(yùn)動(dòng)矢量等映射為一串二進(jìn)制符號(hào)(bin)序列,使用的方法包括定長二值化(Fixed-Length,FL)、截?cái)嘁辉a(Truncated Unary,TU)、截?cái)嗳R斯二值化(Truncated Rice,TR)和K階指數(shù)哥倫布二值化(Exp-Golomb,EGK)等.通過先前編碼的語法元素或Bin來估計(jì)當(dāng)前Bin的概率,這個(gè)步驟稱為上下文建模,通過動(dòng)態(tài)更新一個(gè)存儲(chǔ)著按類劃分概率值的上下文表來實(shí)現(xiàn).為降低復(fù)雜度,概率值是通過一組0~63的離散狀態(tài)值表示的,同時(shí)還有一個(gè)指示位指定大概率符號(hào)(most probable symbol,MPS)是0還是1,和MPS相反的即是小概率符號(hào)(least probable symbol,LPS).二進(jìn)制算術(shù)編碼這一步驟將bin組成的序列轉(zhuǎn)換為最終的碼流.其算法包括常規(guī)編碼和旁路編碼兩種方式,且都是基于遞歸區(qū)間劃分的方式,在遞歸過程中保存編碼區(qū)間(range)和區(qū)間下限(low).其中常規(guī)編碼方式是利用自適應(yīng)的概率模型進(jìn)行編碼,較為復(fù)雜且使用較多,需要不斷的通過讀寫概率狀態(tài)表(transIdx)更新概率狀態(tài);旁路編碼則是使用等概率的方式進(jìn)行算術(shù)編碼,概率狀態(tài)無需更新[14].

常規(guī)編碼的流程圖如圖2所示.為降低復(fù)雜度,在傳統(tǒng)的算術(shù)編碼基礎(chǔ)上引入查表代替運(yùn)算中概率更新的乘法,即根據(jù)當(dāng)前的概率狀態(tài)索引σ和range的量化值ρ,通過查表得到LPS對(duì)應(yīng)的子區(qū)間RLps,通過range減去RLps得到當(dāng)前MPS的子區(qū)間RMps.若當(dāng)前二進(jìn)制符號(hào)是MPS則將RMps作為下一個(gè)二元符號(hào)的編碼區(qū)間range,區(qū)間下限low不變;若當(dāng)前的符號(hào)為LPS,則LPS的區(qū)間RLps作為下一個(gè)二元符號(hào)的編碼區(qū)間range,區(qū)間下限L要增加RMps.更新low和range的同時(shí),由σ和MPS組成的上下文模型也會(huì)相應(yīng)更新.經(jīng)過區(qū)間劃分后得到的新的編碼區(qū)間長度可能不在[28,29]之內(nèi),則需要重歸一化過程將碼流輸出,同時(shí)更新range直至不小于28,low也做相對(duì)應(yīng)的移位.

2 CABAC硬件框架與輸入模塊優(yōu)化

2.1 CABAC整體硬件結(jié)構(gòu)設(shè)計(jì)

如上節(jié)所述,熵編碼的數(shù)據(jù)處理主要分成二值化、上下文建模和二進(jìn)制算術(shù)編碼三個(gè)部分,且每個(gè)部分?jǐn)?shù)據(jù)處理的工作較為獨(dú)立.由于每部分對(duì)數(shù)據(jù)的處理方式不同,交互的數(shù)據(jù)需要一個(gè)合理且高效的格式,并且各個(gè)部分內(nèi)部也需要進(jìn)行優(yōu)化,達(dá)到一個(gè)整體高兼容且高吞吐率的效果.所以本設(shè)計(jì)使用了四路循環(huán)緩存輸入、二值化PISO(parallel in serial out)輸出、多路并行二值化架構(gòu)、上下文模型初始化的ROM數(shù)據(jù)讀取和模型RAM更新、算術(shù)編碼PISO輸出等方式來提高整體架構(gòu)的容錯(cuò)和吞吐率.

圖3 CABAC硬件結(jié)構(gòu)示意圖Fig.3 Architecture schematic diagram of CABAC

根據(jù)HEVC的參考軟件HM16.7的算法,提出熵編碼模塊硬件架構(gòu)如圖3所示.該架構(gòu)主要分為3個(gè)部分: 數(shù)據(jù)輸入及二值化部分、上下文建模部分和算術(shù)編碼及碼流輸出部分.本模塊的輸入數(shù)據(jù)由視頻編碼的率失真優(yōu)化模塊和重構(gòu)模塊通過RAMS傳輸,輸入的數(shù)據(jù)通過二值化模塊變成需要編碼的Bin,并且同時(shí)將編碼類型、上下文模型索引等數(shù)據(jù)一并傳入PISO中,通過PISO傳入算術(shù)編碼模塊.上下文模型通過初始化模塊寫入雙端口RAM中,并在編碼時(shí)不斷地對(duì)RAM中的概率模型進(jìn)行更新.算術(shù)編碼模塊同時(shí)包含了常規(guī)編碼,旁路編碼和終止編碼,編碼完成后的碼流通過PISO模塊進(jìn)行緩沖后最終輸出.

通過使用RAMS存放熵編碼模塊與其他模塊之間的交互數(shù)據(jù),可以有效地將各模塊分開并獨(dú)立運(yùn)行,并且因?yàn)檩斎霐?shù)據(jù)是由不同模塊寫入的,可以實(shí)現(xiàn)各部分并行處理,降低整體架構(gòu)的時(shí)延.因?yàn)檩斎霐?shù)據(jù)可以并行讀取,所以二值化模塊可以適當(dāng)并行處理語法元素,進(jìn)一步降低時(shí)延,處理好的數(shù)據(jù)會(huì)按順序放入PISO模塊之中,可以有效減少熵編碼時(shí)鐘周期數(shù),再通過1個(gè)clk輸出一個(gè)Bin的模式將數(shù)據(jù)傳輸?shù)搅魉鳂I(yè)的算術(shù)編碼模塊.因?yàn)榇a流是按照字節(jié)輸出的,并且在輸出碼流時(shí)會(huì)由于進(jìn)位的問題造成1個(gè)clk輸出多字節(jié)數(shù)據(jù),所以可以通過一個(gè)簡易的并入串出模塊來高效輸出碼流,實(shí)現(xiàn)整個(gè)算術(shù)編碼模塊的完全流水.

2.2 熵編碼四路循環(huán)緩存輸入及高效殘差系數(shù)傳輸

圖4 四路循環(huán)緩存輸入Fig.4 Quad loop buffer input

在視頻編碼中,熵編碼模塊的前置模塊數(shù)據(jù)處理速度和本模塊的數(shù)據(jù)處理速度會(huì)有不同,并且由于熵編碼模塊難以并行,在整個(gè)視頻編碼是流水作業(yè)的條件下,為了不讓編碼過程擁堵在熵編碼模塊導(dǎo)致整個(gè)編碼器的停滯,同時(shí)為降低編碼器的時(shí)延,采用了如圖4所示的數(shù)據(jù)輸入結(jié)構(gòu),通過四路的RAMS將需要熵編碼的數(shù)據(jù)進(jìn)行循環(huán)緩存,每路RAMS保存一個(gè)CTU(coding tree unit)的全部數(shù)據(jù),這樣可以有效降低視頻編碼各模塊之間的依賴性.其中輸入數(shù)據(jù)存儲(chǔ)的RAMS,包括Depth_RAM(包含CU深度、TU深度及PU模式等信息)、Intra_PU_RAM(包含亮度、色度方向)、Inter_PU_RAM(包含merge和amvp的相關(guān)信息)、Neighbor_RAM(包含當(dāng)前CTU上側(cè)和左側(cè)CTU的相關(guān)信息)和Residues_RAM(包含殘差數(shù)據(jù))等.

圖5 CABAC殘差數(shù)據(jù)存儲(chǔ)示意圖Fig.5 CABAC residual data storage diagram

編碼數(shù)據(jù)中最繁瑣的是殘差數(shù)據(jù),因?yàn)椴粌H數(shù)據(jù)總量大,而且傳輸形式既需要考慮變換量化模塊的系數(shù)輸出方式,又要考慮熵編碼模塊的數(shù)據(jù)使用方式.對(duì)于變換量化模塊,殘差系數(shù)都是通過矩陣變換得到的,其系數(shù)多為通過行或列的方式進(jìn)行輸出,熵編碼模塊處理殘差數(shù)據(jù)時(shí),以CG塊(4×4大小的殘差塊)為最小單元進(jìn)行編碼,所以設(shè)計(jì)了如圖5所示的殘差數(shù)據(jù)存儲(chǔ)方式,可以很好地解決這個(gè)問題.將一個(gè)CTU(64×64)塊的殘差數(shù)據(jù)進(jìn)行拆分后放入16個(gè)RAM中,其中每個(gè)地址存放4個(gè)殘差系數(shù),因?yàn)槊總€(gè)殘差系數(shù)16位,所以RAM的存儲(chǔ)寬度為64位,存儲(chǔ)深度為8位.這樣對(duì)于變換模塊可以很方便地按行存儲(chǔ),同時(shí)熵編碼模塊可以4個(gè)周期讀取數(shù)個(gè)CG的殘差系數(shù),提高效率.

2.3 多路并行二值化架構(gòu)

圖6 二值化結(jié)構(gòu)框架Fig.6 Architecture of the binarization

輸入的語法元素及殘差數(shù)據(jù)通過部分并行架構(gòu)進(jìn)行二值化[15],根據(jù)對(duì)應(yīng)數(shù)據(jù)類型得到bin字符串和其上下文模型索引.在HEVC中大多語法元素使用的二值化方案為截?cái)嘁辉a(TU)、截?cái)嗳R斯碼(TR)、K階指數(shù)哥倫布編碼(EGK)和定長碼(FL).其余的語法元素使用各自對(duì)應(yīng)的自定義二值化方案(Custom).因?yàn)槎祷歉鱾€(gè)語法元素分別做各自的,并且不是整個(gè)架構(gòu)的瓶頸,原則上只需要這部分的平均處理能力在任何情況下都高于算術(shù)編碼部分,即可滿足整個(gè)架構(gòu)的流暢高效.

為滿足上述目標(biāo),本設(shè)計(jì)采用兩級(jí)二值化方案,如圖6所示.每一個(gè)Level支持4種二值化方案,并且與自定義二值化方案(Custom)三者相互獨(dú)立,所以在一個(gè)周期內(nèi)最多可輸入3個(gè)語法元素.并且二值化后的每個(gè)數(shù)據(jù)都包含當(dāng)前bin的數(shù)據(jù)、編碼類型和上下文模型索引,一同輸入到PISO模塊中,同時(shí)PISO模塊將數(shù)據(jù)按順序,以每周期1個(gè)bin的頻率,傳入算術(shù)編碼模塊和上下文模型模塊,實(shí)現(xiàn)整個(gè)熵編碼模塊的流水作業(yè).

2.4 上下文模型初始化的ROM讀取和模型RAM更新

圖7 上下文建??蚣蹻ig.7 Architecture of the context modeling

因?yàn)檎Z法元素對(duì)應(yīng)的上下文模型初始值并不是固定的,所以在開始熵編碼之前需要根據(jù)QP值、Slice類型等參數(shù)計(jì)算出需要的語法元素的概率模型,以適配不同情況下語法元素概率之間的差異.設(shè)計(jì)了如圖7所示的架構(gòu),更多利用memory資源,可以有效減小邏輯資源的消耗.上下文模型初始化首先需要給每一個(gè)上下文模型分配一個(gè)固定的初始值用于計(jì)算概率,于是將三種類型: I幀(134個(gè)初始值)、B幀(154個(gè)初始值)、P幀(154個(gè)初始值)中的各個(gè)語法元素初始值存放于對(duì)應(yīng)的ROM中,再通過初始化模塊讀取計(jì)算得到最終上下文模型,并寫入雙端口CM_RAM(8位深度,7位寬度)中.最終所有的初始模型都存放在CM_RAM中,然后由后續(xù)的算術(shù)編碼模塊不斷地對(duì)此RAM中的概率模型進(jìn)行取值和更新.

3 算術(shù)編碼模塊優(yōu)化

3.1 算術(shù)編碼模塊實(shí)現(xiàn)的瓶頸

算術(shù)編碼的特點(diǎn)之一就是每次編碼的bin都需要根據(jù)先前編碼的概率區(qū)間值以及當(dāng)前的大概率符號(hào)(MPS)來確定,這就導(dǎo)致了編碼的數(shù)據(jù)之間存在著嚴(yán)格的前后依賴性,使硬件實(shí)現(xiàn)的編碼效率很難提高.雖然編碼的算法涉及很多的乘法運(yùn)算,但大多都將計(jì)算過程簡化成查表,而且如前所述,上下文模型更新、range的計(jì)算、low的計(jì)算和歸一化過程都是層級(jí)進(jìn)行的,這就給整個(gè)編碼過程提供了流水線運(yùn)算的可行性.但當(dāng)面臨一些特殊情況時(shí)就難以實(shí)現(xiàn)流水運(yùn)算,例如對(duì)相同上下文模型的語法元素進(jìn)行連續(xù)的算術(shù)編碼時(shí),由于更新上下文模型需要1個(gè)clk,并且RAM數(shù)據(jù)的讀寫也都會(huì)占用1個(gè)clk,導(dǎo)致后一個(gè)語法元素?zé)o法在相鄰時(shí)鐘周期從CM_RAM中讀取到還未寫入更新后的上下文模型;又如在碼流輸出階段,由于進(jìn)位的原因?qū)е驴赡?個(gè)clk需要輸出多byte的碼流,而穩(wěn)定的碼流輸出是1byte/clk.對(duì)于整個(gè)編碼過程的流水實(shí)現(xiàn),以及應(yīng)對(duì)這些難以流水實(shí)現(xiàn)的特殊情況,本設(shè)計(jì)可以實(shí)現(xiàn)完全流水并且實(shí)現(xiàn)低資源和高主頻的特性.

3.2 設(shè)計(jì)優(yōu)化

圖8 常規(guī)編碼硬件架構(gòu)Fig.8 Hardware architecture of regular coding modemodeling

本設(shè)計(jì)是在前人的基礎(chǔ)上通過預(yù)取上下文模型索引、預(yù)歸一化及碼流并入串出模塊進(jìn)行優(yōu)化,以提高主頻和吞吐率,降低資源消耗.整個(gè)算術(shù)編碼模塊被設(shè)計(jì)成如圖8所示的六級(jí)流水線模式,這樣的流水線劃分方式可以有效地將關(guān)鍵路徑延遲降低,并且由于上下文模型的更新操作是整個(gè)算術(shù)編碼bin與bin之間強(qiáng)依賴關(guān)系的瓶頸,本設(shè)計(jì)可以有效地將這種依賴關(guān)系減緩到實(shí)現(xiàn)完全流水,代價(jià)只是在流水線上增加了1個(gè)clk和一些邏輯資源.碼流輸出模塊也進(jìn)行了設(shè)計(jì)和優(yōu)化,用以實(shí)現(xiàn)整個(gè)模塊的完全流水與穩(wěn)定的碼流輸出.

流水線的第0級(jí)實(shí)現(xiàn)的是數(shù)據(jù)的準(zhǔn)備工作,上下文模型索引、bin值以及編碼類型的數(shù)據(jù)都是通過PISO模塊最多每周期1組得到的,首先將上下文模型索引(CM_model_index)輸入給CM_RAM得到上下文概率模型,然后將模型及bin值、編碼類型等數(shù)據(jù)同時(shí)傳入流水線的第1級(jí),使流水線下一級(jí)可以同時(shí)得到所有需要的數(shù)據(jù).

第1級(jí)流水線則是同時(shí)做2個(gè)工作: 1) range和歸一化的預(yù)查表.對(duì)于range的更新需要2個(gè)步驟,首先是根據(jù)當(dāng)前的range高兩位和上下文模型中的σ查表得到RLps,然后通過計(jì)算得到新的range,對(duì)于歸一化則是要根據(jù)RLps得到歸一化參數(shù),于是本設(shè)計(jì)提出只在第1級(jí)流水線上通過上下文模型的σ進(jìn)行range及歸一化的同時(shí)預(yù)查表,這樣可以有效地將查表過程和計(jì)算過程分開,降低關(guān)鍵路徑延遲,提高系統(tǒng)主頻;2) 上下文模型的更新.根據(jù)上下文模型和輸入bin值是否為MPS這兩個(gè)條件,在概率狀態(tài)表中查找出更新后的上下文模型,同時(shí)將其再存儲(chǔ)到CM_RAM中實(shí)現(xiàn)更新.如果連續(xù)的多個(gè)時(shí)鐘周期使用同一個(gè)上下文模型,由于RAM的讀寫都需要消耗1個(gè)時(shí)鐘周期,后置的上下文模型無法在相鄰時(shí)鐘周期讀取到前置更新后寫入的數(shù)據(jù),也就無法實(shí)現(xiàn)完全流水,于是提出預(yù)讀取上下文模型索引的方法來解決這個(gè)特殊情況,提高吞吐率.實(shí)現(xiàn)方法就是將CM_model_index在每次傳輸時(shí)進(jìn)行緩存,在當(dāng)前周期輸入給CM_RAM的CM_model_index與上一周期傳輸?shù)闹迪嗤瑫r(shí),則通過Sam_index信號(hào)直接傳給流水線的第1級(jí),上下文模型直接通過內(nèi)部的CM_update模塊獲取上一時(shí)鐘周期更新后的模型,不再通過CM_RAM獲取,去除模型在RAM中的讀寫時(shí)間消耗,只通過少量的資源消耗和流水線多1個(gè)clk就可以實(shí)現(xiàn)整個(gè)模塊對(duì)于所有輸入數(shù)據(jù)情況的完全流水.

接下來分別在流水線的第2級(jí)和第3級(jí)更新Range和Low,這是為了把計(jì)算過程分開,將關(guān)鍵路徑延遲降低.當(dāng)Low更新結(jié)束后則需要進(jìn)行歸一化處理,就是將Low更新后溢出的數(shù)據(jù)形成碼流,由于溢出比特中可能包含進(jìn)位,為了保證進(jìn)位不丟失,在比特生成階段緩存有可能進(jìn)位的數(shù)據(jù),于是設(shè)計(jì)了第4級(jí)的流水線比特生成模塊.本模塊可以將Low的溢出數(shù)據(jù)進(jìn)行緩存整合,因?yàn)槿绻嬖谶M(jìn)位,則有可能在同1個(gè)周期輸出多字節(jié)的碼流,于是當(dāng)確定是否進(jìn)位后將可以將輸出的碼流按照字節(jié)的形式同時(shí)輸出到BitStream PISO中,再通過簡易的PISO模塊使最終輸出的碼流在特殊情況下也可以是1周期輸出1字節(jié),讓整個(gè)流水線可以適應(yīng)所有的情況.

4 測(cè)試與仿真

本研究提出的CABAC架構(gòu)設(shè)計(jì)已通過VerilogRTL實(shí)現(xiàn),并且基于官方參考軟件HM16.7進(jìn)行功能驗(yàn)證.首先將HM16.7執(zhí)行中的熵編碼模塊的輸入輸出數(shù)據(jù)打印出來,然后將輸入數(shù)據(jù)傳至本設(shè)計(jì),最后對(duì)比輸出數(shù)據(jù)是否一致即可驗(yàn)證模塊功能是否正確.經(jīng)過包含不同分辨率、不同QP的多個(gè)視頻序列測(cè)試,本設(shè)計(jì)的電路功能正確.本設(shè)計(jì)架構(gòu)包含了熵編碼的所有模塊,提出的四路循環(huán)緩存輸入、上下文模型索引預(yù)讀取、預(yù)歸一化查表和并入串出碼流輸出模塊可以在少量資源增加的情況下實(shí)現(xiàn)完全流水,提高平均吞吐率.

采用SMIC 90 nm工藝,在Synopsys Design Compiler下綜合,綜合結(jié)果為總邏輯門數(shù)43.49 K,最高工作頻率370 MHz,最大吞吐率370 Mbin·s-1.該結(jié)果與其他同類型文獻(xiàn)進(jìn)行比對(duì)的結(jié)果如表1所示.

表1 仿真結(jié)果

注: *該值為二值化模塊和上下文建模模塊的邏輯門數(shù)之和.

文[7]也對(duì)整體熵編碼過程進(jìn)行了流水實(shí)現(xiàn),為提高視頻編碼器的編碼效率,本設(shè)計(jì)采用四路循環(huán)緩存輸入方式及多路并行二值化方案,導(dǎo)致二值化和上下文建模模塊的總電路門數(shù)多了約11.48%,但本設(shè)計(jì)對(duì)算術(shù)編碼模塊進(jìn)行了大量優(yōu)化,使整體門數(shù)小于對(duì)應(yīng)文獻(xiàn),并且實(shí)現(xiàn)了更為高效的熵編碼模塊.文[9]的吞吐率會(huì)根據(jù)輸入數(shù)據(jù)的不同而產(chǎn)生變化,有可能導(dǎo)致無法實(shí)現(xiàn)完全流水,而本設(shè)計(jì)可以應(yīng)對(duì)所有輸入情況,實(shí)現(xiàn)真正意義上的流水線,在總體門數(shù)上也節(jié)約了11.14%.文[10]針對(duì)熵編碼的算術(shù)編碼部分進(jìn)行優(yōu)化并實(shí)現(xiàn)了高吞吐率的多路并行架構(gòu),但是其代價(jià)是消耗了更多的硬件資源,相較于本設(shè)計(jì)其電路門數(shù)增加了約47.39%.

本設(shè)計(jì)嚴(yán)格按照HEVC編碼標(biāo)準(zhǔn)進(jìn)行設(shè)計(jì)及測(cè)試,因熵編碼為無損壓縮,所以對(duì)于編碼器性能不會(huì)造成損失,相比于其他論文的設(shè)計(jì),其可以實(shí)現(xiàn)完全流水線,并且有著較高主頻,較低資源消耗的優(yōu)勢(shì).并且在此基礎(chǔ)上通過FPGA開發(fā)板進(jìn)行了上板測(cè)試,已通過整個(gè)視頻編碼器的聯(lián)調(diào),可以實(shí)現(xiàn)1080 P視頻數(shù)據(jù)30幀·s-1的實(shí)時(shí)編解碼.

5 結(jié)語

由于視頻編碼標(biāo)準(zhǔn)HEVC復(fù)雜度的提高,熵編碼過程的硬件實(shí)現(xiàn)也成為高清視頻實(shí)時(shí)編碼的瓶頸之一.為實(shí)現(xiàn)熵編碼過程的高吞吐率,提出一種高效率流水線架構(gòu)的HEVC CABAC編碼器.本編碼器不僅包含二值化、上下文建模和算術(shù)編碼模塊的實(shí)現(xiàn),還通過四路循環(huán)緩存輸入和碼流并入串出結(jié)構(gòu)提高編碼器的效率,使用上下文模型初始化的ROM讀取和模型RAM更新降低邏輯資源使用,通過預(yù)讀取上下文模型索引、預(yù)歸一化和六級(jí)流水線方案實(shí)現(xiàn)編碼器的完全流水并提高主頻.整個(gè)編碼器采用SMIC 90 nm標(biāo)準(zhǔn)單元庫進(jìn)行綜合,其包括內(nèi)存在內(nèi)的總電路門數(shù)為43.49×103,最高頻率為370 MHz,最大編碼吞吐率為370 Mbin·s-1.并且經(jīng)過和其他模塊聯(lián)合測(cè)試,本設(shè)計(jì)可以在200 MHz以上時(shí)鐘頻率實(shí)現(xiàn)1 080 P視頻30幀·s-1的實(shí)時(shí)編解碼.

猜你喜歡
碼流算術(shù)流水線
Gen Z Migrant Workers Are Leaving the Assembly Line
分布式碼流實(shí)時(shí)監(jiān)控與錄制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
數(shù)字電視TS碼流協(xié)議簡要分析
視聽(2021年8期)2021-08-12 10:53:42
流水線
算算術(shù)
學(xué)算術(shù)
小狗算算術(shù)
報(bào)廢汽車拆解半自動(dòng)流水線研究
做算術(shù)(外一則)
讀寫算(中)(2015年12期)2015-11-07 07:25:01
一種比較ASN.1碼流差異的方法
南陵县| 夹江县| 山东省| 平潭县| 陇西县| 晋宁县| 江都市| 曲阳县| 曲松县| 河曲县| 汝州市| 安顺市| 岳阳县| 安龙县| 呼图壁县| 丹江口市| 镇远县| 洛南县| 兰坪| 大埔区| 蓝田县| 蓝山县| 成武县| 岱山县| 碌曲县| 清新县| 灵山县| 财经| 宜宾县| 辽中县| 安岳县| 广宗县| 阿拉善右旗| 阳信县| 内江市| 文安县| 安义县| 桑植县| 县级市| 横山县| 宜城市|