以下是一个NXP1062的HDMI例程:
//**************************************************************************
// *** 名称 : hdmixs_top
// *** 作者 : 不想上体育课
// *** 博客 : https://blog.csdn.net/m0_47220307?type=blog
// *** 日期 : 2022.09
// *** 描述 : top
//**************************************************************************
`timescale 1ns / 1ps
module hdmixs_top(
input sys_clk_n ,//差分时钟输入
input sys_clk_p ,
input sys_rst_n ,
output tmds_clk_n,//TMDS时钟通道
output tmds_clk_p,
output [2:0] tmds_data_n,//TMDS数据通道
output [2:0] tmds_data_p
);
wire rst_n ;
wire clk_out1;
wire clk_out2;
wire locked;
wire hdmi_hs;
wire hdmi_vs;
wire [10:0] w_x_pixel;
wire [10:0] w_y_pixel;
// wire [15:0] pixel_data;
wire hdmi_de;
wire [23:0] rgb_data;
wire tmds_oen;//TMDS输出使能
wire [23:0] pixel_data;
assign rst_n=sys_rst_n&locked; //在保证时钟稳定的情况下,才保证正常工作
assign clk_out1 = sys_clk_n;
assign clk_out2 = sys_clk_p;
clk_wiz_0 clk_div(
.clk_out1 (clk_108M ), //输出108MHZ的频率
.clk_out2 (clk_540M ),
.reset (1'b0 ),
.locked (locked ),
.clk_in1_p (sys_clk_p ),
.clk_in1_n (sys_clk_n )
);
hdmixs_driver dri(
.clk_out1 (clk_108M ),
.rst_n (rst_n ),
.pixel_data (pixel_data ),
.hdmi_hs (hdmi_hs ),
.hdmi_vs (hdmi_vs ),
.hdmi_de (hdmi_de ),
.vedio_rgb (rgb_data ),
.x_pixel (w_x_pixel ),
.y_pixel (w_y_pixel )
);
hdmixs_display dis(
.clk_out1 (clk_108M ),
.rst_n (rst_n ),
.x_pixel (w_x_pixel ),
.y_pixel (w_y_pixel ),
.pixel_data (pixel_data )
);
rgb_to_hdmi urtg(
.clk_out1 (clk_108M ), //输出108MHZ的频率
.clk_out2 (clk_540M ),
.rst_n (rst_n ),
.hdmi_de (hdmi_de ),
.pixel_data (rgb_data ),
.hdmi_hs (hdmi_hs ),
.hdmi_vs (hdmi_vs ),
.tmds_clk_n (tmds_clk_n ),
.tmds_clk_p (tmds_clk_p ),
.tmds_oen (tmds_oen ),
.tmds_data_n (tmds_data_n ),
.tmds_data_p (tmds_data_p )
);
endmodule
此例程是基于Verilog语言的HDMI输出实现,包含以下几个主要模块:
hdmixs_top模块
这是顶层模块,负责将各个子模块连接在一起,实现HDMI输出的整体功能。
hdmixs_driver模块
此模块用于定义显示的屏幕设置,包括分辨率、同步信号等参数,并输出当前行列计数值和图像数据。
hdmixs_display模块
用于设置显示图像区域,根据行列计数值和像素坐标,从ROM中读取相应的像素数据并输出。
rgb_to_hdmi模块
实现了将RGB数据转换为HDMI信号的TMDS编码,并进行并行转串行操作,最终输出差分信号。
需要注意的是,这个例程是一个通用的HDMI输出实现,可能需要根据具体的NXP1062开发板和硬件环境进行适当的修改和调整。同时,在实际应用中,还需根据具体需求进行进一步的优化和完善。