/*************HDMI 视频输出测试************* --版本号1.1 --使用VTC产生视频时序 --使用TPG产生测试图像数据 --使用HDMI输出IP,把RGB数据转为HDMI数据输出 *********************************************************************/ `timescale 1ns / 1ns //仿真时间刻度/精度
module display ( input I_sysclk, //系统时钟输入 output O_hdmi_clk_p, //HDMI输出时钟P端 output O_hdmi_clk_n, //HDMI输出时钟N端 output [2:0]O_hdmi_tx_p, //HDMI输出数据P端 output [2:0]O_hdmi_tx_n //HDMI输出数据N端 ); wire vtc_rst,vtc_clk,vtc_vs,vtc_hs,vtc_de;//vid 视频相关信号 wire pclkx1,pclkx5,locked;//HDMI输出需要2个时钟,pclkx1是和内部视频同步的时钟,pclkx5是HDMI IP内部用于产生输出数据和输出时钟 wire [7 :0] rgb_r ,rgb_g ,rgb_b;// 定义寄存器保存图像的颜色数据 assign vtc_clk = pclkx1; // 内部像素时钟 assign vtc_rstn = locked; //用PLL 的LOCK信号复位
//MMCM/PLL时钟管理IP 输出 pclkx1和pclkx5以及locked信号 clk_wiz_0 clk_wiz0_inst(.clk_out1(pclkx1),.clk_out2(pclkx5),.locked(locked),.clk_in1(I_sysclk));
//例化HDMI输出IP,把TPG产生的测试图像经过HDMI输出 uihdmitx # ( .FAMILY("7FAMILY") //选择芯片所支持的系列"7FAMILY" "UFAMILY" ) uihdmitx_inst ( .I_rstn(locked),//复位 .I_hs(vtc_hs), //hs信号 .I_vs(vtc_vs), //vs信号 .I_de(vtc_de),//de信号 .I_rgb({rgb_r,rgb_g,rgb_b}), //RGB数据 .I_pclkx1(pclkx1), //像素时钟 .I_pclkx2_5(1'b0), //2.5倍像素时钟,只有UFAMILY需要 .I_pclkx5(pclkx5), //5倍像素时钟 .O_hdmi_tx_clk_p(O_hdmi_clk_p), //HDMI时钟输出P端 .O_hdmi_tx_clk_n(O_hdmi_clk_n), //HDMI时钟输出N端 .O_hdmi_tx_p(O_hdmi_tx_p), //HDMI输出数据P端 .O_hdmi_tx_n(O_hdmi_tx_n) //HDMI输出数据N端 );
uivtc# ( .H_ActiveSize(1280), //视频时间参数,行视频信号,一行有效(需要显示的部分)像素所占的时钟数,一个时钟对应一个有效像素 .H_FrameSize(1280+88+44+239), //视频时间参数,行视频信号,一行视频信号总计占用的时钟数 .H_SyncStart(1280+88), //视频时间参数,行同步开始,即多少时钟数后开始产生行同步信号 .H_SyncEnd(1280+88+44), //视频时间参数,行同步结束,即多少时钟数后停止产生行同步信号,之后就是行有效数据部分 .V_ActiveSize(720), //视频时间参数,场视频信号,一帧图像所占用的有效(需要显示的部分)行数量,通常说的视频分辨率即H_ActiveSize*V_ActiveSize .V_FrameSize(720+4+5+28), //视频时间参数,场视频信号,一帧视频信号总计占用的行数量 .V_SyncStart(720+4), //视频时间参数,场同步开始,即多少行数后开始产生场同步信号 .V_SyncEnd (720+4+5) //视频时间参数,场同步结束,即多少行数后停止产生场同步信号,之后就是场有效数据部分 ) uivtc_inst ( .I_vtc_clk(vtc_clk), //系统时钟 .I_vtc_rstn(vtc_rstn),//系统复位 .O_vtc_vs(vtc_vs), //场同步输出 .O_vtc_hs(vtc_hs), //行同步输出 .O_vtc_de_valid(vtc_de), //视频数据有效 .O_vtc_user(), //满足stream时序产生 user 信号,用于帧同步 .O_vtc_last() //满足stream时序产生 later 信号,用于每行结束 );
uitpg uitpg_inst ( .I_tpg_clk(vtc_clk), //系统时钟 .I_tpg_rstn(vtc_rstn), //系统复位 .I_tpg_vs(vtc_vs), //图像的vs信号 .I_tpg_hs(vtc_hs), //图像的hs信号 .I_tpg_de(vtc_de), //de数据有效信号 .O_tpg_vs(),//和vtc_vs信号一样 .O_tpg_hs(),//和vtc_hs信号一样 .O_tpg_de(),//和vtc_de信号一样 .O_tpg_data({rgb_r,rgb_g,rgb_b})//测试图像数据输出 );
endmodule |