引言
做圖像處理沒有顯示怎么能行,所以用兩章來介紹HDMI的協議以及編碼實現。HDMI的編碼,仿真和調試會花費較長時間,特別是第一次在windows環境下部署UVM環境,對于剛剛入門UVM的我來說,這塊也花費了很長時間。截止目前設計和仿真的代碼都已經做完。所以這章主要介紹HDMI的協議以及設計的架構,之后再用一章來介紹HDMI的實現和驅動編寫。
HDMI協議簡介
HDMI包含物理層和鏈路層結構,物理層定義了信號的物理接口,以及物理層物理層編碼方式。鏈路層定義了幀格式,包含了圖像,聲音,和控制信息。
1)物理層信號
TMDS Data:采用差分傳輸,共有三路。
TMDS Data shield:
TMDS clock:A類型的時鐘頻率小于55MHz,即最大傳輸165M pixels/sec。
TMDS clock shield:
SCL:串口通信時鐘。
SDA:串口通信數據通路。
CEC:用戶可以通過CEC協議對設備進行控制。
Hot Plug Detect:對供電電源進行檢測信號,提示電源超過或者不足。
圖1.1 物理層信號定義
2)鏈路層結構
鏈路層主要包含如下信息:
圖1.2 鏈路層包含信息
整個傳輸的幀時序結構如圖1.3:其中HSYNC、VSYNC是圖像同步信號,都為高電平,表示是有效圖像數據。Preamble用于區分數據類型,具體如圖1.4。video數據以2bit的leading gurad band開頭,之后是連續的一行圖像數據。Data island用于傳輸聲音信息,一些音視頻描述信息等。Data island被放置于非有效video圖像區域。這部分不是必須的,我們進行圖像處理僅僅用于顯示處理,所以不進行data island字段設計。這部分介紹略過。
內容
圖1.4 preamble結構
3)物理層編碼
控制信號包括HSYNC、VSYNC以及CTL0……2。其具體映射到物理傳輸線上為:
Case(D1, D0):
0, 0: q = 10b1101010100;
0, 1: q = 10b0010101011;
1, 0: q = 10b0101010100;
1, 1: q = 10b1010101011;
Endcase
Video數據8bit被編碼為10bit,這樣可以降低TMDS物理路徑上電位轉變次數。算法如下:
圖1.5 video data物理層編碼
HDMI設計架構
HDMI設計中不包含data island的結構解析,因為僅僅用于顯示。整體結構如圖2.1。包含兩大部分:
1)hdmi_link
用于從ddr中獲得圖像數據,并封裝成鏈路層格式。其中cfg是通過arm端實現寄存器配置,包括圖像的起始地址,大小,圖像長寬,blank的大小等。Ctrl是實現對HDMI的整體控制,包括使能HDMI發送,處理hotplug以及產生HDMI傳輸中斷等。Img_reader通過axi總線從DDR中獲得圖像數據,pack是完成鏈路層格式的打包,并發送到物理層。
2)hdmi_phy
這層主要是將鏈路層幀結構進行物理編碼,并轉換為串行數據發送出去。Encoder就是對幀結構進行編碼,每8bit轉換為10bit數據。Serial中用到了芯片的SERDERS,將并行10bit數據轉化為高速串行數據。
3)PLL
產生兩種時鐘信號:一種用于鏈路層數據打包和讀取等,而tmds_clk是高速串行時鐘。用于提供給物理接口。
圖2.1 HDMI設計結構
驗證架構
這部分用UVM來實現的,利用了UVM的基本架構。大致如圖3.1。
1)img_seq,img_drv
產生圖像并通過axi發送給DUT,同時將數據發送給img_monitor用于產生對比數據。
2)sw config
模擬軟件行為,配置寄存器數據。
3)img_monitor
獲取原始img數據產生對比文件,然后拉取DUT中link層和phy層數據,進行對比。輸出對比結果。
圖3.1 UVM驗證架構
總結
簡單介紹了HDMI協議,并設計了HDMI顯示架構。完成了設計和仿真代碼。下一章將會介紹仿真和調試過程。
編輯:hfy
-
HDMI
+關注
關注
32文章
1734瀏覽量
152197 -
圖像處理
+關注
關注
27文章
1299瀏覽量
56837
發布評論請先 登錄
相關推薦
評論