陳焯淼,陳志峰,陳 建,汪家華
(福州大學 物理與信息工程學院,福建 福州 350108)
當前,基于超高清視頻的多媒體娛樂需求快速增長,對視頻編碼技術提出了更高的要求。高效視頻編碼(High Efficiency Video Coding,HEVC)是視頻編碼專家組(Video Coding Experts Group,VCEG)和運動圖像專家組(Moving Picture Expert Group,MPEG)組成的視頻編碼聯合協作組(JCT-VC)共同開發的一種視頻編碼標準[1]。與現有的H.264/AVC標準相比,HEVC標準在相同的視覺質量下,降低了50%的比特率[2]。塊效應是基于塊的視頻壓縮存在的最為明顯的偽影問題,這是因為圖像塊的變換和量化是相互獨立的。為此,H.265/HEVC標準沿用了H.264/AVC標準的環路濾波技術,采用去方塊濾波器來改善主客觀視頻質量。由于必須對塊邊界附近的所有像素進行濾波,HEVC標準中的去方塊濾波算法仍然有很高的計算復雜度,約占HEVC視頻解碼器計算復雜度的20%[3]。因此,新的視頻編碼標準的硬件實現對于行業應用來說非常重要。
文獻[4]—文獻[10]中,已有學者提出了一些關于去方塊濾波硬件實現的研究工作。HSU等人提出一種新穎的內存結構和數據訪問形式,設計了一個雙行DBF濾波器[4]。TANG等人提出一種具有兩個垂直和兩個水平邊界的8×8塊的無SRAM去方塊濾波架構[5]。CHRISTOPHER等人提出一種用于去方塊濾波器的高效資源共享硬件架構。該架構利用四個邊緣濾波器并行過濾8×8塊的兩個邊緣[6]。AYADI等人針對亮度32×32編碼塊內的所有塊邊界提出了一種新的DBF硬件架構[7]。SHEN等人提出一種基于1/4LCU的隔行存儲組織來解決DF垂直和水平過濾之間的數據依賴性,并實現了去方塊濾波與SAO聯調[8]。文獻[9]設計了一個單邊緣去方塊濾波器,每幀視頻被分成32×32個塊,通過流水線的方式再將其分割成8×32個像素的塊來處理,但是大幅度增加了外部存儲帶寬。文獻[10]提出一種高通量、低功耗的DBF架構。該架構每個時鐘能夠處理64個樣本,在兩條并行數據路徑中處理亮度和色度分量。
上述一些研究工作為了追求高并行、高效率而大大增加了面積。本文重點研究一種高效的去方塊濾波器在現場可編程邏輯門陣列(Field Programmable Gate Array,FPGA)上的實現,它以極少的資源消耗,通過流水線的形式來提高工作效率;重復利用重構RAM來輸入輸出數據,按濾波順序進行濾波。經計算,處理一個最大編碼單元(Largest Coding Unit, LCU)共需要907個周期。
去方塊濾波過程共分為4個步驟,其流程如圖1所示,詳細介紹如下。

圖1 去方塊濾波流程
(1)確定濾波邊界。去方塊濾波只對8×8的PU(Prediction Unit,預測單元)或TU(Transform Unit,變換單元)塊邊界進行濾波,因此需遍歷每個CU(Coding Unit編碼單元),檢查每個CU中的8×8邊界是否是PU或者TU的邊界。每個邊界都有一個濾波標志,根據PU,TU的劃分模式,將需要濾波的邊界置為1。
(2)計算邊界強度(Boundary Strength,BS)。根據編碼參數初步判斷,邊界強度有0,1,2三種。實際濾波垂直邊界是以8×4為基本單位,水平以4×8為基本單位。根據每4×4塊的編碼參數來確定邊界的濾波強度。
(3)濾波開關決策。根據邊界兩邊像素值的變化程度判斷邊界是否需要濾波。若邊界兩邊區域像素本身就不平坦,則在邊界處像素的跳躍自然被認為正常的,因此不需要濾波。而濾波強弱選擇則根據邊界兩邊像素值的變化率來判斷濾波強度。
(4)濾波。濾波分為亮度分量的強濾波、亮度分量的弱濾波以及色度分量的濾波。亮度分量的強濾波,需對邊界兩邊各3個像素進行修正;亮度分量的弱濾波,需對邊界兩邊1~2個像素進行修正;色度分量的濾波是指,當獲取邊界強度模塊判定BS=2時,色度分量需要進行濾波操作,需對邊界兩邊各1個像素進行修正。
DBF的總體架構如圖2所示。整體可分為主控制模塊、濾波模塊及數據緩存模塊。主控模塊包括狀態機控制和地址生成模塊。其中,狀態機協調整個DBF模塊的工作過程,控制流水線的翻轉信號(Is_ver)、亮度/色度轉換信號(Is_luma)及空閑/工作狀態信號,地址生成模塊根據狀態機狀態以及計數器的計數值生成像素和編碼參數在存儲器中的地址。

