• 沒有找到結果。

Vedio Reconstucrtion

本節會介紹 H.264/AVC 的第二部分 Vedio Reconstucrtion,Vedio Reconstucrtion 的 主要模組有 Pipeline Control、IQIT、Intra Prediction、Inter Prediction 以及 Sum,此部 分的所有模組皆是在 Slice Data state 進入 Residual 後才會開始運作,接下來會依序介 紹各模組的架構。

4.4.1 Pipeline Control

由於重建影像資料的 residual block 與 prediction block 之間在做組合之前並無相關 性,所以解碼設計上可以平行處理,以減少重建影像資料所花費的時間,Pipeline Control 模組就是根據此種想法,在適當的時機點觸發 residual block 與 prediction block 的重建,並確保兩邊的結果能在重建以後做正確的組合。

Figure 44 Pipeline Control 架構圖

Figure 44 是 Pipeline Control 架構圖,在 Slice Data state 進入 residual 後,便會 觸發 CAVLC Decoder 及 Intra 或 Inter Prediction,然後同時進行 residual block 與 rediction block 的解碼,當兩邊當前的 4x4 block 都解碼完成時便會啟動 SUM 模組做 block 組合的動作,出來的 4x4 reconstructed block 會先存放於記憶體中,而目前是解 碼哪一個 4x4 block 是由 blk4x4_rec_counter 訊號控制,blk4x4_rec_counter 代表目前

43

解碼的 4x4 block 在整個 16x16MB 中的編號,各個編與 4x4 block 的對應情形如 Figure 45 所示,而 Pipeline Control 中的重要訊號如 Table 8 所示。

Figure 45 blk4x4rec_counter 與 4x4 block 之對應情況

Table 8 Pipeline Control 重要訊號說明

44

Figure 46 4x4 Intra block pipeline 示意圖

Figure 47 4x4 Inter block pipeline 示意圖

CAVLC

45

4.4.2 IQIT

IQIT 模組本身處理兩個運算,反量化(IQ)與反轉換(IT),因為編碼的時候是先將 影像資料做轉換之後在進行量化處理,所以解碼時須先進行反量化後再做反轉換才能 得到原本的影像。

在 4.3.2 節所提到的 QPy 與 QPc,以及在 4.3.4 節 CAVLC Decoder 解碼完產生的 residual data coefflevel 0~15 都會成為輸入訊號進入反量化模組當中,Figure 48 表示反 量化模組的架構,根據目前 residual block 的類型選擇使用 QPy 或者 QPc,再透過 mod 6 得到 LevelScale,以及除以 6 得到 shift 的 bit 數,然後 shift 後得到 rescale 的結果。

Figure 48 Inverse Quantization 架構圖

在 Intra16x16 block 中,會涉及到 DC block 及 AC block 的運作,DC block 須經過 多一層的 Hadamard 轉換,再與 AC block 合併成 4x4 的 block,然後才開始進行 IDCT transform,Figure 48 表示完整 IQIT 的架構圖,oneD_counter 只有在 block 為 DC 時才 會開始運算,其中若是 Chroma 則只需花一個 clock cycle 解出 2x2 block 的值,並儲存 在 DC_out0~ DC_out3 中,Luma 則會花四個 clock cycle 產生 4x4 的 block 存放至 DC_out0~ DC_out15,得到的值依照當時重建的 block 編號與之對應的 AC block 運算,

過程中,會透過 cur_DC 變數存取從 DC_out0~15 中選擇出來的 DC 值,合併完成之後 twoD_counter 才會開始運作,twoD_counter 會驅動 IDCT 轉換產生 Rounding_value,

經過四個 clock cycle 後,Rounding_value0~15 都已經填補完成,表示 residual block 已 經完成,可以傳入 sum 模組中與 prediction block 進行一個 4x4 block 的合併。

46

Figure 49 IQIT 架構圖

4.4.3 Intra Predictor

在 4.3.5 節的 Intra PredMode Decoder 中算出了 Intra block 作預測所需要的模式,

在這個模組就根據得到的預測模式進行畫面內預測,Intra Prediction 所需要參考的周 邊 block 如 Figure 50 所示,塗色部分表示會需要用到的參考 block,而數字代表當前 block 的解碼順序,周邊 block 的資料儲存中,上方的 Block B 使用 block RAM 儲存必 須資訊,而其他 block 則使用暫存器來做保存即可。

Figure 50 Intra Prediction 參考示意圖

47

