HDMI显示图片
1,HDMI簡介
??VGA 接口體積較大,不利于便攜設(shè)備的集成;且傳輸?shù)哪M信號易受外界干擾,產(chǎn)生信號畸變。VGA接口之后,推出了DUI接口,DVI 是基于 TMDS(Transition Minimized Differential Signaling, 最小化傳輸差分信號)技術(shù)來傳輸數(shù)字信號。 TMDS 運(yùn)用先進(jìn)的編碼算法把 8bit 數(shù)據(jù)(R、 G、 B 中的每路基色信號)通過最小轉(zhuǎn)換編碼為 10bit 數(shù)據(jù)(包含行場同步信息、時(shí)鐘信息、數(shù)據(jù) DE、糾錯等),經(jīng)過直流均衡后,采用差分信號傳輸數(shù)據(jù),它和LVDS、 TTL 相比有較好的電磁兼容性能,可以用低成本的專用電纜實(shí)現(xiàn)長距離、高質(zhì)量的數(shù)字信號傳輸。數(shù)字視頻接口(DVI)是一種國際開放的接口標(biāo)準(zhǔn),在 PC、 DVD、高清晰電視(HDTV)、高清晰投影儀等設(shè)備上有廣泛的應(yīng)用。
??DVI 接口分為 3 大類: DVI-Analog(DVI-A)接口(12+5)只傳輸模擬信號,實(shí)質(zhì)就是 VGA 模擬傳輸接口規(guī)格; DVI-Digital(DVI-D)接口(18+1 和 24+1)是純數(shù)字的接口,只能傳輸數(shù)字信號,不兼容模擬信號; DVI-Integrated(DVI-I)接口(18+5 和 24+5)是兼容數(shù)字和模擬接口的。
??DVI接口的缺點(diǎn):對平板電視的兼容能力一般,對數(shù)字化的色差信號無法支持;由于考慮兼容性,預(yù)留不少引腳,造成接口體積較大;只能傳輸圖像信號,對于數(shù)字音頻信號的支持完全沒有考慮。
??HDMI 全稱“High Definition Multimedia Interface 高清多媒體接口”。是一種符合高清時(shí)代標(biāo)準(zhǔn)的全新數(shù)字化視頻/音頻接口技術(shù)。HDMI的傳輸原理依然是基于TMDS編碼技術(shù)。相比于DVI,HDMI接口體積更小;抗干擾能力強(qiáng);針對大尺寸數(shù)字平板電視分辨率進(jìn)行優(yōu)化,兼容性好;擁有強(qiáng)大的版權(quán)保護(hù)機(jī)制(HDCP);支持24bit色深處理(RGB,YCbCr);一根線纜實(shí)現(xiàn)數(shù)字音頻、視頻信號同步傳輸,有效降低使用成本和繁雜程度。
2,HDMI接口及引腳定義
??HDMI 規(guī)格書中規(guī)定了 HDMI 的 4 種接口類型,但其中 HDMI B Type 接口類型未在市場中出現(xiàn)過,市面上流通最廣的是 HDMI A Type、 HDMI C Type 和 HDMI D Type 接口類型。
??HDMI A Type 接口, 應(yīng)用于 HDMI1.0 版本,總共有 19pin,為最常見的 HDMI 接頭規(guī)格;HDMI C Type 接口, 俗稱 mini-HDMI,應(yīng)用于 HDMI1.3 版本,總共有 19pin,可以說是縮小版的 HDMI A type,但腳位定義有一定的改變;HDMI D Type 接口, 應(yīng)用于 HDMI1.4 版本,總共有 19pin,腳位定義有所改變。
??HDMI 接口之間使用 HDMI 信號線連接,不同類型的 HDMI 接口之間也可以使用連接線進(jìn)行轉(zhuǎn)接。
HDMI A Type 接口引腳圖
| 1 | 數(shù)據(jù) 2+ (TMDS Data2+) | 11 | 時(shí)鐘屏蔽 (TMDS Clock Shield) |
| 2 | 數(shù)據(jù) 2 屏蔽 (TMDS Data2 Shield) | 12 | 時(shí)鐘- (TMDS Clock–) |
| 3 | 數(shù)據(jù) 2- ( TMDS Data2-) | 13 | CEC |
| 4 | 數(shù)據(jù) 1+ (TMDS Data1+) | 14 | 保留 |
| 5 | 數(shù)據(jù) 1 屏蔽 (TMDS Data1 Shield) | 15 | DDC 時(shí)鐘線(SCL) |
| 6 | 數(shù)據(jù) 1- ( TMDS Data1-) | 16 | DDC 數(shù)據(jù)線(SDA) |
| 7 | 數(shù)據(jù) 0+ (TMDS Data0+) | 17 | DDC/CEC 地 (DDC/CEC GND) |
| 8 | 數(shù)據(jù) 0 屏蔽 (TMDS Data0 Shield) | 18 | +5V 電源 (Power) |
| 9 | 數(shù)據(jù) 0- ( TMDS Data0-) | 19 | 熱插拔檢測 (Hot Plug Detect) |
| 10 | 時(shí)鐘+ (TMDS Clock+) |
??由圖表可知, HDMI 接口共有 19 個引腳,分上下兩排,奇數(shù)在上,偶數(shù)在下,穿插排布。根據(jù)其功能,可以將引腳分為 4 類。
-
TMDS 通道:引腳 1-引腳 12。負(fù)責(zé)發(fā)送音頻、視頻及各種輔助數(shù)據(jù); 遵循 DVI1.0 規(guī)格的信號編碼方式; 視頻像素帶寬從 25 MHz 到 340 MHz(Type A, HDMI 1.3)或至680MHz (Type B)。帶寬低于 25MHz 的視頻信號如 NTSC480i 將以倍頻方式輸出; 每個像素的容許數(shù)據(jù)量從 24 位至 48 位。支持每秒 120 張畫面 1080p 分辨率畫面發(fā)送以及WQSXGA (3200 x 2048)分辨率;支持 RGB、 YCbCr 4:4:4(8-16 bits per component) 、 YCbCr 4:2:2(12bits per component) 、 YCbCr 4:2:0(HDMI 2.0) 等多種像素編碼方式; 音頻采樣率支持32kHz、 44.1kHz、 48kHz、88.2kHz 96kHz、 176.4kHz、 192kHz、 1536kHz(HDMI2.0) ; 音頻聲道數(shù)量最大 8 聲道。 HDMI 2.0 支持 32 聲道。音頻流規(guī)格為 IEC61937 兼容流,包括高流量無損信號如 Dolby TrueHD、 DTS-HD Master Audio。
-
DDC 通道:引腳 15、 16、 17。 DDC 全文為 Display Data Channel,譯為“顯示數(shù)據(jù)通道”; 發(fā)送端與接收端可利用 DDC 溝道得知彼此的發(fā)送與接收能力,但 HDMI 僅需單向獲知接收端(顯示器)的能力; DDC 通道使用 100kHz 時(shí)鐘頻率的 I2C 信號, 發(fā)送數(shù)據(jù)結(jié)構(gòu)為 VESA Enhanced EDID(V1.3)。
-
CEC 通道:引腳 13、 17。 CEC 全文為 Consumer Electronics Control, CEC 通道為必須預(yù)留線路,但可以不必實(shí)現(xiàn),作用是用來發(fā)送工業(yè)規(guī)格的 AV Link 協(xié)議信號,以便支持單一遙控器操作多臺 AV 機(jī)器, 為單芯線雙向串列總線。
-
其他通道:引腳 14 位保留引腳,無連接;引腳 18 為+5V 電源;引腳 19 位熱插拔檢測引腳。
3,HDMI顯示原理
??HDMI 系統(tǒng)架構(gòu)由信源端和接收端組成。某個設(shè)備可能有一個或多個 HDMI 輸入,一個或多個 HDMI 輸出。這些設(shè)備上,每個 HDMI 輸入都應(yīng)該遵循 HDMI 接收端規(guī)則, 每個 HDMI 輸出都應(yīng)該遵循 HDMI 信源端規(guī)則。HDMI數(shù)據(jù)傳輸框圖如下:
??HDMI 線纜和連接器提供四個差分線對,組成 TMDS 數(shù)據(jù)和時(shí)鐘通道, 這些通道用于傳遞視頻,音頻和輔助數(shù)據(jù); 另外, HDMI 提供一個 VESA DDC 通道, DDC 是用于配置和在一個單獨(dú)的信源端和一個單獨(dú)的接收端交換狀態(tài); 可選擇的 CEC在用戶的各種不同的音視頻產(chǎn)品中, 提供高水平的控制功能; 可選擇的 HDMI 以太網(wǎng)和音頻返回(HEAC),在連接的設(shè)備中提供以太網(wǎng)兼容的網(wǎng)絡(luò)數(shù)據(jù)和一個和 TMDS 相對方向的音頻回返通道;此外還有熱插拔檢測信號 HDP, 當(dāng)顯示器等 HDMI 接口的顯示設(shè)備通過 HDMI 接口與 HDMI 信源端相連或斷開連接時(shí), HDMI 信源端能夠通過 HPD 引腳檢測出
這一事件,并做出響應(yīng)。
4,TMDS簡介
??HDMI 中的 TMDS 傳輸系統(tǒng)分為兩個部分:發(fā)送端和接收端。 TMDS 發(fā)送端收到HDMI 接口傳來的表示 RGB 信號的 24 位并行數(shù)據(jù)(TMDS 對每個像素的 RGB 三原色分別按 8bit 編碼,即 R 信號有 8 位, G 信號有 8 位, B 信號有 8 位),然后對這些數(shù)據(jù)和時(shí)鐘信號進(jìn)行編碼和并/串轉(zhuǎn)換,再將表示 3 個 RGB 信號的數(shù)據(jù)和時(shí)鐘信號分別分配到獨(dú)立的傳輸通道發(fā)送出去。接收端接收來自發(fā)送端的串行信號,對其進(jìn)行解碼和串/并轉(zhuǎn)換,然后發(fā)送到顯示器的控制端。與此同時(shí)也接收時(shí)鐘信號,以實(shí)現(xiàn)同步。流程框圖如下
??TMDS 通道包括 3 個 RGB 數(shù)據(jù)傳輸通道和 1 個時(shí)鐘信號傳輸通道。每一通道都通過編碼算法,將 8 位的視頻、音頻數(shù)據(jù)轉(zhuǎn)換成最小化傳輸、直流平衡的 10 位數(shù)據(jù), 8 位數(shù)據(jù)經(jīng)過編碼和直流平衡得到 10 位最小化數(shù)據(jù),看似增加了冗余位,對傳輸鏈路的帶寬要求會更高,但事實(shí)上,通過這種算法得到的 10 位數(shù)據(jù)在更長的同軸電纜中傳輸?shù)目煽啃栽鰪?qiáng)了。最小化傳輸差分信號是通過異或及異或非等邏輯算法將原始 8 位數(shù)據(jù)轉(zhuǎn)換成 10 位數(shù)據(jù),前8 位數(shù)據(jù)由原始信號經(jīng)邏輯運(yùn)算后邏輯得到,第 9 位指示運(yùn)算的方式,第 10 位用來對應(yīng)直流平衡。
??要實(shí)現(xiàn) TMDS 通道傳輸,首先要將傳入的 8 位的并行數(shù)據(jù)進(jìn)行編碼、并/串轉(zhuǎn)換,添加第 9 位編碼位,將 8 位并行數(shù)據(jù)發(fā)送到 TMDS 接收端;將接收到的 8 位數(shù)據(jù)并/串轉(zhuǎn)換;隨后進(jìn)行最小化傳輸處理,加上第 9 位,即編碼過程。
??添加編碼位的數(shù)據(jù)需要進(jìn)行直流均衡處理。 直流平衡(DC-balanced)就是指在編碼過程中保證信道中直流偏移為零,使信道中傳輸數(shù)據(jù)包含的 1 與 0 的個數(shù)相同。方法是在添加編碼位的 9 位數(shù)據(jù)的后面加上第 10 位數(shù)據(jù), 保證 10 位數(shù)據(jù)中 1 與 0 個數(shù)相同。這樣,傳輸?shù)臄?shù)據(jù)趨于直流平衡,使信號對傳輸線的電磁干擾減少,提高信號傳輸?shù)目煽啃浴?/p>
??直流均衡處理后的 10 位數(shù)據(jù)需要進(jìn)行單端轉(zhuǎn)差分處理。 TMDS 差分傳動技術(shù)是一種利用 2 個引腳間電壓差來傳送信號的技術(shù)。傳輸數(shù)據(jù)的數(shù)值(“0”或者“1”)由兩腳間電壓正負(fù)極性和大小決定。即采用 2 根線來傳輸信號,一根線上傳輸原來的信號,另一根線上傳輸與原來信號相反的信號。這樣接收端就可以通過讓一根線上的信號減去另一根線上的信號的方式來屏蔽電磁干擾,從而得到正確的信號。
5,HDMI顯示圖片的實(shí)現(xiàn)
設(shè)計(jì)的整體框圖如下
5.1 clk_gen 時(shí)鐘產(chǎn)生模塊
??通過PLL IP核產(chǎn)生兩路輸出時(shí)鐘,分別為25MHz,125MHz為其他模塊提供時(shí)鐘。
5.2 vga_pic,vga_ctrl 顯示數(shù)據(jù)的產(chǎn)生與控制
??vga_ctrl模塊輸出坐標(biāo)數(shù)據(jù),圖像有效信號,行場同步信號以及像素?cái)?shù)據(jù)。代碼如下
module vga_ctrl (input wire vga_clk , //輸入工作時(shí)鐘,頻率25MHzinput wire sys_rst_n , //輸入復(fù)位信號,低電平有效input wire [15:0] pix_data , //輸入像素點(diǎn)色彩信息output wire [11:0] pix_x , //輸出VGA有效顯示區(qū)域像素點(diǎn)X軸坐標(biāo)output wire [11:0] pix_y , //輸出VGA有效顯示區(qū)域像素點(diǎn)Y軸坐標(biāo)output wire hsync , //輸出行同步信號output wire vsync , //輸出場同步信號output wire rgb_valid ,output wire [15:0] rgb //輸出像素點(diǎn)色彩信息 );//********************************************************************// //****************** Parameter and Internal Signal *******************// //********************************************************************// //parameter define parameter H_SYNC = 10'd96 , //行同步H_BACK = 10'd40 , //行時(shí)序后沿H_LEFT = 10'd8 , //行時(shí)序左邊框H_VALID = 10'd640 , //行有效數(shù)據(jù)H_RIGHT = 10'd8 , //行時(shí)序右邊框H_FRONT = 10'd8 , //行時(shí)序前沿H_TOTAL = 10'd800 ; //行掃描周期 parameter V_SYNC = 10'd2 , //場同步V_BACK = 10'd25 , //場時(shí)序后沿V_TOP = 10'd8 , //場時(shí)序上邊框V_VALID = 10'd480 , //場有效數(shù)據(jù)V_BOTTOM = 10'd8 , //場時(shí)序下邊框V_FRONT = 10'd2 , //場時(shí)序前沿V_TOTAL = 10'd525 ; //場掃描周期//wire define wire pix_data_req ; //像素點(diǎn)色彩信息請求信號//reg define reg [11:0] cnt_h ; //行同步信號計(jì)數(shù)器 reg [11:0] cnt_v ; //場同步信號計(jì)數(shù)器//********************************************************************// //***************************** Main Code ****************************// //********************************************************************////cnt_h:行同步信號計(jì)數(shù)器 always@(posedge vga_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)cnt_h <= 12'd0 ;else if(cnt_h == H_TOTAL - 1'd1)cnt_h <= 12'd0 ;elsecnt_h <= cnt_h + 1'd1 ;//hsync:行同步信號 assign hsync = (cnt_h <= H_SYNC - 1'd1) ? 1'b1 : 1'b0 ;//cnt_v:場同步信號計(jì)數(shù)器 always@(posedge vga_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)cnt_v <= 12'd0 ;else if((cnt_v == V_TOTAL - 1'd1) && (cnt_h == H_TOTAL-1'd1))cnt_v <= 12'd0 ;else if(cnt_h == H_TOTAL - 1'd1)cnt_v <= cnt_v + 1'd1 ;elsecnt_v <= cnt_v ;//vsync:場同步信號 assign vsync = (cnt_v <= V_SYNC - 1'd1) ? 1'b1 : 1'b0 ;//rgb_valid:VGA有效顯示區(qū)域 assign rgb_valid = (((cnt_h >= H_SYNC + H_BACK + H_LEFT)&& (cnt_h < H_SYNC + H_BACK + H_LEFT + H_VALID))&&((cnt_v >= V_SYNC + V_BACK + V_TOP)&& (cnt_v < V_SYNC + V_BACK + V_TOP + V_VALID)))? 1'b1 : 1'b0;//pix_data_req:像素點(diǎn)色彩信息請求信號,超前rgb_valid信號一個時(shí)鐘周期 assign pix_data_req = (((cnt_h >= H_SYNC + H_BACK + H_LEFT - 1'b1)&& (cnt_h < H_SYNC + H_BACK + H_LEFT + H_VALID - 1'b1))&&((cnt_v >= V_SYNC + V_BACK + V_TOP)&& (cnt_v < V_SYNC + V_BACK + V_TOP + V_VALID)))? 1'b1 : 1'b0;//pix_x,pix_y:VGA有效顯示區(qū)域像素點(diǎn)坐標(biāo) assign pix_x = (pix_data_req == 1'b1)? (cnt_h - (H_SYNC + H_BACK + H_LEFT - 1'b1)) : 12'hfff; assign pix_y = (pix_data_req == 1'b1)? (cnt_v - (V_SYNC + V_BACK + V_TOP)) : 12'hfff;//rgb:輸出像素點(diǎn)色彩信息 assign rgb = (rgb_valid == 1'b1) ? pix_data : 16'b0 ;endmodulevga_pic模塊,pix_x,pix_y坐標(biāo)值處于圖像顯示有效區(qū)域時(shí),從ROM中讀取像素?cái)?shù)據(jù),然后輸出,代碼如下
module vga_pic (input wire vga_clk , //輸入工作時(shí)鐘,頻率25MHzinput wire sys_rst_n , //輸入復(fù)位信號,低電平有效input wire [11:0] pix_x , //輸入VGA有效顯示區(qū)域像素點(diǎn)X軸坐標(biāo)input wire [11:0] pix_y , //輸入VGA有效顯示區(qū)域像素點(diǎn)Y軸坐標(biāo)output [15:0] pix_data //輸出像素點(diǎn)色彩信息 );//********************************************************************// //****************** Parameter and Internal Signal *******************// //********************************************************************// //parameter define parameter CHAR_B_H = 10'd192 , CHAR_B_V = 10'd208 ; parameter CHAR_W = 10'd100 ,CHAR_H = 10'd100 ;parameter BLACK = 12'h000 ,WHITE = 12'hfff ,BLUE = 12'h00F ; //藍(lán)色wire rom_req;reg [13:0] rom_addr; wire [15:0] rom_data;//何時(shí)從rom中讀取數(shù)據(jù) assign rom_req = (((pix_x >= CHAR_B_H - 1'b1) && (pix_x < (CHAR_B_H + CHAR_W - 1'b1)))&&((pix_y >= CHAR_B_V) && (pix_y < (CHAR_B_V + CHAR_H)))) ? 1'b1:1'b0;//產(chǎn)生rom地址 always @(posedge vga_clk,negedge sys_rst_n) beginif(!sys_rst_n)rom_addr <= 14'd0;else if(rom_req == 1'b1) beginif(rom_addr == 14'd9999)rom_addr <= 14'd0;elserom_addr <= rom_addr + 1;endelserom_addr <= rom_addr; end//輸出數(shù)據(jù) rom_pic rom_pic_inst(.clock (vga_clk) ,.address (rom_addr) ,.q (rom_data) );assign pix_data = (rom_req == 1'b1) ? rom_data:WHITE;endmodule5.3 hdmi_ctrl模塊
??該模塊實(shí)現(xiàn)對輸入的顏色分量及時(shí)鐘進(jìn)行編碼,并串轉(zhuǎn)換,差分輸出的功能,模塊框圖如下
??按照上面的模塊框圖,首先對編碼模塊進(jìn)行編寫,編碼模塊按照官方手冊進(jìn)行編寫。編碼模塊參考流程圖中個參數(shù)說明。
| D, C0, C1, DE | 編碼器輸入數(shù)據(jù)。 D 是八位像素?cái)?shù)據(jù), C1 和 C0 是通道的控制數(shù)據(jù),DE 是數(shù)據(jù)使能。 |
| cnt | 寄存器,用來跟蹤數(shù)據(jù)流的不一致,正值表示發(fā)送的 1 的個數(shù)超過的數(shù)目,負(fù)數(shù)表示發(fā)送的 0 的個數(shù)超過的數(shù)目。表達(dá)式 cnt{t-1}表示相對于輸入數(shù)據(jù)前一個集的前一個不一致值。表達(dá)式 cnt{t}表示相對于輸入數(shù)據(jù)當(dāng)前集的新的不一致設(shè)置。 |
| q_out | 完成編碼后的 10bit 數(shù)據(jù)。 |
| N1{x} | 返回參數(shù) x 中“1”的個數(shù)。 |
| N0{x} | 返回參數(shù) x 中“1”的個數(shù)。 |
編碼模塊參考流程圖
代碼如下
并串轉(zhuǎn)換模塊代碼
module par_to_ser (input wire clk_5x , //輸入系統(tǒng)時(shí)鐘input wire [9:0] par_data , //輸入并行數(shù)據(jù)output wire ser_data_p , //輸出串行差分?jǐn)?shù)據(jù)output wire ser_data_n //輸出串行差分?jǐn)?shù)據(jù) );//********************************************************************// //****************** Parameter and Internal Signal *******************// //********************************************************************// //wire define wire [4:0] data_rise = {par_data[8],par_data[6],par_data[4],par_data[2],par_data[0]}; wire [4:0] data_fall = {par_data[9],par_data[7],par_data[5],par_data[3],par_data[1]};//reg define reg [4:0] data_rise_s = 0; reg [4:0] data_fall_s = 0; reg [2:0] cnt = 0;always @ (posedge clk_5x)begincnt <= (cnt[2]) ? 3'd0 : cnt + 3'd1;data_rise_s <= cnt[2] ? data_rise : data_rise_s[4:1];data_fall_s <= cnt[2] ? data_fall : data_fall_s[4:1];end//********************************************************************// //**************************** Instantiate ***************************// //********************************************************************// //------------- ddio_out_inst0 ------------- altddio ddio_out_inst0 (.datain_h (data_rise_s[0] ),.datain_l (data_fall_s[0] ),.outclock (~clk_5x ),.dataout (ser_data_p ) );//------------- ddio_out_inst1 ------------- altddio ddio_out_inst1 (.datain_h (~data_rise_s[0]),.datain_l (~data_fall_s[0]),.outclock (~clk_5x ),.dataout (ser_data_n ) );endmodulehdmi_ctrl頂層模塊代碼
module hdmi_ctrl (input wire clk_1x , //輸入系統(tǒng)時(shí)鐘input wire clk_5x , //輸入5倍系統(tǒng)時(shí)鐘input wire sys_rst_n , //復(fù)位信號,低有效input wire [7:0] rgb_blue , //藍(lán)色分量input wire [7:0] rgb_green , //綠色分量input wire [7:0] rgb_red , //紅色分量input wire hsync , //行同步信號input wire vsync , //場同步信號input wire de , //使能信號output wire hdmi_clk_p ,output wire hdmi_clk_n , //時(shí)鐘差分信號output wire hdmi_r_p ,output wire hdmi_r_n , //紅色分量差分信號output wire hdmi_g_p ,output wire hdmi_g_n , //綠色分量差分信號output wire hdmi_b_p ,output wire hdmi_b_n //藍(lán)色分量差分信號 );//********************************************************************// //****************** Parameter and Internal Signal *******************// //********************************************************************// wire [9:0] red ; //8b轉(zhuǎn)10b后的紅色分量 wire [9:0] green ; //8b轉(zhuǎn)10b后的綠色分量 wire [9:0] blue ; //8b轉(zhuǎn)10b后的藍(lán)色分量//********************************************************************// //**************************** Instantiate ***************************// //********************************************************************// //------------- encode_inst0 ------------- encode encode_inst0 (.sys_clk (clk_1x ),.sys_rst_n (sys_rst_n ),.data_in (rgb_blue ),.c0 (hsync ),.c1 (vsync ),.de (de ),.data_out (blue ) );//------------- encode_inst1 ------------- encode encode_inst1 (.sys_clk (clk_1x ),.sys_rst_n (sys_rst_n ),.data_in (rgb_green ),.c0 (hsync ),.c1 (vsync ),.de (de ),.data_out (green ) );//------------- encode_inst2 ------------- encode encode_inst2 (.sys_clk (clk_1x ),.sys_rst_n (sys_rst_n ),.data_in (rgb_red ),.c0 (hsync ),.c1 (vsync ),.de (de ),.data_out (red ) );//------------- par_to_ser_inst0 ------------- par_to_ser par_to_ser_inst0 (.clk_5x (clk_5x ),.par_data (blue ),.ser_data_p (hdmi_b_p ),.ser_data_n (hdmi_b_n ) );//------------- par_to_ser_inst1 ------------- par_to_ser par_to_ser_inst1 (.clk_5x (clk_5x ),.par_data (green ),.ser_data_p (hdmi_g_p ),.ser_data_n (hdmi_g_n ) );//------------- par_to_ser_inst2 ------------- par_to_ser par_to_ser_inst2 (.clk_5x (clk_5x ),.par_data (red ),.ser_data_p (hdmi_r_p ),.ser_data_n (hdmi_r_n ) );//------------- par_to_ser_inst3 ------------- par_to_ser par_to_ser_inst3 (.clk_5x (clk_5x ),.par_data (10'b1111100000),.ser_data_p (hdmi_clk_p ),.ser_data_n (hdmi_clk_n ) );endmodule整個工程的頂層模塊代碼
module hdmi_bar (input wire sys_clk , //輸入工作時(shí)鐘,頻率50MHzinput wire sys_rst_n , //輸入復(fù)位信號,低電平有效output wire ddc_scl ,output wire ddc_sda ,output wire tmds_clk_p ,output wire tmds_clk_n , //HDMI時(shí)鐘差分信號output wire [2:0] tmds_data_p ,output wire [2:0] tmds_data_n //HDMI圖像差分信號 );//********************************************************************// //****************** Parameter and Internal Signal *******************// //********************************************************************// //wire define wire vga_clk ; //VGA工作時(shí)鐘,頻率25MHz wire clk_5x ; wire locked ; //PLL locked信號 wire rst_n ; //VGA模塊復(fù)位信號 wire [11:0] pix_x ; //VGA有效顯示區(qū)域X軸坐標(biāo) wire [11:0] pix_y ; //VGA有效顯示區(qū)域Y軸坐標(biāo) wire [15:0] pix_data; //VGA像素點(diǎn)色彩信息 wire hsync ; //輸出行同步信號 wire vsync ; //輸出場同步信號 wire [15:0] rgb ; //輸出像素信息 wire rgb_valid;//rst_n:VGA模塊復(fù)位信號 assign rst_n = (sys_rst_n & locked); assign ddc_scl = 1'b1; assign ddc_sda = 1'b1;//********************************************************************// //*************************** Instantiation **************************// //********************************************************************////------------- clk_gen_inst ------------- clk_gen clk_gen_inst (.areset (~sys_rst_n ), //輸入復(fù)位信號,高電平有效,1bit.inclk0 (sys_clk ), //輸入50MHz晶振時(shí)鐘,1bit.c0 (vga_clk ), //輸出VGA工作時(shí)鐘,頻率25Mhz,1bit.c1 (clk_5x ),.locked (locked ) //輸出pll locked信號,1bit );//------------- vga_ctrl_inst ------------- vga_ctrl vga_ctrl_inst (.vga_clk (vga_clk ), //輸入工作時(shí)鐘,頻率25MHz,1bit.sys_rst_n (rst_n ), //輸入復(fù)位信號,低電平有效,1bit.pix_data (pix_data ), //輸入像素點(diǎn)色彩信息,16bit.pix_x (pix_x ), //輸出VGA有效顯示區(qū)域像素點(diǎn)X軸坐標(biāo),10bit.pix_y (pix_y ), //輸出VGA有效顯示區(qū)域像素點(diǎn)Y軸坐標(biāo),10bit.hsync (hsync ), //輸出行同步信號,1bit.vsync (vsync ), //輸出場同步信號,1bit.rgb_valid (rgb_valid ),.rgb (rgb ) //輸出像素點(diǎn)色彩信息,16bit );//------------- vga_pic_inst ------------- vga_pic vga_pic_inst (.vga_clk (vga_clk ), //輸入工作時(shí)鐘,頻率25MHz,1bit.sys_rst_n (rst_n ), //輸入復(fù)位信號,低電平有效,1bit.pix_x (pix_x ), //輸入VGA有效顯示區(qū)域像素點(diǎn)X軸坐標(biāo),10bit.pix_y (pix_y ), //輸入VGA有效顯示區(qū)域像素點(diǎn)Y軸坐標(biāo),10bit.pix_data (pix_data ) //輸出像素點(diǎn)色彩信息,16bit);//------------- hdmi_ctrl_inst ------------- hdmi_ctrl hdmi_ctrl_inst (.clk_1x (vga_clk ), //輸入系統(tǒng)時(shí)鐘.clk_5x (clk_5x ), //輸入5倍系統(tǒng)時(shí)鐘.sys_rst_n (rst_n ), //復(fù)位信號,低有效.rgb_blue ({rgb[4:0],3'b0} ), //藍(lán)色分量.rgb_green ({rgb[10:5],2'b0} ), //綠色分量.rgb_red ({rgb[15:11],3'b0} ), //紅色分量.hsync (hsync ), //行同步信號.vsync (vsync ), //場同步信號.de (rgb_valid ), //使能信號.hdmi_clk_p (tmds_clk_p ),.hdmi_clk_n (tmds_clk_n ), //時(shí)鐘差分信號.hdmi_r_p (tmds_data_p[2] ),.hdmi_r_n (tmds_data_n[2] ), //紅色分量差分信號.hdmi_g_p (tmds_data_p[1] ),.hdmi_g_n (tmds_data_n[1] ), //綠色分量差分信號.hdmi_b_p (tmds_data_p[0] ),.hdmi_b_n (tmds_data_n[0] ) //藍(lán)色分量差分信號 );endmodule6,顯示結(jié)果
彩條顯示
圖片顯示
總結(jié)
- 上一篇: 除了平台和功能外,企业年会直播方案还要考
- 下一篇: 计算机x6接口,vivo X6有什么接口