本帖最后由 fpga-02 于 2022-10-17 13:13 编辑
软件版本: vitis2021 .1 (vivado2021 .1 )
操作系统: WIN10 64bit
硬件平台:适用 XILINX A7/K7/Z7/ZU/KU系列 FPGA
1概述
本实验通过FPGA内部资源实现HDMI协议,使用HDMI直接驱动HDMI接口显示器,实现HDMI输出2k@30fps的视频图像。
2系统框图
3顶层调用接口源码
`timescale 1 ps / 1 ps
module display(
input clk_i,
output HDMI_CLK_P,
output HDMI_CLK_N,
output [2:0]HDMI_TX_P,
output [2:0]HDMI_TX_N
);
wire vid_rst,vid_clk,vid_vs,vid_hs,vid_de;
wire pclkx1,pclkx5,locked;
wire [7 :0] rgb_r ,rgb_g ,rgb_b;
assign vid_clk = pclkx1;
assign vid_rst = locked;
clk_wiz_0 clk_wiz0_inst(.clk_out1(pclkx1),.clk_out2(pclkx5),.locked(locked),.clk_in1(clk_i));
uihdmitx #
(
.FAMILY("7FAMILY")
)
uihdmitx_inst
(
.RSTn_i(locked),
.HS_i(vid_hs),
.VS_i(vid_vs),
.VDE_i(vid_de),
.RGB_i({rgb_r,rgb_g,rgb_b}),
.PCLKX1_i(pclkx1),
.PCLKX2_5_i(1'b0),
.PCLKX5_i(pclkx5),
.TMDS_TX_CLK_P(HDMI_CLK_P),
.TMDS_TX_CLK_N(HDMI_CLK_N),
.TMDS_TX_P(HDMI_TX_P),
.TMDS_TX_N(HDMI_TX_N)
);
uivtc#
(
.H_ActiveSize(2560),
.H_SyncStart(2560+30),
.H_SyncEnd (2560+30+50),
.H_FrameSize(2560+30+50+80),
.V_ActiveSize(1440),
.V_SyncStart(1440+3),
.V_SyncEnd (1440+3+5),
.V_FrameSize(1440+3+5+23)
)
uivtc_inst
(
.vtc_rstn_i(vid_rst),
.vtc_clk_i(vid_clk),
.vtc_vs_o(vid_vs),
.vtc_hs_o(vid_hs),
.vtc_de_o(vid_de)
);
uitpg uitpg_inst
(
.tpg_rstn_i(vid_rst),
.tpg_clk_i(vid_clk),
.tpg_vs_i(vid_vs),
.tpg_hs_i(vid_hs),
.tpg_de_i(vid_de),
.tpg_vs_o(),
.tpg_hs_o(),
.tpg_de_o(),
.tpg_data_o({rgb_r,rgb_g,rgb_b})
);
endmodule 复制代码
PLL 时钟设置
对于 PLL 的设置需要产生 1:5 的时钟,对于演示 demo 中 2560x1440的设置如下:
4:VTC 参数设置
具体内容阅读《 3-1-01 米联客 2022 版 ZYNQ FPGA 课程基础篇》 第22课 相关内容,这里针对 120M 的 PCLK 参数如下:
.H_ActiveSize(2560),
.H_SyncStart(2560+30),
.H_SyncEnd (2560+30+50),
.H_FrameSize(2560+30+50+80),
.V_ActiveSize(1440),
.V_SyncStart(1440+3),
.V_SyncEnd (1440+3+5),
.V_FrameSize(1440+3+5+23)
5:下载演示 fpga 工程的创建过程参考基础篇,下载程序前,先确保 FPGA 工程已经编译。
这里以MK7325FB 开发板 作为演示 demo。请确保下载器和开发板已经正确连接,并且开发板已经上电( 注意 JTAG 端子不支持热插拔,而 USB 接口支持, 所以在不通电的情况下接通好 JTAG 后,再插入 USB 到电脑,之后再上电,以免造成 JTAG IO 损坏 )
显示器循环输出测试图形