圖2 去方塊濾波硬件架構
濾波模塊包括編碼參數計算、邊界強度計算、濾波決策及選擇性濾波等子模塊。其中,濾波決策子模塊根據編碼參數計算出的邊界處像素值差別的判決門限(tc)、濾波開關的判決門限(β)和邊界強度計算出的BS,判斷是否需要進行強、弱濾波,還是不濾波;選擇性濾波子模塊對來自輸入緩存(buffer)的P和Q像素塊,同時進行強濾波、弱濾波或不濾波操作。該設計的濾波順序為:亮度垂直→亮度水平→色度垂直→色度水平,并根據濾波決策結果選擇對應的濾波種類或未濾波數據輸出。
數據緩存模塊又可以分為像素緩存(data_ram)和編碼參數(param_ram)緩存。其中,data_ram用來存放像素,做完垂直濾波后的像素將重新寫回data_ram中,用于下一階段的水平濾波;param_ram用來存放編碼參數,在輸入像素的同時輸入編碼參數,用于計算閾值和邊界處像素值差別的判決門限以及邊界強度BS。
去方塊濾波架構中,邊界判斷和邊界強度計算模塊是較復雜的計算單元,在濾波數據準備好前就需要得到邊界強度的值。而由第1節內容可知,計算邊界強度前還需要確定濾波邊界,具體的電路結構如圖3所示。

圖3 邊界判斷&邊界強度計算電路結構
首先,將cu、tu和pu的劃分結構都整合到查找表中,然后根據輸入的cu_depth(cu深度)、tu_depth(tu深度)、pu_partition(pu劃分方式)和Q塊的地址來判斷該4×4塊是否有濾波邊界。值得注意的是,Q塊的邊界情況與對應的P塊是一致的,因此只需要判斷一個4×4塊的邊界情況即可。然后,根據濾波邊界結果來計算對應的BS值。對于沒有邊界的塊,BS直接置0;對于有濾波邊界的塊,還需根據P塊和Q塊對應的預測模式(pred_mode_p和pred_mode_q)、非零變換系數標志位(cbf_p和cbf_q)和運動矢量(mv_p和mv_q)來進一步計算BS的值。
以64×64的編碼樹單元(Coding Tree Unit,CTU)的DBF處理為例,數據輸入、編碼參數計算、濾波操作、數據輸出組成的四級流水線如圖4所示。去方塊的數據處理單元通常是4×4大小的P塊和Q塊,為了處理方便,每個時鐘周期讀取一個P塊或一個Q塊數據,即每個時鐘能讀取16個像素,讀取一個P塊和Q塊的數據共需要花費2個時鐘。

圖4 流水線示意圖
在讀取像素的同時讀取編碼參數,并在一個時鐘內計算得到在濾波階段所需要的參數(BS、β、tc)。在濾波階段獲取到參數之后,消耗2個時鐘得到濾波后的數據并更新到P,Q塊輸出寄存器中。由于P,Q塊輸出寄存器中的數據是同時更新,需再等待一個時鐘后寄存器的數據按輸入順序串行輸出。這樣輸入到輸出共花了5個時鐘。為了節省資源消耗,將垂直濾波后的像素根據地址生成模塊中的地址重新寫回重構RAM中,用于下一階段的水平濾波,做完水平濾波后再輸出到外部。
本文提出的DBF硬件架構是在Verilog中設計的,并使用Altera FPGA開發平臺進行綜合與時序分析。其中,選用QuartusⅡ16.1為EDA開發工具,所選擇的器件型號為Altera Arria10 10AS066N3F40E2SG。通過RTL仿真對并行體系結構進行了測試和驗證,得到了仿真結果,完全符合軟件代碼的結果。表1將實驗結果與之前的工作進行了對比。首先,所提出的硬件架構能夠達到215 MHz的工作主頻,在907個時鐘周期內實現了去方塊濾波器的所有功能。文獻[4]在768個時鐘周期內僅實現了BS計算和濾波操作,而文獻[7]花費了2 252個時鐘周期僅實現了亮度濾波操作;其次,所提架構僅消耗了5 212個查找表和1 291個寄存器,與文獻[4]和[7]相比,架構在邏輯資源利用上有更大的優勢,查找表和寄存器資源不到文獻[7]的十分之一。

表1 與先前工作的比較(CTU尺寸64×64)
本文提出了一種高效的HEVC去方塊濾波器的硬件架構。因其采用垂直濾波和水平濾波模塊的共用結構,復用了數據存儲結構,合理利用了FPGA片上資源,在提高系統吞吐量的同時,大大縮減了資源消耗。實驗綜合結果表明,本文的設計可以以215 MHz的時鐘頻率對1 080p@60fps視頻實現實時去方塊濾波,但吞吐率并不是最優。如何提高該架構的吞吐率,是下一步的研究目標。