? ? Zynq-7000 PL端HDMI的顯示控制
Zynq-7000 PS到PL端emio的使用
Vivado 專家文章:Tcl 是什么?
Zynq-7000 ARM端MIO的使用
Zynq-7000 ARM端helloworld實驗
SK電訊部署賽靈思FPGA用于AI加速,超GPU實現5倍性能或16倍功耗性能比
Xilixn Vivado IP的添加、modelsim-se仿真庫的生成以及聯合仿真
突破功能安全設計的復雜性
極目智能發布業界最低成本FPGA ADAS解決方案,面向近10家車廠批量供貨
Powered by Xilinx: 極目智能發布業界最低成本FPGA ADAS解決方案,面向近10家車廠批量供貨
1 背景知識
HDMI(High Definition Multimedia Interface)是高清晰多媒體接口線的縮寫,能高品質地傳輸未經壓縮的高清視頻和多聲道音頻數據,最高數據傳輸速度為5Gbps。同時無需在信號傳送前進行數/模或者模/數轉換,可以保證最高質量的影音信號傳送。
HDMI線支持5Gbps的數據傳輸率,最遠可傳輸30米,足以應付一個1080p的視頻和一個8聲道的音頻信號。而因為一個1080p的視頻和一個8聲道的音頻信號需求少于4GB/s,因此HDMI線還有很大余量。這允許它可以用一個電纜分別連接DVD播放器,接收器和PRR。此外HDMI支持EDID,DDC2B,因此具有HDMI的設備具有“即插即用”的特點,信號源和顯示設備之間會自動進行“協商”,自動選擇最合適的視頻/音頻格式。如下圖是一根HDMI線。
2 HDMI接口的原理圖
如上圖所示,HDMI接口有3對數據差分信號、一對時鐘差分信號、HDMI_CEC(HDMI遙控器信號)、HDMI IIC信號、HDMI_HPD(HDMI熱插拔檢測信號)和HDMI_OUT_EN(HDMI電源輸出控制)。本節設計將把RGB888轉化為HDMI信號輸出來控制顯示屏的顯示。
3 HDMI接口的FPGA設計
如上圖所示,為整個HDMI接口顯示模塊圖。主要分為三個模塊。
1)時鐘產生模塊
時鐘產生模塊主要產生VGA顯示的像素時鐘和HDMI的串行時鐘。我們實驗的顯示器推薦設置為(1920x1080)所以pixel_clock為148.5MHZ。HDMI的串行時鐘為pixel_clock的5倍為742.5MHZ。
2)HDMI_data_gen模塊
HDMI_data_gen模塊主要產生VGA的時序和測試圖像。我們這里采用1920x1080@60HZ。時序參數如下圖所示。
具體參數代碼如下:
對于按鍵程序和各種測試圖像的產生請參考《基于FPGA的5英寸LCD屏顯示》或聯系FPGA開源工作室。
3)VGA轉HDMI模塊
這個模塊我們采用IP。具體代碼有興趣的同學可以研究研究。VGA轉HDMI的內部模塊如下圖。
4)代碼和約束
頂層代碼:
`timescale 1ns / 1ps
//
// Company:?
// Engineer:?
//?
// Create Date: 2018/08/27 16:50:00
// Design Name:?
// Module Name: HDMI
// Project Name:?
// Target Devices:?
// Tool Versions:?
// Description:?
//? ? FPGA開源工作室
// Dependencies:?
//?
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//?
//
module HDMI(
? ? ? ?input? ? ? ? ? ?clk_50M,
? ? ? ?input? ? ? ? ? ?KEY,
? ? ? ?output? ? ? ? ? HDMI_CLK_P,
? ? ? ?output? ? ? ? ? HDMI_CLK_N,
? ? ? ?output? ? ? ? ? HDMI_D2_P,
? ? ? ?output? ? ? ? ? HDMI_D2_N,
? ? ? ?output? ? ? ? ? HDMI_D1_P,
? ? ? ?output? ? ? ? ? HDMI_D1_N,
? ? ? ?output? ? ? ? ? HDMI_D0_P,
? ? ? ?output? ? ? ? ? HDMI_D0_N,
? ? ? ?output? ? ? ? ? HDMI_OUT_EN,
? ? ? ?output? [3:0]? ?LED
? ? );
wire pixclk;? ??
wire[7:0]? ?R,G,B;? ??
wire HS,VS,DE;
assign HDMI_OUT_EN = 1'b1;
HDMI_data_gen u_HDMI_data_gen
(
? ? .pix_clk? ? ? ? ? ? (pixclk),
? ? .turn_mode? ? ? ? ? (KEY),
? ? .VGA_R? ? ? ? ? ? ? (R),
? ? .VGA_G? ? ? ? ? ? ? (G),
? ? .VGA_B? ? ? ? ? ? ? (B),
? ? .VGA_HS? ? ? ? ? ? ?(HS),
? ? .VGA_VS? ? ? ? ? ? ?(VS),
? ? .VGA_DE? ? ? ? ? ? ?(DE),
? ? .mode? ? ? ? ? ? ? ? (LED)
);
wire serclk;
wire lock;
wire[23:0]? RGB;
assign RGB={R,G,B};
HDMI_FPGA_ML_0 u_HDMI_FPGA
(
? ? .PXLCLK_I? ? ? ? ? ?(pixclk),//148.5MHZ
? ? .PXLCLK_5X_I? ? ? ? (serclk),//742.5MHZ
? ? .LOCKED_I? ? ? ? ? ?(lock),
? ? .RST_N? ? ? ? ? ? ? (1'b1),
? ? .VGA_HS? ? ? ? ? ? ?(HS),
? ? .VGA_VS? ? ? ? ? ? ?(VS),
? ? .VGA_DE? ? ? ? ? ? ?(DE),
? ? .VGA_RGB? ? ? ? ? ? (RGB),
? ? .HDMI_CLK_P? ? ? ? ?(HDMI_CLK_P),
? ? .HDMI_CLK_N? ? ? ? ?(HDMI_CLK_N),
? ? .HDMI_D2_P? ? ? ? ? (HDMI_D2_P),
? ? .HDMI_D2_N? ? ? ? ? (HDMI_D2_N),
? ? .HDMI_D1_P? ? ? ? ? (HDMI_D1_P),
? ? .HDMI_D1_N? ? ? ? ? (HDMI_D1_N),
? ? .HDMI_D0_P? ? ? ? ? (HDMI_D0_P),
? ? .HDMI_D0_N? ? ? ? ? (HDMI_D0_N)
);?
clk_wiz_0? ?u_clk
(
? ? .clk_in1? ? ? ? ? ? (clk_50M),
? ? .reset? ? ? ? ? ? ? (1'b0),
? ? .clk_out1? ? ? ? ? ?(pixclk),
? ? .clk_out2? ? ? ? ? ?(serclk),
? ? .locked? ? ? ? ? ? ?(lock)
);
endmodule?
約束代碼:
set_property IOSTANDARD LVCMOS33 [get_ports clk_50M]
set_property PACKAGE_PIN U18 [get_ports clk_50M]
create_clock -period 20.000 -waveform {0.000 10.000} [get_ports clk_50M]
set_property IOSTANDARD TMDS_33 [get_ports HDMI_CLK_P]
set_property IOSTANDARD TMDS_33 [get_ports HDMI_D0_P]
set_property IOSTANDARD TMDS_33 [get_ports HDMI_D1_P]
set_property IOSTANDARD TMDS_33 [get_ports HDMI_D2_P]
set_property IOSTANDARD LVCMOS33 [get_ports HDMI_OUT_EN]
set_property PACKAGE_PIN N18 [get_ports HDMI_CLK_P]
set_property PACKAGE_PIN V20 [get_ports HDMI_D0_P]
set_property PACKAGE_PIN T20 [get_ports HDMI_D1_P]
set_property PACKAGE_PIN N20 [get_ports HDMI_D2_P]
set_property PACKAGE_PIN V16 [get_ports HDMI_OUT_EN]
set_property IOSTANDARD LVCMOS33 [get_ports KEY]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[0]}]
set_property PACKAGE_PIN N15 [get_ports KEY]
set_property PACKAGE_PIN M14 [get_ports {LED[0]}]
set_property PACKAGE_PIN M15 [get_ports {LED[1]}]
set_property PACKAGE_PIN K16 [get_ports {LED[2]}]
set_property PACKAGE_PIN J16 [get_ports {LED[3]}]
4下板測試
當按下按鍵時,我們的屏幕就會顯示不同的測試圖像。結果如下:
?
?HDMI的實現對后期高清視頻圖像處理至關重要,需要源碼的同學可以聯系FPGA開源工作室。
評論
查看更多