Figure 51 為整個 Intra Predictor 的架構圖,而 Table 9 是 Intra Predictior 的重要訊 號說明,首先得到目前要解碼的 4x4 block 之 PredMode,然後將 PredMode 及目前解 碼的 block 編號傳入 Load Module 中,計算好 load address 後會去 block RAM 中取得 需要參考的資料並存在暫存器中,資料準備完成後就會開始進行 Intra Prediction,而 出來的結果就是 Intra Prediction Block。。

Figure 51 Intra Predictor 架構圖

Table 9 Intra Predictor 重要訊號說明

48

4.4.4 Inter Predictor

在 4.3.6 節介紹了 MVR 的流程,而 MVR 產生出來的 MV 會在此模組進行 Inter Prediction,大致來說,Inter Predictior 的流程跟 4.4.3 的 Intra Predictor 接近,但最大的 差別在於所參考的資料必須先得到 MV 跟 refidx,透過 refidx 從由已解碼好的 Frame 所組成的 Reference Frame List 上找到想要參考的 Frame,再透過 MV 得到欲參考的 block,而值得一提的是,本論文的主要貢獻之一:藉由將 Reference Frame List 從 on-chip memory 移至 SDRAM 上,解除了實作之硬體解碼器所支援的影像解析度限制是在此 模組實作完成,在進行 Inter Prediction 之前,會先根據得到 MV 與當前解碼的 block 位置計算出欲參考的 block 在該 Frame 上的讀取位置,這個讀取位置是以 word 為單 位,因為一個 pixel 是 8bits,所以連續的 4 個 pixel 就是一個 word,所以每四個連續 的 pixel 共用一個讀取位置,Table 10 為解析度為 qcif 的影像中一個 16x16 的 MB 之 讀取位置示意圖,因為是 16x16,所以一列只需要 4 個 words,共 16 列,第二列第一 行的 44 是因為 qcif 的解析度為(176x144),也就是說一列共有 176/16=11 個 MB,一 個

Table 10 qcif 解析度中 16x16 MB 讀取位置範例

49

MB 的一列需要 4 個 words,所以整個 QCIF Frame 的一列共需要 44 個 words 來儲存,

讀取位置為 0~43,以此類推,CIF(352x288)的第二列讀取位置會從 88 開始。而計算 好讀取位置時,refidx 也會傳到外層的 User Logic 去計算 Frame List Offset。目前 Reference Frame List 的實作是採用 FIFO 的方式,也就是前一張 Frame 之 index 為 0,

前兩張為 1,以此類推,而目前實作的 Frame list 深度到 5,也就是最多可支援到前五 張的畫面間預測,Reference Frame list 的實作示意圖如 Figure 52 所示,原理非常簡單,

Figure 52 Reference Frame List 示意圖

所以未來要進行擴充也相當容易,在寫入 SDRAM 的過程有實作一個 WriteBase,

WriteBase 紀錄目前已經寫入多少個 word 到 SDRAM,而 Frame List Offset 就是由 WriteBase 扣掉 refIdx 乘上目前解析度一張 Frame 的 word 數,相當於往前找 refidx 張 Frame,再加上 Inter Prediction 算出的讀取位置,就是真正在 BUS 上的讀取位置。

透過 BUS 得到欲參考的 block 後,會先將參考資訊存在暫存器,然後根據目前是 解碼 Luma block 還是 Chroma Block,來決定參考資料是通過 6 tap filter 還是 chroma interpolation 做運算,Inter Predictor 的記憶體階層架構如 Figure 53 所示,而運算出來 的結果就是 Inter Prediction Block,Inter Predictor 的架構圖如 Figure 54 所示,而 Inter Predictor 的重要訊號如 Table 11 所示。

50

Figure 53 Inter Predictior 記憶體階層架構示意圖

Figure 54 Inter Predictor 架構圖

51

Table 11 Inter Predictor 重要訊號說明

52

ZedBoard 是基於 Xilinx Zynq-7000 擴展式處理平臺(EPP)的低成本開發板,其 中 Xilinx Zynq-7000 EPP 將 ARM 處理系統與 Xilinx 7 系列的 FPGA 做結合。此板可 以運行基於 Linux,Android,Windows® 或其他 OS/ RTOS 的設計,適用於是影像處 理、機電控制及軟體加速等應用。此外,可擴展介面使得使用者可以方便訪問處理系 統和可程式設計邏輯,Zedboard 外觀如 Figure 55 所示。

Zedboard 開發平台之技術特色如下:

 Zynq-7000 EPP XC7Z020-CLG484-1

 512 MB DDR3 記憶體

相關文件