第六章 圖像顯示處理,經(jīng)典再現(xiàn)
16.HDMI顯示彩色風(fēng)景圖
? ? ? ?HDMI接口在消費(fèi)類(lèi)電子行業(yè),比如筆記本電腦、液晶電視、投影儀等產(chǎn)品中均得到了廣泛的應(yīng)用,一些專(zhuān)業(yè)的視頻設(shè)備如攝像機(jī)、視頻切換器、機(jī)頂盒等也都會(huì)集成HDMI接口,HDMI是新一代的多媒體接口標(biāo)準(zhǔn)即高清多媒體接口,作為應(yīng)用最為廣泛的音視頻傳輸接口,熟練掌握HDMI接口的FPGA開(kāi)發(fā),一方面可以加深對(duì)底層8B/10B編碼和并轉(zhuǎn)串的理解,另一方面豐富簡(jiǎn)歷的同時(shí)也更加方便工作中驗(yàn)證FPGA圖像視頻處理。
? ? ? HDMI接口可以同時(shí)傳輸視頻和音頻,極大簡(jiǎn)化了設(shè)備的接口和連線,也提供了更高的數(shù)據(jù)傳輸帶寬,能傳輸無(wú)壓縮的數(shù)字音頻和高分辨率視頻信號(hào)。HDMI向下兼容DVI即數(shù)字視頻接口,但DVI只能用來(lái)傳輸視頻,不能同時(shí)傳輸音頻,這也是兩者主要的差別,如圖1所示是豌豆開(kāi)發(fā)板Artix7上HDMI電路。
圖1 豌豆開(kāi)發(fā)板Artix7上HDMI電路
? ? ? ? 下面我們來(lái)對(duì)照原理圖,比較詳細(xì)地說(shuō)明HDMI接口中各個(gè)引腳的作用,如下圖2所示是HDMI接口HDMI_D_N/P[2:0]、HDMI_CLK_N/P、HDMI_HPD引腳示意圖,大家可以清楚地看到3個(gè)數(shù)據(jù)通道HDMI_D_N/P[2:0]和1個(gè)時(shí)鐘通道HDMI_CLK_N/P作為數(shù)據(jù)傳輸總線直接與HDMI接口線束的差分引腳相連。HDMI_HPD即為熱拔插檢測(cè),當(dāng)視頻設(shè)備與接收設(shè)備通過(guò)HDMI連接時(shí),接收設(shè)備將HDMI_HPD置為高電平并通知發(fā)送設(shè)備,當(dāng)發(fā)送設(shè)備檢測(cè)到HDMI_HPD為低電平時(shí)則表明斷開(kāi)連接。
? ? ? ? 如圖3所示是HDMI接口中HDMI_OUT_EN引腳示意圖,HDMI_OUT_EN信號(hào)用于設(shè)置HDMI接口的輸入輸出模式,當(dāng)其為高電平時(shí)作為輸出端,這時(shí)候由豌豆開(kāi)發(fā)板輸出 HDMI接口的5V電源,HDMI_HPD將作為輸入信號(hào)使用;當(dāng)HDMI_OUT_EN為低電平時(shí),開(kāi)發(fā)板上的HDMI接口作為輸入端,接口上的5V電源將由外部連接設(shè)備提供,同時(shí)HDMI_HPD將輸出高電平,用于指示HDMI連接狀態(tài)。
圖2 HDMI接口HDMI_D_N/P[2:0]、HDMI_CLK_N/P、HDMI_HPD引腳示意圖
圖3 HDMI接口HDMI_OUT_EN引腳示意圖
? ? ? 如圖4所示,HDMI_SCL和 HDMI_SDA是HDMI接口的顯示數(shù)據(jù)通道,用于HDMI發(fā)送端和接收端之間交換一些配置信息,并通過(guò)I2C協(xié)議通信。發(fā)送端通過(guò)顯示數(shù)據(jù)通道,讀取接收端保存在EEPROM中的EDID數(shù)據(jù),獲取接收端的信息,確認(rèn)接收端終端顯示的設(shè)置和功能,決定跟接收端之間以什么格式傳輸音視頻數(shù)據(jù)。
圖4 HDMI接口HDMI_SDA、HDMI_SCL引腳示意圖
? ? ? ? DVI和HDMI接口協(xié)議在物理層均用了TMDS標(biāo)準(zhǔn)傳輸音視頻數(shù)據(jù),TMDS即最小化傳輸差分信號(hào),如圖5所示是HDMI接口引腳定義,DVI和HDMI視頻接口中使用差分信號(hào)傳輸高速串行數(shù)據(jù),TMDS差分傳輸技術(shù)用兩個(gè)引腳作為一組差分對(duì)傳輸一路信號(hào),例如“數(shù)據(jù)2+”、“數(shù)據(jù)2-”;“數(shù)據(jù)1+”、“數(shù)據(jù)1-”;“數(shù)據(jù)0+”、“數(shù)據(jù)0-”來(lái)傳輸一路信號(hào),用這兩個(gè)引腳間的電壓差的正負(fù)極性和大小來(lái)決定傳輸數(shù)據(jù)的數(shù)值0或者1。
圖5 HDMI接口引腳定義
? ? ? ?因?yàn)檫@個(gè)例程中只使用了HDMI接口來(lái)顯示圖像,并沒(méi)有傳輸音頻數(shù)據(jù),所以暫時(shí)只需要實(shí)現(xiàn)DVI接口的驅(qū)動(dòng)邏輯即可,在這里我們?cè)俸?jiǎn)單了解一下TMDS視頻傳輸協(xié)議。
? ? ? ?如圖6所示是TMDS發(fā)送端和接收端的連接示意圖,DVI或者HDMI視頻傳輸所用的TMDS連接通過(guò)4個(gè)串行通道實(shí)現(xiàn),即為3個(gè)TMDS數(shù)據(jù)通道和1個(gè)TMDS時(shí)鐘通道,而TMDS時(shí)鐘通道又以某個(gè)固定的速率運(yùn)行,顯然這個(gè)速率和視頻的分辨率成比例。
圖6 TMDS發(fā)送端和接收端的連接示意圖
? ? ? ?對(duì)于DVI來(lái)說(shuō),其中3個(gè)通道分別用于傳輸視頻中每個(gè)像素點(diǎn)的紅、綠、藍(lán)三個(gè)顏色分量,HDMI默認(rèn)也是使用3個(gè)RGB通道,但它卻可以選擇傳輸像素點(diǎn)的亮度和色度信息等。第4個(gè)通道是時(shí)鐘通道,用于傳輸像素時(shí)鐘,獨(dú)立的TMDS時(shí)鐘通道為接收端提供接收的參考頻率,用來(lái)保證數(shù)據(jù)在接收端可以被正確接收。
? ? ? 每個(gè)TMDS鏈路都包括3個(gè)傳輸RGB信號(hào)的數(shù)據(jù)通道和1個(gè)傳輸時(shí)鐘信號(hào)的通道,且每個(gè)數(shù)據(jù)通道都會(huì)通過(guò)編碼算法,將8位的視、音頻數(shù)據(jù)轉(zhuǎn)換成最小化傳輸、直流平衡的10位數(shù)據(jù),這也就使得數(shù)據(jù)的傳輸和恢復(fù)更加可靠。
? ? ? ? 簡(jiǎn)單地總結(jié)如下:如果每個(gè)像素點(diǎn)的顏色深度為24位,即RGB每個(gè)顏色分量各占8位,那么首先每個(gè)通道上的顏色數(shù)據(jù)將通過(guò)一個(gè)8B/10B的編碼器來(lái)轉(zhuǎn)換成一個(gè)10位的像素字符,接著這10位的字符通過(guò)并串轉(zhuǎn)換器轉(zhuǎn)換成串行數(shù)據(jù),最后再由TMDS數(shù)據(jù)通道發(fā)送出去,需要注意的是這個(gè)10:1的并轉(zhuǎn)串過(guò)程所生成的串行數(shù)據(jù)速率則是實(shí)際像素時(shí)鐘速率的10倍,如圖7所示是FPGA基于IO模擬HDMI的實(shí)現(xiàn)原理示意圖。
? ? ? ? 在系統(tǒng)地了解過(guò)FPGA基于IO模擬HDMI的實(shí)現(xiàn)原理后,實(shí)際上對(duì)于用戶而言,如果想要在FPGA上去IO模擬實(shí)現(xiàn)HDMI成像,那么只需要解決2個(gè)問(wèn)題即可:1.還原TMDS視頻傳輸協(xié)議即8B/10B編碼;2.實(shí)現(xiàn)并轉(zhuǎn)串的過(guò)程即把8B/10B編碼后的10位數(shù)據(jù)通過(guò)HDMI接口上的差分對(duì)把數(shù)據(jù)傳輸出去。
圖7 FPGA基于IO模擬HDMI的實(shí)現(xiàn)原理示意圖
? ? ? 那么下面我們就來(lái)詳細(xì)地介紹:如何還原TMDS視頻傳輸協(xié)議、如何實(shí)現(xiàn)10位數(shù)據(jù)并轉(zhuǎn)串成1位數(shù)據(jù)送HDMI差分對(duì)收發(fā),如圖8所示是TMDS編碼算法的示意圖,TMDS通過(guò)邏輯算法實(shí)際上是將8位字符數(shù)據(jù)通過(guò)最小轉(zhuǎn)換編碼為10位字符數(shù)據(jù),首先前8位數(shù)據(jù)由原始信號(hào)經(jīng)運(yùn)算后獲得,第9位表示運(yùn)算的方式,其中1表示異或0表示異或非,接著經(jīng)過(guò)直流平衡后,就獲得了第10位,而第10位本質(zhì)是一個(gè)反轉(zhuǎn)標(biāo)志位,1表示進(jìn)行了反轉(zhuǎn)而0表示沒(méi)有反轉(zhuǎn),從而達(dá)到直流平衡,整個(gè)過(guò)程中采用差分信號(hào)傳輸數(shù)據(jù)。
? ? ? ?直流平衡就是指在編碼過(guò)程中保證信道中直流偏移為零,方法便是在原來(lái)的9位數(shù)據(jù)的后面加上第10位數(shù)據(jù),這樣傳輸?shù)臄?shù)據(jù)則趨于直流平衡,使信號(hào)對(duì)傳輸線的電磁干擾減少,從而提高信號(hào)傳輸?shù)目煽啃浴?/p>
? ? ? ?在這里我們不動(dòng)手還原整個(gè)TMDS編碼算法,調(diào)用官方VHDL已經(jīng)編寫(xiě)好的TMDSEncoder模塊,直接把這個(gè)模塊例化到整個(gè)工程的頂層文件當(dāng)中即可,感興趣的同學(xué)可以查閱“HDMI1.4規(guī)范中文版”文檔對(duì)此有深入說(shuō)明。
?
圖8 TMDS編碼算法示意圖
? ? ? ? 如圖8所示是Oserdes通過(guò)DDR雙邊緣觸發(fā)傳輸HDMI數(shù)據(jù)流示意圖,大家不妨回憶回憶之前我們?cè)谇д拙W(wǎng)口時(shí)候?qū)W習(xí)到的SelectIO IP核,實(shí)際上并轉(zhuǎn)串、串轉(zhuǎn)并也可以說(shuō)是FPGA高速接口中常用到的設(shè)計(jì),朋友們可以通過(guò)直接例化Iserdes和Oserdes原語(yǔ)來(lái)實(shí)現(xiàn),Iserdes模塊的作用在于實(shí)現(xiàn)高速源同步輸入數(shù)據(jù)的串并轉(zhuǎn)換,而Oserdes模塊的作用在于實(shí)現(xiàn)高速源同步輸出數(shù)據(jù)的并串轉(zhuǎn)換。
? ? ? Serdes支持sdr和ddr兩個(gè)模式,前者是單邊緣觸發(fā)傳輸,后者是雙邊緣觸發(fā)傳輸,當(dāng)然每個(gè)FPGA工程師的習(xí)慣不同,有的喜歡直接例化原語(yǔ)來(lái)實(shí)現(xiàn)Serdes串并轉(zhuǎn)換或者并串轉(zhuǎn)換的目的,有的則喜歡通過(guò)例化SelectIO IP核來(lái)實(shí)現(xiàn),畢竟IP核圖形化界面配置以及對(duì)應(yīng)的說(shuō)明手冊(cè)看起來(lái)可能比原語(yǔ)更直觀一些。
? ? ? ?大家可以對(duì)照?qǐng)D9,思考下如何實(shí)現(xiàn)并轉(zhuǎn)串的過(guò)程即把8B/10B編碼后的10位數(shù)據(jù)通過(guò)HDMI接口上的差分對(duì)把數(shù)據(jù)傳輸出去,這里假設(shè)video_driver驅(qū)動(dòng)模塊的模塊時(shí)鐘是pixel_clk,顯然為了實(shí)現(xiàn)10位到1位的并轉(zhuǎn)串處理,如果是sdr單邊緣觸發(fā)傳輸,那么 需要一個(gè)相對(duì)于pixel_clk時(shí)鐘快十倍的pixel_clk_sdr時(shí)鐘作為數(shù)據(jù)傳輸?shù)膮⒖紩r(shí)鐘,如果是ddr雙邊緣觸發(fā)傳輸,那么則需要一個(gè)相對(duì)于pixel_clk時(shí)鐘快五倍的pixel_clk_ddr時(shí)鐘作為數(shù)據(jù)傳輸?shù)膮⒖紩r(shí)鐘即可。
圖9 Oserdes通過(guò)DDR雙邊緣觸發(fā)傳輸HDMI數(shù)據(jù)流示意圖
? ? ? ? 在這個(gè)例程中,我們?nèi)?shí)現(xiàn)一個(gè)HDMI接口顯示彩色風(fēng)景圖片的目標(biāo),考慮XC7A35T的BRAM資源有限,所以這里用ROM表事先存儲(chǔ)一張分辨率是320*240分辨率的風(fēng)景圖片,通過(guò)HDMI接口顯示在分辨率是640*480屏幕的正中間,如圖10所示是Img2Lcd插件,利用這個(gè)插件我們可以把.jpg格式的圖片每個(gè)像素值都提取出來(lái)并轉(zhuǎn)換為RGB565格式的文件保存,為了方便實(shí)驗(yàn),筆者為大家準(zhǔn)備了10張已經(jīng)提取好的.jpg文件,先通過(guò)word保存再把它們從格式上轉(zhuǎn)換為ROM IP核支持的.coe文件。
?圖10 Img2Lcd插件提取.jpg圖片的各點(diǎn)像素值
? ? ? ?如表1所示是video_driver模塊信號(hào)列表,在這個(gè)模塊中和上個(gè)例程中VGA相似,我們需要實(shí)現(xiàn)底層的RGB565驅(qū)動(dòng)、行場(chǎng)信號(hào)和hdmi接口使能信號(hào)時(shí)序,如圖11所示是HDMI驅(qū)動(dòng)模塊的代碼設(shè)計(jì),注意到幾個(gè)地方:1.屏幕的分辨率是640*480,而圖片的大小是320*240,所以需要通過(guò)代碼實(shí)現(xiàn)人為把圖片放到屏幕顯示區(qū)域的正中間;2.需要把video_en信號(hào)在顯示圖片的區(qū)域內(nèi)拉高,在其區(qū)域外拉低,如圖6-20所示是HDMI驅(qū)動(dòng)模塊的代碼設(shè)計(jì)。
信號(hào)列表 | ||
信號(hào)名 |
I/O |
位寬 |
pixel_clk |
I |
1 |
rst_n |
I |
1 |
video_hs |
O |
1 |
video_vs |
O |
1 |
video_rgb |
O |
16 |
video_en |
O |
1 |
表1 video_driver模塊信號(hào)列表
圖11 HDMI驅(qū)動(dòng)模塊的代碼設(shè)計(jì)
? ? ? ?如下圖12和13所示,大家打開(kāi)Vivado后選擇SelectIO IP核,這里需要對(duì)IP核數(shù)據(jù)總線和時(shí)鐘類(lèi)型進(jìn)行如下配置,并且使IP核可以實(shí)現(xiàn)10位到1位的DDR并串轉(zhuǎn)換的目的。
? ? ? ?如圖12所示,在IP核的數(shù)據(jù)總線設(shè)置中選擇DDR雙邊緣數(shù)據(jù)傳輸,數(shù)據(jù)傳輸方向?yàn)檩敵?,?shù)據(jù)位寬為10位,差分對(duì)傳輸使用標(biāo)準(zhǔn)的TMDS 33V電平。如圖13所示,在IP核的時(shí)鐘類(lèi)型設(shè)置中也選擇差分對(duì)傳輸使用標(biāo)準(zhǔn)的TMDS 33V電平即可。
圖12 SelectIO IP核的數(shù)據(jù)總線設(shè)置
圖13 SelectIO IP核的時(shí)鐘類(lèi)型設(shè)置
? ? ? ? 如圖14所示是HDMI顯示彩色風(fēng)景圖頂層文件的例化,但在這里有4個(gè)地方要特別注意:
? ? ? 1. 因?yàn)镠DMI接口用了RGB的3個(gè)通道,對(duì)應(yīng)需要3個(gè)TMDSEncoder模塊去實(shí)現(xiàn)8B/10B編碼轉(zhuǎn)換,大家可以再查閱圖6-15所示的TMDS發(fā)送端和接收端的連接示意圖,其中紅藍(lán)色通道單獨(dú)分開(kāi)其TMDSEncoder模塊的C0_I、C1_I的控制信號(hào)設(shè)置為0即可,而綠色通道需要把行場(chǎng)同步信號(hào)例化到TMDSEncoder模塊的C0_I、C1_I,同時(shí)把video_en使能信號(hào)都例化到TMDSEncoder模塊的DE_I;
? ? ?2. 因?yàn)槭荝GB565的輸出格式,需要人為把HDMI驅(qū)動(dòng)模塊輸出的16位RGB565轉(zhuǎn)換成24位RGB888格式,對(duì)應(yīng)位添加0即可;
? ? ? 3. 例化4個(gè)SelectIO IP核實(shí)現(xiàn)3個(gè)TMDS數(shù)據(jù)通道和1個(gè)TMDS時(shí)鐘通道的數(shù)據(jù)輸出,這里把tmds_red、tmds_green、tmds_blue由TMDSEncoder模塊編碼后的10位數(shù)據(jù)作為SelectIO IP核輸入端,同時(shí)把SelectIO IP核輸出端直接引到外接接口的3個(gè)數(shù)據(jù)通道HDMI_D_N/P[2:0]和1個(gè)時(shí)鐘通道HDMI_CLK_N/P即可;
? ? ? 4. 在這里我們需要用PLL IP核倍頻一個(gè)25Mhz的時(shí)鐘給HDMI驅(qū)動(dòng)模塊作為模塊時(shí)鐘使用,感興趣的同學(xué)也可以手工計(jì)算下1*109ns/800/525/60=39.6825ns,即大約折合成25Mhz的驅(qū)動(dòng)時(shí)鐘,此外還需要頻一個(gè)比25Mhz快5倍的時(shí)鐘提供給SelectIO IP核,用作DDR雙邊緣10位轉(zhuǎn)1位,并轉(zhuǎn)串?dāng)?shù)據(jù)傳輸使用。
? ? ? 下載程序后通過(guò)HDMI接口連接到屏幕即可看到如圖15所示的彩色風(fēng)景圖。
圖14?HDMI顯示彩色風(fēng)景圖頂層文件的例化
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-427919.html
圖15?HDMI顯示彩色風(fēng)景圖文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-427919.html
到了這里,關(guān)于FPGA 20個(gè)例程篇:16.HDMI顯示彩色風(fēng)景圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!