曹 超,虞禮貞,張延軍,李廣楨
(1.南昌大學信息工程學院電子系,江西南昌330031;2.北京理工大學信息與電子學院,北京100081;3.重慶四聯微電子有限公司(北京研發部),北京100083)
當前,數字電視機頂盒設計中,主要參考的視頻編解碼標準包括MPEG-2、H.264以及中國自主研發的AVS;MPEG-2作為廣播級的視音頻標準已使用很多年;H.264相比其他標準能夠在同等圖像質量下有更高的壓縮相率,因此,它廣泛地應用于電視廣播實時通信等領域;AVS與H.264相比雖然在性能上沒有太大的提高,但是計算復雜度有了明顯的下降[1]。國內有線廣播主要是采用MPEG-2和H.264,地面廣播采用AVS,目前,我國正大力發展農村直播衛星項目,它是利用衛星實現廣播電視,多媒體數據直接向用戶傳送數據(直播衛星節目采用的編碼標準是MPEG-2,數字地面廣播采用AVS),同時,傳統的有線、無線數據傳輸方式在很長一段時間內仍然是主流(高清節目主要是采用有線傳輸的MPEG-2和H.264編碼標準)。為了滿足不同客戶對視頻節目質量的不同需求,僅僅支持單一的視頻編解碼標準已難以滿足要求,因此,兼容多標準的視頻解碼芯片將成為高清數字電視機頂盒芯片設計的必然趨勢,這種視頻解碼芯片主要有以下3個特點:1)支持主流的視頻編解碼標準,包括MPEG-2,H.264,AVS(綜合考慮成本與性能,在國內兼容這3種標準的機頂盒能夠滿足高清視頻解碼芯片設計要求,而不必兼容于更多的視頻編解碼標準,如:在國際上一些地區使用的用于廣播的編解碼標準VC-1);2)軟硬件配合工作,固件Firmware可更新,以便于針對市場變化需求進行升級;3)支持通用的接口,易于系統集成化。本設計主要應用于中國直播星DTH項目以及高清衛星機頂盒應用。
在高清視頻編解碼設計中,基于硬件的實現技術已變的越來越重要,特別是在需要高效率執行、低功耗要求中。運動補償(Motion Compensation)模塊是視頻解碼器設計模塊中訪問存儲器最頻繁,且數據吞吐量最高的模塊。為了解決存儲器帶寬的限制,文獻[2]中提出了一種支持H.264的MC子系統,但是它不兼容于AVS;文獻[3]中使用了Cache機制來降低訪問外部存儲器帶寬,但當多種預測方式被請求時,就會減少Cache的命中效率。為解決這些問題,本設計中采用數據緩存機制用于減少對外部存儲單元的頻繁訪問;另外,外部存儲器單元SDRAM分配6幀高清幀存儲空間,存儲用于運動補償計算的相關幀與重構幀,幀存儲在SDRAM中采用頂底場數據分開方式,采用這種方式能夠提高數據的存取效率。整個運動補償計算模塊采用并行多級流水線設計,減少了運動補償的計算周期,提高了執行效率,使用90 nm COMS工藝庫,在135 MHz的頻率下綜合,電路規模為45 kgate,處理一宏塊數據大約需要520個時鐘周期,文中設計能夠應用于MPEG-2 MP@HL,H.264MP@L40 以及AVS Jizhun Profile。
在運動補償計算過程中,首先,需要接收來自于VLD(Variable Length Decoding)模塊解碼的運動矢量;然后根據當前模塊的數據分割以及運動矢量信息,從外部的存儲器參考幀中讀取相應的參考像素;再通過像素插補等一系列計算,最后得到重構的像素數據。對于MPEG-2,像素插補只是在半像素位置進行雙線性差值;對于AVS,在半像素位置采用4抽頭濾波器F1(-1,5,5,-1),在四分之一像素位置采用4抽頭的濾波器F2(1,7,7,1);而H.264/AVC在半像素位置采用6抽頭濾波器F3(1,-5,20,20,-5,1)。運動補償模塊整體結構如圖1所示,包括用于得到重構數據的運動補償像素插補模塊單元,用于取相關數據的外部存儲器接口單元以及一些控制計算單元(包括總線判決器和DMA控制器等)。外部存儲器接口單元處于運動補償像素插補模塊與總線判決器模塊之間,此模塊接收來自于運動補償像素插補單元的請求,用于控制運動補償像素插補單元取相關數據;如果相關數據不存在于邏輯緩存器子模塊中,那么外部存儲器接口模塊將發送請求給總線判決器用于從外部的SDRAM中讀取相關數據,請求返回的數據將存儲在邏輯緩存器單元中,同時相關數據將被傳送給運動補償像素插補單元;若運動補償像素插補單元請求的相關數據存在于邏輯緩存器單元中,相關數據將從邏輯緩存器單元中直接傳遞給運動補償像素插補單元而不訪問外部的SDRAM。

