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