本篇論文主要分為六個章節,第一章是緒論、研究動機與論文架構,第二章介紹 相關的研究討論,第三章簡介 H.264/AVC 各個模組的基本架構與演算法,第四章則是
4
介紹本論文實作的解碼電路中各個模組的架構細節,第五章則是介紹實作平台,開發 環境與實驗結果,最後,第六章則是結論與未來的展望。
5
二、相關研究
本章節進行相關的研究討論,關於 H.264/AVC 的研究論文非常多,由於本論文研 究為了突破解碼影像之解析度限制而對 Inter Prediction 的部分進行修改,而使參考畫 面的資料傳輸成為整個解碼器的效能瓶頸,所以主要會以這方面的相關論文進行討 論。
在 Inter block 進行 Motion Compensation(MC)時需要大量的參考資料,而參考資 料的傳輸會成為整個解碼器的效能瓶頸,大大降低解碼器效能,所以關於 MC 的效能 改良一直是 H.264 解碼電路的研究重點之一,關於這部分的改良方法有分許多種: 第 一種是對參考資料的讀取行為做優化,在論文[4]中提出了 Inter polation Window Reuse(IWR)跟 Interpolation Window Classification(IWC)的方法,其中 IWR 是藉由使用 on-chip memory 來儲存同一個 Macro Block(MB)中很可能重複利用到的 reference pixel 來達到參考資料的重複使用,而 IWC 則是根據當前解碼區塊的大小及當前解碼區塊 所參考之參考區塊的座標位置來決定需要讀取的真正區塊大小,藉由這種方式減少不 必要的資料讀取,這兩種方式能夠有效的減少參考資料的傳輸次數,所以成為之後許 多相關論文的重要參考,而論文[5]也提出了類似論文[4]之 IWC 的可變動區塊大小之 資料讀取,以及將 Cb、Cr 資料合併於參考畫面的方法來減少參考資料的傳輸次數,
論文[6]提出 Minumun Required Reference Data-loading(MRRD)是類似 IWC 但特別針對 8x8 以下的 block 設計,此外也提出 Data Reuse from Upper/Left block(DRUL)的方法,
透過解碼左上區塊時,讀取較大的參考區塊,使其他區塊能夠有機會重複利用參考資 料,論文[7]分析了一個 MB 中各個 sub-MB 會重複使用的參考資料,提出了 Overlapping Region Duplication(ORD)的方法,透過使用兩個 16x16 的 pixel 的暫存空間將參考資料 作暫存後,在不覆蓋可能重複使用的資料區塊下將不會重複利用的資料覆蓋成新資料 進而達到參考資料的重複使用,也減少資料傳輸的次數與數量,此類型的方法雖然直 接,但是改善的效能依舊有待加強。
由於影像解碼的過程中,在解碼不同 MB 時,對於同一張 Frame 的同一個 pixel
6
重複參考的機會並不是很高,因此直接對解碼出來的 MB 資料實作 General – Purpose Cache 對於解碼器的幫助有限,論文[8]直接使用 SDRAM 的 access address 來作為 index 實作一個 reference cache,特點在於 cache hit 時,會回傳整個 line 的資料,論文[9]也 是基於 CIF 的解析度實作一個 352x24 的 sliding cache,此種直接實作的方法成效還是 有待加強,而由於解碼基本單位是 16x16 MB,但 MC 的基本單位是 4x4 sub-MB,同 一個 MB 內的 sub-MB 所用到的參考資料非常可能重複,所以對於同一個 MB 內部的 參考資料自行設計 Cache 是一個可行的方法,相當多的論文都是以此概念進行討論,
論文[10]針對參考資料設計了一個 6-way cache,加上自行設計過的 memory access control,比起論文[4]有效的降低了 MC 過程的讀取次數達 71.58%,論文[11]是針對參 考資料實作一個 2-D Cicular Cache,再加上對 luma 的 FIR 與 chroma 的內插進行同時 處理來增加效能,論文[12]則是透過記憶體階層的概念實作了支援 B-frames 的 3-D cache 來降底參考資料的讀取次數,論文[13]設計了 Block-Pipelining Cache,不但利用 cache 的機制來減少參考資料的讀取次數,block-level 的 pipeline 也降低了參考資料做 讀取時產生的延遲負擔。 block 時就先將右邊的 block 之可能的參考資料做 Pre-Fetch 的動作來減少參考資料的 讀取,而論文[15]提供了名為 High Efficiency Reference Pre-Fetch Scheme(HERPS)的方 法,藉由 MB 之 MV、refidx 及 MB type 的資訊,加上 Unified Fetch Region 的概念先 對可能用到的參考資料進行 Pre-Fetch 存在 Reference Frame Data Buffer,再選出當前 使用的進行 MC。
7
而除了上述方法,還有一些其他的改良方法,像是論文[16]自行設計 interpolator 對於原本 Luma 的 FIR 或者 Chroma 的 interpolation 之順序進行改變,來達到參考資料 重複使用率的提升,進而減少參考資料的讀取次數,而論文 [17] 中設計了一個 Self-Adaptive Prediction Engine , 除 了 實 作 採 用 可 調 整 之 讀 取 區 塊 外 , 也 在 4x4 sub-block level 進行 pipeline 設計,同時實作了以存放參考畫面的 SDRAM、存放當前 MB 可能使用之參考資料的 Reference Picture Buffer 以及當前區塊解碼所需要的 register sliding window 所組成的三層記憶體架構進行參考資料的 Pre-Fetch 與 Cache,
充分使用了各種可能的加速設計。
本論文在第五章的實驗結果部分也會根據實驗結果進行由於參考資料改放置 SDRAM 所造成的瓶頸問題進行討論,同時提出可行之改良方法。
8
H.264/AVC Baseline Decoder 的解碼流程如 Figure 1 所示。一般來說,經過壓縮的 Bitstream Data 可以分成許多 NAL(Network Abstraction Layer)unit 作為傳輸單元,而 Decoder 得到 bitstream 後會先進行 slice level high-level syntax decoding,也就是對先來 到的 SPS(Sequence Parameter set) NAL 跟 PPS(Picture Parameter Set)NAL 作解碼,進 而從中得到包含影像的寬和高以及 Reference list 深度等等的重要資訊,這些參數會被 儲存下來成為之後的解碼依據。而之後的 NAL 大部分是 Slice NAL,在解碼 Slice NAL 時會先取得 Slice Header 的資料,然後進入 Macro Block Layer 的解碼迴圈,如 Figure 2 所示。
一張畫面可分為很多個 Macroblock(MB),而 16x16MB 為解碼的最基本單位,每 個 MB 的解碼流程如 Figure 1 虛線內的部分所示,資料在經過熵解碼(Entropy decoder) 後會得到 residual data 及進行 prediction 的相關資訊,residual data 經過反量化(Inverse Quantization、Q-1)跟反轉換(Inverse Transform、T-1)後會得到 residual block,再將 residual block 跟 prediction 所產生的 prediction block 組合後即為當前 MB 的影像資料。
Prediction block 產生方式若是由當前 MB 的周圍 MB 資訊所產生,則所需要使用的運 算單元為畫面內預測(Intra Prediction),若是由前幾張 frame 的資訊所產生,則需要的 運算單元為畫面間預測(Inter Prediction)。而組合好的影像資訊會再經過去區塊濾波器 (Deblocking Filter)來消除區塊效應(Blockung Effect),存放成 YCbCr 的影像資訊。由