圖1 運動補償計算模塊整體結構
本文中提出了一種插補像素緩存機制,用于存儲像素插補計算過程中的中間數據,對于那些反復被使用的參考像素存放在外部存儲器接口單元中的緩存器Buffer中,完整的參考幀則存放在外部存儲器SDRAM中,通過這種數據Buffer機制能夠很好地提高運動補償的性能,減少計算周期,運動補償存儲器架構如圖2所示。

圖2 運動補償存儲器架構
濾波中間值緩存器用于存放運動補償計算過程中的中間值。由于這個濾波中間值緩存器只是用于存儲像素插補流水的中間值,因此,它只是與像素插補計算單元有數據的交換。外部存儲器接口單元內部結構框圖見圖3所示,主要是用于執行3部分請求響應:1)從運動補償像素插補模塊加載來自于相關Buffer的數據;2)發送請求信號給總線判決器;3)將返回的數據存儲到邏輯緩存Buffer中。整個外部存儲器接口單元包括以下幾個子模塊:亮度數據請求地址模塊、色度數據請求地址模塊、2k亮度數據Buffer、1k色度數據Buffer、亮度數據hit模塊、色度數據hit模塊,以及存儲器請求發送FIFO、存儲器訪問FIFO。整個模塊采用并行多級流水線方式,可以同時處理亮度和色度的取相關數據操作。

圖3 外部存儲器接口模塊單元框圖
通過這種存儲器結構設計,能夠減少對外部存儲器頻繁的訪問。這樣,雖然片內的存儲器功耗略有增加,但是對于外部的存儲器以及I/O接口的功耗能夠大大地減少,表1是通過對20個QCIF視頻序列功耗仿真測試的結果,結果表明存儲器Buffer機制平均能夠減少42%的系統功耗。

表1 存儲器緩存機制優化
在亮度像素插補計算中,需要使用3種濾波器:2種4抽頭濾波器 F1(-1,5,5,-1)和 F2(1,7,7,1),用于 AVS亮度像素插補計算;1個6抽頭的濾波器F3(1,-5,20,20,-5,1),用于H.264/AVC的亮度像素插補計算。1個6階的濾波器直接計算需要5個加法器和4個乘法器,但是通過簡單的操作數組合能夠將資源消耗減少到2個乘法器,即out=(A+F)-5×(B+E)+20×(C+D)。6抽頭濾波器如圖4a所示,設計中使用移位器和加法器組合來實現乘法器功能,因此1個6抽頭濾波器需要使用7個加法器和3個移位器實現。對于2個4抽頭濾波器,可采用類似6抽頭的設計方式,水平濾波為out=-(A+D)+5×(B+C);垂直濾波為out=(A+D)+7×(B+C)。這樣2個4抽頭濾波器能夠分別使用4個加法器和1個移位器實現,如圖4b、圖4c所示。

圖4 3種濾波器設計實現
以文獻[4]圖8-4中j點像素插補為例,對一個4×4塊進行像素插補計算。圖5描述了H.264解碼流水線過程。在流水線第1周期,使用4個水平和4個垂直濾波器分別對參考像素進行計算,輸出結果存放在濾波中間值緩存器中;在第2周期,水平和垂直濾波窗口分別向右移動一格,對4×4塊第2列數進行垂直插補,并且開始執行均值濾波,這樣通過6個時鐘周期,就能夠得到計算j像素點的6個半像素參考點,所以,計算一個j參考像素需要9個時鐘周期。表2總結了在H.264/AVC中插值計算一個4×4亮度像素塊不同像素位置所需時鐘周期(各像素點代表文獻[4]中圖8-4所示的位置)。

圖5 亮度計算流水線設計

表2 4×4亮度塊相應像素點計算周期
對于色度計算來說,AVS與H.264/AVC可采用類似的計算方法,相比亮度計算,色度計算相對直接。插值按照以下公式完成

因此,色度濾波器可設計為如圖6所示,與原始設計相比,該設計需要11個加法器、4個固定長移位器以及3個可配置移位器就能實現,減少了大量的乘法器消耗。

