1. 程式人生 > >基於FPGA的HDMI高清顯示接口驅動

基於FPGA的HDMI高清顯示接口驅動

title multi 每一個 邏輯 影像 zed class min 先來

  HDMI是(High Definition Multimedia Interface)的縮寫,意思是高清晰度多媒體接口,是一種數字化視頻/音頻接口技術,適合影像傳輸的專用型數字化接口,可同時傳送音頻和影像信號,最高數據傳輸速度為48Gbps(2.1版),HDMI相較於VGA接口,它傳輸的信息量大,色彩度高,傳輸速度快等顯著優點。

  一般來說驅動HDMI有兩種方法,有些開發板是用一顆專用的HDMI芯片ADV7511做HDMI的輸出使用,ADV7511 是一款高速高清晰度多媒體接口(High Definition Multimedia Interface HDMI)發送器。 能夠處理的數據速率高達165MHz(1080p @60H, UXGA @60Hz), 輸出數據速率高達 225MHz。

技術分享圖片

  Digilent官方出品的ZYBO開發板,上面一個雙向的HDMI端口,直接連接在PL的引腳上,所以這次博主分享的工程是用ZYBO PL端的IO口模擬HDMI接口,首先先來講一下HDMI的顯示原理主要是TMDS,該部分摘自博客:http://blog.sina.com.cn/s/blog_679686370100vgg1.html

  HDMI 采用和 DVI 相同癿傳輸原理——TMDS(Transition Minimized Differential signal),最小化傳輸差分信號。

  TMDS 傳輸系統分為兩個部分:發送端和接收端。 TMDS 發送端收到HDMI 接口傳來的表示 RGB 信號的24 位並行數據(TMDS 對每個像素的 RGB 三原色分別按 8bit 編碼,即 R信號有 8 位,G 信號有 8 位,B 信號有 8 位),然後對這些數據進行編碼和並/串轉換,再將表示 3 個 RGB 信號的數據分別分配到獨立的傳輸通道發送出去。接收端接收來自發送端的串行信號,對其進行解碼和串/並轉換,然後發送到顯示器的控制端。與此同時也接收時鐘信號,以實現同步。

TMDS的原理

每一個 TMDS 鏈路都包括 3 個傳輸 RGB 信號的數據通道和 1 個傳輸時鐘信號的通道。每一個數據通道都通過編碼算法,將 8 位的視、音頻數據轉換成最小化傳輸、直流平衡的 10 位數據。這使得數據的傳輸和恢復更加可靠。最小化傳輸差分信號是通過異或及異或非等逡、邏輯算法將原始 8 位信號數據轉換成 10 位,前 8 為數據由原始信號經運算後獲得,第 9 位指示運算的方式,第 10 位用來對應直流平衡。

  一般來說,HDMI 傳輸癿編碼格式中要包含視頻數據、控制數據和數據包(數據包中包噸音頻數據和附加信息數據,例如糾錯碼等)。 TMDS 每個通道在傳輸時要包含一個 2bit 的控制數據、 8bit 的視頻數據或者 4bit 的數據包即可。在 HDMI 信息傳輸過程中,可以分為三個階段:視頻數據傳輸周期、控制數據傳輸周期和數據島傳輸周期,分別對應上述的三種數據類型。

下面介紹 TMDS 中采用的技術:

  1. 傳輸最小化

8 位數據經過編碼和直流平衡得到 10 位最小化數據,這仿佛增加了冗余位,對傳輸鏈路的帶寬要求更高,但事實上,通過這種算法得到的 10 位數據在更長的同軸電纜中傳輸的可靠性增強了。下圖是一個例子,說明對一個 8 位的並行 RED 數據編碼、並/串轉換。

