第1步:材料
完成此項目您將需要:
硬件
-任何具有HDMI和以太網的ZYNQ板都可以正常工作/我正在使用Digilent Zybo
-USB A到micro B USB電纜
-HDMI電纜
-以太網電纜
-帶有HDMI輸入的顯示器
軟件
-Xilinx Vivado
-Xilinx SDK
步驟2:輸出-VGA控制器第1部分
我們將使用開發板上的HDMI端口輸出視覺數據。 HDMI端口連接到ZYNQ的PL(可編程邏輯= FPGA)端,我們將需要為其設計VHDL控制器。如果您曾經設計過VGA控制器,您會發現它非常相似。 HDMI和VGA的時序實際上是相同的,實際上您可以在現有的VGA控制器上構建以獲得HDMI控制器。
為更好地了解實際情況,我們將首先設計一個VGA控制器
我們要以1920x1080的分辨率顯示。
VGA控制器負責將像素數據(RGB格式)依次逐像素傳輸到顯示器。在1920x1080的實際顯示區域之外,還有一些“邊界”區域,即:前沿,后沿和回掃。這些區域的像素大小是標準的,并針對每種分辨率。這些區域實際上并沒有出現在屏幕上,但是它們是必需的,并且該區域中像素的顏色必須為黑色。一個有效的問題是,為什么需要這些額外的區域。這個問題違背了這個可指導性的目的,但是如果您好奇的話,我鼓勵您在線進行進一步研究。
這是一個很好的視頻,解釋了VGA接口https://goo.gl/vfSw6o
在我們的情況下,我們希望以1920 * 1080的分辨率進行顯示,這些時間是:
水平顯示區域= 1920像素
水平Fron門廊= 88像素
水平后沿= 148像素
水平回掃= 44像素
垂直顯示區域= 1080像素
垂直前沿= 4像素
垂直后沿= 36像素
垂直回掃= 5像素
(您可以在此處找到其他分辨率的時間http://goo。 gl/hFNRVb)
因此,我們的實際分辨率為2200 x1125。我們希望60 fps(每秒幀數),因此我們的像素時鐘將為60 * 2200 * 1125 = 148.5 MHz。在Zybo板上,提供了125 Mhz的時鐘。我們將使用MMCM IP生成所需的148.5 MHz像素時鐘。
步驟3:輸出-VGA控制器第2部分
《在上一步的理論背景下,您應該可以設計自己的VGA控制器。我將為您提供一個Vivado項目,但我建議您至少嘗試自己嘗試一下。
大多數VGA端口不會為每個像素的每個顏色通道提供8位(參見上圖),因此您需要使設計適應開發板提供的每種顏色的引腳數(盡管這對于HDMI來說不是問題)。
設計會將整個屏幕涂成藍色,除了左上方的像素將變為紅色。應當指出,該項目使用了ZYBO董事會的約束條件。因此,如果要在另一個開發板上運行該項目,則應更新約束文件并調整每種顏色的引腳數。
請看圖nr。 2.請記住,盡管我們的VGA控制器在每種顏色下輸出5/6位,但是在通過電纜之前,這些位會針對每種顏色通道(紅色,綠色和藍色)轉換為一個模擬信號。
第4步:輸出-HDMI控制器第1部分
現在,我們知道了VGA控制器的工作原理,并且我們有一個可行的設計,我們可以繼續使用HDMI控制器。 HDMI控制器實際上將使用我們在VGA控制器中開發的所有代碼。 HDMI和VGA使用相同的時序和相同的信號。差異出現在輸出引腳上。
雖然VGA每種顏色使用一根線并傳輸一條模擬信號,但HDMI每次每種顏色以1位數字方式傳輸數據并使用差分信號。差分信號意味著HDMI的每一位都有2個引腳,而另一個則相反。因此,如果我們要傳輸信號“ 1”,我們將在一根線上傳輸“ 1”,而在另一根線上傳輸“ 1”。這樣可以確保信號的完整性,您可以在https://goo.gl/6CPCzB上了解更多信息。對于每種顏色(紅色,綠色和藍色),我們都有一個通道,對于時鐘,我們有一個通道。由于差分信號的特殊性,我們通過HDMI發送的信號必須經過DC平衡處理,這意味著1和0的數量必須在特定的時間范圍內大致相等。為了實現這一點,我們將使用8b/10b編碼。您可以從DVI規范(http://goo.gl/hhh8Ge,DVI和HDMI使用相同的視頻信號)上了解很多有關差分信號和8b/10b編碼的工作原理。
第5步:輸出-HDMI控制器第2部分
足夠的理論,讓我們進入我們的項目。在VGA控制器中,我們獲得了148.5 MHz的時鐘,但是在這里,我們將不得不提供10倍的頻率,因為我們要為每種顏色傳輸8位,并使用8b/10b編碼轉換為每個像素10位和10 * 148.5MHz = 1485MHz。這是Zybo板上無法獲得的巨大頻率。幸運的是,我們掌握了一些技巧。我們可以管理5 * 148.5MHz = 742.5MHz,我們將使用OSERDES(串行器)IP在742.5Mhz時鐘的上升沿和下降沿都傳輸數據,因此實際上我們將以1485MHz傳輸數據。 Vivado會給我們一些時間警告,您可以始終使用較小的時鐘來獲得較低的分辨率,但是由于它可以正常工作,因此我們暫時不介意(警告與時鐘緩沖區未正式存在有關
因此,我們需要做的是將來自VGA控制器輸出的數據編碼為8b/10b格式,然后如上所述進行序列化。我們還需要在項目中添加另一個MMCM,以生成用于序列化的742.5MHz時鐘。
我在編碼器和序列化器的vhdl文件下面附加了該文件。您必須首先對RGB通道進行編碼,然后對其進行序列化。
紅色通道示例:
TMDS_encoder_RED:TMDS_encoder
端口圖(clk148,red_channel_8bits,c_red,video_on ,encode_red_10bits);
Serialiser_RED:Serialiser10_1
端口映射(clk148,clk742,encoded_red_10bits,重置,red_serial_1bit);
TMDS_encoder的“ c”輸入是紅色和綠色的“ 00”,藍色是“ vsync&hsync”(這是DVI規范http://goo.gl/hhh8Ge)。
步驟6:從RAM顯示圖像
HDMI控制器的目的是顯示處理后的圖像。現在,在實現控制器并準備就緒后,我們應該考慮為該控制器提供數據。鑒于很多圖像增強過程將在PS中進行(處理系統= ARM處理器),并且生成的圖像將駐留在DDR RAM中。因此,我們需要一種從RAM到HDMI控制器獲取數據的方法。
要實現此目的,您需要3個IP:
1)VDMA(視頻直接內存訪問) )
2)VTC(視頻定時控制器)
3)流到視頻輸出(從現在開始我們將其稱為S2VO)
S2VO實際上將提供輸出的RGB 24BIT信號以及所需的HSYNC和VSYNC信號。因此,我們可以省去HDMI控制器的那一部分。
您應該將這些IP添加到設計中,進行配置并進行正確的連接。
最后,您應該得到類似于
步驟7:輸出-SDK END
所有硬件均已設置好并準備就緒,我們現在必須在PS中構建軟件。我們將導出硬件和比特流并啟動SDK。
1)文件-》導出-》導出硬件-》選中包括比特流,然后按確定
2)文件-》啟動SDK
在SDK中創建一個新的應用程序項目。
3)文件-》新建-》應用程序項目
4)為您的項目選擇一個名稱,然后按下一步
5)選擇“ Hello World”模板然后按Finish
SDK中的應用程序將需要對VDMA進行編程。為了完成此操作,使用了一些標準功能(我會在有空的時候進行詳細介紹)。
為了測試我們的設計,我們將使用SDK Restore(Xilinx工具-》轉儲/還原) )功能可將圖像放入DDR RAM內存并使用我們的HDMI控制器顯示。您可以將圖像加載到所需的任何位置(內存開頭的一些較小的受限區域除外)。在我們的示例中,我們選擇了地址16777216,文件大小為8294400 = 1920 * 1080 * 4(4個通道= RGB + alpha)。
責任編輯:wv
-
HDMI
+關注
關注
33文章
1817瀏覽量
154585 -
usb
+關注
關注
60文章
8147瀏覽量
270983
發布評論請先 登錄
從零開始馴服Linux(一):ZYNQ-Linux啟動文件構建全解析
zynq通過什么接口去控制DLP?
傅立葉變換在圖像處理中的作用
【每天學點AI】實戰圖像增強技術在人工智能圖像處理中的應用

基于差分卷積神經網絡的低照度車牌圖像增強網絡

如何構建物聯網系統
基于VDMA的遠程圖像采集系統參考設計

正點原子ZYNQ7015開發板!ZYNQ 7000系列、雙核ARM、PCIe2.0、SFPX2,性能強悍,資料豐富!
[XILINX] 正點原子ZYNQ7035/7045/7100開發板發布、ZYNQ 7000系列、雙核ARM、PCIe2.0、SFPX2!
Cricket XL全新亮相:革新圖像增強技術的解決方案

評論