圖6 色度濾波器
外部SDRAM采用Page/Bank存儲方式用于存儲6幀高清圖存儲空間(滿足IBBBBP編碼方式),設計中采用頂底場分開的方式將數據存儲在SDRAM中,如圖7所示。對于亮度數據來說,每一頁分為4個Bank的存儲空間能夠存儲64宏塊的亮度數據,這樣,每個Bank能夠存儲4×4=16個宏塊的數據,讀/寫訪問每個時鐘周期能夠讀取4 pixel×2的數據,采用此種數據分割模式,能夠產生最優化的數據加載能力[5]。圖7中1~5標示了取值模塊在不同的Page/Bank中的位置,取值模塊1所耗費的時鐘周期最短,而由于取值模塊5跨4個Bank取值,因此,所需的時鐘周期最長。例如:當考慮到一個13×13像素的取數據操作時,讀取方式如圖7所示,其中陰影部分為所需要取得的數據,黑色箭頭表示每個時鐘周期所取像素。采用這種取相關數據方式,每個時鐘周期能夠取得8像素數據,這種架構能夠有效地減少訪問外部SDRAM的precharge/active的頻率(每個precharge/active需要消耗2~5個時鐘周期),從而能夠提高運動補償計算的性能。

圖7 Page/Bank存儲方式以及取亮度數據示意圖
采用文中所提出的設計方法,用Verilog語言進行RTL級描述,開發環境為QuartusII 10.2,使用Altera公司的Stratix II系列芯片EP2S90F1020C4,在時鐘頻率為135 MHz的情況下,使用資源為:4 590個ALUT;4 017個寄存器。建立的C模型是基于AVS驗證模型RM09.10,H.264相關軟件JM12.1以及MPEG-2相關的模型v1.2a。通過測試3種不同標準的碼流,使用Synopsys Design Compiler綜合結果顯示,該Verilog代碼能夠滿足MC功能。表3中描述采用文中Buffer緩存機制,AVS碼流測試所節省的帶寬,結果表明采用文中設計Buffer能夠平均節省37.47%的帶寬消耗。

表3 AVS測試Buffer性能
Synopsys Design Compiler下,使用0.09 μm CMOS 工藝庫綜合,在工作頻率為135 MHz下,除去外部的存儲單元SDRAM運動補償計算模塊總共消耗45.48 kgate(運動補償像素插補計算單元與外部存儲器接口單元總和),執行1 Mbyte的MC計算(運動補償像素插補計算,不包括從外部SDRAM中取相關數據),需要消耗大約520個時鐘周期,相比文獻[6]減少了大約15%的時鐘周期,MC計算單元資源消耗情況及與文獻[6-7]比較見表4、表5所示,結果表明,該設計滿足實時高清解碼要求(30 f/s)。

表4 文中設計所耗資源

表5 MC計算單元資源與文獻[6-7]性能比較
本文提出了一種滿足多標準視頻解碼的運動補償存儲架構,外部存儲器SDRAM存儲6幀HD圖,每一幀圖采用頂底場數據分開的方式存儲在SDRAM中,整個MC單元采用并行多級流水線處理,實現了對外部幀存儲單元的高效存取訪問以及運動補償的高效計算,處理1 Mbyte的MC操作需要大約520個時鐘周期,相比文獻[6]節省了15%。綜合結果表明,本設計滿足高清視頻解碼的要求。
[1]Document JVT-C167.Draft ITU-T recommendation H.264(a.k.a"H.26L")[S].2002.
[2]WANG S Z,LIN T A,LIU T M,et al.A new motion compensation design for H.264/AVC decoder[C]//Proc.IEEE International Symposium on Circuits and Systems,2005.[S.l.]:IEEE Press,2005:4558-4561.
[3]KIM J H,HYUN G H,LEE H J.Cache organizations for H.264/AVC motion compensation[C]//Proc.13th IEEE International Conference on RTCSA,2007.[S.l.]:IEEE Press,2007:534-541.
[4]ITU-T H.264建議書[S].2005.
[5]LIN C F,CHUNG C C,TSAI Y C,et al.Bandwidth-efficient architecture design for motion compensation in H.264/AVC decoder[C]//Proc.10th IEEE International Conference on Solid-State and Integrated Circuit Technology,2010.[S.l.]:IEEE Press,2010:445-447.
[6]ZHENG Junhao,GAO Wen,WU D,et al.A novel VLSI architecture of motion compensation for multiple standards[J].IEEE Trans.Consumer Electronics,2008,54(2):687-694.
[7]TSAI C Y,CHEN T C,CHEN T W,et al.Bandwidth optimized motion compensation hardware design for H.264 HDTV decoder[C]//Proc.48th Midwest Symposium on Circuits and Systems,2005.[S.l.]:IEEE Press,2005,2:1199-1202.