技術分享圖片

  第一步:將 8 位並行 RED 數據發送到 TMDS 収送端。
  第二步:並/串轉換.
  第三步:進行最小化傳輸處理,加上第 9 位,即編碼過程。第 9 位數據稱為編碼位。

  2. 直流平衡

  直流平衡(DC-balanced)就是指在編碼過程中保證信道中直流偏移為零。方法是在原來的 9 位數據癿後面加上第 10 位數據,返樣,傳輸的數據趨於直流平衡,使信號對傳輸線的電磁幹擾減少,提高信號傳輸的可靠性。

  3. 差分信號

  TMDS差分傳動技術是一種利用2個引腳間電壓差來傳送信號的技術。傳輸數據的數值(“0”或者“1”)由兩腳間電壓正負極性和大小決定。即,采用 2 根線來傳輸信號,一根線上傳輸原來的信號,另一根線上傳輸與原來信號相反的信號。這樣接收端就可以通過讓一根線上的信號減去另一根線上的信號的方式來屏蔽電磁幹擾,從而得到正確的信號。

技術分享圖片

  另外,還有一個顯示數據通道(DDC),是用於讀取表示接收端顯示器的清晰度等顯示能力的擴展顯示標識數據(EDID)的信號線。搭載 HDCP(High-bandwidth Digital Content Protection,高帶寬數字內容保護技術)的發送、接收設備之間也利用 DDC 線進行密碼鍵的認證。

接下來是電路設計部分,HDMI驅動部分追尋原始出處應該是迪芝倫官方,該部分代碼用VHDL語言描述,為了方便移植,我將該部分代碼封裝成自定義IP Core,由上文可知,我們需要產生RGB888三路數據,輸入給該模塊,然後經過解碼、串/並轉換,差分輸出。還需要兩個時鐘輸入,一個是當前顯示分辨率的像素時鐘,一個是當前顯示分辨率的像素時鐘的五倍。還有一個行同步信號和場同步信號,這兩個信號的產生方法和VGA是一樣的,簡單來說就是先產生VGA的信號,行同步信號、場同步信號RGB888的數據輸入給HDMI驅動模塊就可以顯示了,我們要修改顯示的數據,還是只需要修改VGA時序即可。

技術分享圖片

  該工程經過測試,可以實現720p(1280x720)的分辨率顯示,1080p(1920×1080)的分辨率沒有測試出來,原因我覺得可能是官方的zybo的晶振是125Mhz的,這個時鐘很尷尬,直接用Clocking wizard鎖不出來HDMI所需要的精確時鐘,如下圖。我試過先分頻出100Mhz,然後在調用一個IP Core分頻和倍頻,但是綜合總會報錯。所以直接這樣進行PLL雖然有誤差但是還是可以顯示出720p的。

技術分享圖片

而且根據迪芝倫的官方手冊上描述,有這樣一段,Resolution up to 720p(1280x720) have been teste。我的英文不是很好,那既然這樣說了,沒準它還真達不到1080p,好吧不管了,就暫且認為它最高只能達到720p吧。逃~

技術分享圖片

打開工程後,需要重新添加HDMI自定義IP的路徑,就在工程中,rgb2dvi_v1_2文件夾中。

技術分享圖片

  然後在IP Catalog中搜索hdmi_disp就可以得到對應的IP Core了。

技術分享圖片

  雙擊打開這四個需要定義的參數,已經定義好在IP中了,直接點擊OK——Generate生成

技術分享圖片

  直接可以在如下圖所示中找到例化文件,直接實例化即可。

技術分享圖片

  關於引腳約束,需要說的是,引腳約束必須為TMDS_33電平標準

技術分享圖片

  最後附上一張720p彩條測試圖。

技術分享圖片

最後歡迎關註一億人都想要關註的微信訂閱號【開源FPGA】,總結記錄自己的學習過程,一個FPGA工程師的養成之路。歡迎加入開源FPGA-交流群-I進行討論,群號碼:677163633。如果您需要本工程的源碼,歡迎關註博主微信訂閱號【開源FPGA】,在後臺回復,開源FPGA,即可獲得工程源碼哦!

技術分享圖片

轉載請註明出處:NingHeChuan(寧河川)

個人微信訂閱號:開源FPGA

如果你想及時收到個人撰寫的博文推送,可以掃描左邊二維碼(或者長按識別二維碼)關註個人微信訂閱號

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:http://www.cnblogs.com/ninghechuan/p/8353827.html

基於FPGA的HDMI高清顯示接口驅動