概述
我们创建一个HDMI_OUT模块,在这个模块中,把1024768像素的图片传输给HDMI_TX模块,经过8b转10b,10b转1b,再转化为差分信号与HDMI_RX模块相连。通过仿真观察b通道的10bit数据是否有354、0ab、354这一组固定的数据。如果在HDMI_RX模块中出现了这一组数据,后边就会接收到1024 768像素图片的时序。
二、仿真测试HDMI数据传输
仿真结构如图所示:

HDMI_TX模块需要clk_1x和clk_5x的时钟,所以在HDMI_OUT模块中使用PLL配置输入的时钟sclk,输出一个周期为原时钟五倍的时钟clk_5x和一个周期不变的时钟clk_1x。
在HDMI_TX中,把8bit的RGB数据通过encoder模块转化为10bit数据,再通过serializer模块把10bit数据转化为1bit数据,经过OBUFDS转化为差分信号输出送给HDMI_IN模块用作仿真。
在tb中,只需要给出像素时钟和时钟动态相移使用的时钟和复位即可。
仿真测试激励模块:
`timescale 1ns / 1ps
module tb_hdmi();
reg sclk ;
reg rst_n ;
reg clk_200 ;
//in
wire tmds_clk_p ;
wire tmds_clk_n ;
wire tmds_r_p ;
wire tmds_r_n ;
wire tmds_g_p ;
wire tmds_g_n ;
wire tmds_b_p ;
wire tmds_b_n ;
wire r_hdmi_en ;
initial
begin
sclk = 1'b1;
rst_n = 1'b0;
clk_200 = 1'b1;
#200
rst_n = 1'b1;
end
always #5 sclk = ~sclk;
always #2.5 clk_200 = ~clk_200;
hdmi_in inst_hdmi_in (
.clk (sclk ),
.rst_n (rst_n ),
.clk_200 (clk_200 ),
.tmds_clk_p (tmds_clk_p ),
.tmds_clk_n (tmds_clk_n ),
.tmds_r_p (tmds_r_p ),
.tmds_r_n (tmds_r_n ),
.tmds_g_p (tmds_g_p ),
.tmds_g_n (tmds_g_n ),
.tmds_b_p (tmds_b_p ),
.tmds_b_n (tmds_b_n ),
.clk_1x (clk_1x ),
.r_pixel (r_pixel ),
.g_pixel (g_pixel ),
.b_pixel (b_pixel ),
.h_sync (h_sync ),
.v_sync (v_sync ),
.vga_de (vga_de ),
.r_hdmi_en (r_hdmi_en )
);
hdmi_out inst_hdmi_out
(
.clk (sclk ),
.rst_n (rst_n ),
.HDMI_CLK_P (tmds_clk_p ),
.HDMI_CLK_N (tmds_clk_n ),
.HDMI_D2_P (tmds_r_p ),
.HDMI_D2_N (tmds_r_n ),
.HDMI_D1_P (tmds_g_p ),
.HDMI_D1_N (tmds_g_n ),
.HDMI_D0_P (tmds_b_p ),
.HDMI_D0_N (tmds_b_n )
);
三、总结
本次实验围绕 HDMI 数据传输的仿真验证展开,构建了一个完整的发送--接收链路测试平台。实验的核心目标是验证 HDMI 发送端(hdmi_out)产生的差分信号能否被接收端(hdmi_in)正确解码,并恢复出 1024×768 像素的图像时序。
后边我们主要介绍图像时序的产生过程。
本文章由威三学社威三学院出品
对课程感兴趣可以私信联系
课程官网:www.v3edu.com