H.264是ITU-T VCEG組織和ISO/IEC MPEG組織共同研究的新型視頻壓縮標準,相比其他視頻壓縮算法,具有壓縮比高、算法復雜的特點(diǎn)。由于編碼算法的復雜性,系統對圖像解碼速度和功耗要求非常嚴格,因此,在設計解碼器時(shí)采用了H.264解碼專(zhuān)用芯片的設計方案。對一個(gè)大的設計項目,一般采用由頂向下(TOP-DOWM)的設計方法,把各功能模塊劃分為子模塊。視頻控制器模塊是芯片與顯示平臺的數據接口,對檢驗芯片設計是否成功起著(zhù)重要的作用,有必要把它單獨劃分為一個(gè)子模塊。為了提高設計的成功率,在設計初期采用了基于FPGA的原型驗證。整個(gè)系統的FPGA原型驗證平臺如圖1所示,平臺分為2個(gè)部分,硬件設計和基于RISC CPU的軟件解碼,兩部分協(xié)同工作,既可以驗證軟件和硬件的解碼結果,又可以加速整個(gè)解碼過(guò)程。 圖1 H.264解碼芯片的FPGA原型驗證平臺 圖2 輸出視頻控制模塊結構框圖 視頻控制模塊的設計與實(shí)現 視頻控制模塊原理框圖及功能分析 輸出視頻控制模塊的結構框圖如圖2所示,本模塊有2個(gè)時(shí)鐘域:系統時(shí)鐘域和顯示時(shí)鐘域。系統時(shí)鐘頻率根據所選用的SDRAM類(lèi)型而采用固定的166MHz;對于分辨率為1280×720的高清電視來(lái)說(shuō),顯示時(shí)鐘域可以選用70 MHz 左右的頻率。 系統時(shí)鐘域含有2個(gè)對外接口:系統接口,主要包含上層系統發(fā)出的指令以及輸出控制模塊的反饋信息;DRAM接口,包含數據專(zhuān)用總線(xiàn)為輸出控制模塊提供的信號,用來(lái)于向DRAM請求顯示的圖像數據。 系統時(shí)鐘域中的顯示輸入控制子模塊(Disp In Ctrl)首先用于接收系統傳來(lái)的StartDisp和EndDisp信號,來(lái)啟動(dòng)或關(guān)閉視頻數據的輸出顯示功能,同時(shí)發(fā)出幀圖像顯示完畢信號(FrameDone),通知系統更換下一副圖像的地址信息(ImageAddress);其次,它用于向DRAM發(fā)出請求,通過(guò)專(zhuān)用數據通道讀取需要顯示的圖像數據;它還要控制輸入多路選擇模塊(Input MUX),從而完成向片內SRAM寫(xiě)數據的任務(wù);最后,該模塊要與顯示時(shí)鐘域的信息交互,向時(shí)鐘域同步模塊(Clk Domain Sync)發(fā)送顯示使能信號(DispEn Sys),控制圖像顯示的開(kāi)啟和關(guān)閉。系統時(shí)鐘域的另一個(gè)子模塊——輸入多路選擇模塊會(huì )按照一定的規律選擇片內雙口SRAM,控制存儲器地址,完成向存儲器寫(xiě)入顯示圖像數據的任務(wù)。 顯示時(shí)鐘域含有一個(gè)對外顯示設備接口,主要包含用于顯示的控制信號和已完成轉換的數據信息。顯示時(shí)鐘域包含2個(gè)子模塊,一個(gè)是輸出多路選擇子模塊(Output MUX),用于實(shí)現對雙口SRAM的選擇和地址控制,按照一定的規律讀取要顯示的圖像數據;還要進(jìn)行數據的打包。另外一個(gè)子模塊是顯示輸出控制模塊(Disp Out Ctrl),用于實(shí)現對TV編碼器的控制、YUV信號向RGB信號的轉換以及對數字圖像的縮放,信號包括顯示時(shí)鐘、行同步、幀同步以及RGB圖像數據等;它還要控制輸出多路選擇模塊以讀取顯示數據;最后,它要與系統時(shí)鐘域進(jìn)行交互, 配合數據在兩個(gè)時(shí)鐘域之間的傳遞。 視頻控制模塊采用的特殊技術(shù) 時(shí)鐘域同步模塊是輸出控制模塊設計的重點(diǎn),它主要負責兩個(gè)時(shí)鐘域之間的控制信號傳遞?鐣r(shí)鐘域的信號傳遞設計較為麻煩, 所以設計中將傳遞的信號分為兩類(lèi):數據信號和控制信號,其中控制信號就是通過(guò)時(shí)鐘域同步模塊傳遞。對需要跨時(shí)鐘域傳遞的信號數進(jìn)行精簡(jiǎn),在最后方案中只需要2個(gè)信號:WrDone信號由系統時(shí)鐘域發(fā)出,通知顯示時(shí)鐘域某塊雙口SRAM中的數據已經(jīng)更新完畢,可以讀取并進(jìn)行顯示輸出;RdDone信號由顯示時(shí)鐘域發(fā)出,通知系統時(shí)鐘域某塊雙口SRAM中的數據已經(jīng)顯示完畢,可以更新其內部的數據。信號在不同的時(shí)鐘域之間傳遞需要采取消除亞穩態(tài)(Metastability)的處理措施,可使信號通過(guò)兩級寄存器鎖存輸出,如圖3所示。 圖3 跨時(shí)鐘域信號亞穩態(tài)消除電路 圖4 視頻輸出子模塊的硬件實(shí)現框圖 設計中有兩點(diǎn)值得注意,首先,時(shí)鐘域同步電路應放在一個(gè)獨立的模塊中,保證綜合工具的優(yōu)化、時(shí)序分析的正確,并方便電路的分析和調試;同時(shí),為了能夠使信號的目標時(shí)鐘域采集到信號變化,設計中傳遞的控制信號都采用電平信號表征。 時(shí)鐘域之間要傳遞的另一種信號是數據信號,由于數據信號數目較多、變化也較快,所以它們的傳遞通過(guò)雙口DPRAM實(shí)現。雙口DPRAM要求讀寫(xiě)端口對同一存儲地址的操作要滿(mǎn)足一定的時(shí)間間隔,否則會(huì )出現數據傳輸錯誤,甚至會(huì )破壞硬件電路。因此為了避免DPRAM的讀寫(xiě)沖突,設計中采用了“乒乓”緩沖的方法,兩塊DPRAM交替存取解碼后用于顯示的亮度或色差數據:當顯示部分讀取一塊DPRAM中的數據時(shí),系統向另一塊DPRAM中寫(xiě)接下來(lái)要顯示的數據,數據讀取完畢時(shí),兩塊DPRAM就進(jìn)行交換。這部分共用4塊DPRAM來(lái)實(shí)現,2塊傳遞亮度信號,2塊傳遞色差信號。 下面分析在視頻控制器顯示輸出子模塊中運用到的格式轉換算法、圖像縮放處理算法以及它們的硬件實(shí)現。 顯示數據格式轉換分析 根據Sil 164 DVI信號編碼芯片資料,同時(shí)參考H.264視頻編碼標準中給出的YUV → RGB轉換格式,故在設計中采用的固定轉換算法如下式所示: 上式經(jīng)過(guò)定點(diǎn)化處理,使用移位和相加的方法實(shí)現了轉換,如下式所示: 在硬件設計中的YUV、RGB信號都是用8位無(wú)符號數表示,中間變量采用12位保證精度。最后要在0"255的范圍內對計算出的RGB結果進(jìn)行剪裁處理,式中的冪指數和除法運算都通過(guò)移位來(lái)實(shí)現。 數字圖像縮放的算法分析 對于一幅分辨率為M×N的原始圖像,其所有采樣點(diǎn)的YUV值可以用M×N階矩陣表示為: 像素點(diǎn)用f(m,n)表示,其中0≤m≤M,0≤n。對一幅數字圖像進(jìn)行縮放,其實(shí)質(zhì)就是對一幅數字圖像進(jìn)行重采樣,假定對原始數字圖像高和寬進(jìn)行縮放的縮放倍數分別為S1和S2,那么根據奈奎斯特采樣定律,應該用新的水平與垂直采樣周期740)this.width=740" border="undefined"> 對原數字圖像進(jìn)行重采樣。得到經(jīng)過(guò)縮放的數字圖像f′(m′,n′): 由上式可知,經(jīng)過(guò)縮放的數字圖像中的每一個(gè)重構像素f′(m′,n′)就是原來(lái)數字圖像各個(gè)像素的加權和。若采用該式直接進(jìn)行硬件設計,計算量會(huì )非常大。為了簡(jiǎn)化設計難度,節省芯片成本,可以在對圖像品質(zhì)影響不大的基礎上對上式進(jìn)行簡(jiǎn)化。重構后的圖像像素值主要取決于兩個(gè)抽樣函數乘積的值。在實(shí)際中只采用 的值等于1的點(diǎn),即滿(mǎn)足的點(diǎn)。進(jìn)一步簡(jiǎn)化,可以取,表示對數按四舍五入取整,得到簡(jiǎn)化表達式:f′(m′,n′)=f(m,n)。 數字圖像格式轉換與縮放的硬件實(shí)現 設計本項目的時(shí)候,顯示設備采用分辨率為1280×720的高清晰度電視機,輸出到高清晰度電視機顯示時(shí)采用圖像中心對齊的方式。當把解碼好的數字圖像數據送到高清晰度電視顯示時(shí),如果不經(jīng)過(guò)圖像縮放處理,那么顯示屏幕中間放解碼好的數字圖像,其他的地方用黑色填充。在進(jìn)行縮放處理時(shí),遵循上面的規律。先把視頻控制器輸出模塊前端按照逐行掃描排列好送來(lái)的數據進(jìn)行數據格式轉換,再把RGB不為零(即不為黑色)的像素數據按每幀和逐行掃描規律輪流放到兩塊同樣大小的片內緩存RAM中,如圖4所示。 其工作方式與前面的DPRAM相同,讀取RAM1或RAM2中數據的地址后,可以通過(guò)地址譯碼器得到該點(diǎn)像素值的行列地址,即得到m、n的值。把m、n值送到圖像縮放處理單元,通過(guò)縮放處理得到新的圖像數據和新的圖像數據地址,再通過(guò)寫(xiě)地址譯碼器得到在輸出RAM3中按照逐行掃描格式輸出的地址,該地址用來(lái)存放格式轉換后的數據。最后,從存儲轉換數據的RAM3中可以直接輸出顯示所需要的RGB數據。 結語(yǔ) 設計完成后,此視頻控制器模塊經(jīng)綜合工具Synplify 7.6綜合,可以得到80.3MHz的工作頻率。與前端的解碼模塊一起下載到Xilinx公司的Virtex-II 6000型FPGA中,并將其集成入H.264視頻解碼驗證平臺上,工作頻率可達34MHz,在高清晰度電視上播放圖像時(shí)效果較好。 |