FPGA教程学习
第十四章 HDMI 直通 ILA 调试实验
前言
HDMI 输入直通到 HDMI 输出的显示,完成一个简单的 HDMI 输入输出检测。
实验原理
开发板 HDMI 输出接口芯片使用 ADV7511,HDMI 输入芯片采用 ADV761,可以把输入的数据通过输出直接发送出去。
程序设计
教程上说的很简单,不看I2C的话还是很简单的,只使用了几个寄存器。
大概代码如下
reg vin_hs_d0;
reg vin_vs_d0;
reg vin_de_d0;
reg[23:0] vin_data_d0;
reg vin_hs_d1;
reg vin_vs_d1;
reg vin_de_d1;
reg[23:0] vin_data_d1;
(* MARK_DEBUG="true" *)reg vin_hs_d2;
(* MARK_DEBUG="true" *)reg vin_vs_d2;
(* MARK_DEBUG="true" *)reg vin_de_d2;
(* MARK_DEBUG="true" *)reg[23:0] vin_data_d2;
assign vout_clk = vin_clk;
assign vout_hs = vin_hs_d2;
assign vout_vs = vin_vs_d2;
assign vout_de = vin_de_d2;
assign vout_data = vin_data_d2;
assign rst_n = locked;
assign vin_nreset = locked;
always@(posedge vin_clk)
begin
vin_hs_d0 <= vin_hs;
vin_vs_d0 <= vin_vs;
vin_de_d0 <= vin_de;
vin_data_d0 <= vin_data;
vin_hs_d1 <= vin_hs_d0;
vin_vs_d1 <= vin_vs_d0;
vin_de_d1 <= vin_de_d0;
vin_data_d1 <= vin_data_d0;
vin_hs_d2 <= vin_hs_d1;
vin_vs_d2 <= vin_vs_d1;
vin_de_d2 <= vin_de_d1;
vin_data_d2 <= vin_data_d1;
end
实验过程
刚好电脑显卡有多的HDMI输出,接开发板的HDMI输入,开发板的HDMI输出再接一个显示器。
加载程序后电脑会识别到一个显示设备,可以使用扩展桌面。在显示器生会显示电脑的图像,注意这个图像是经过fpga转了一道的。
图像显示效果很好,没有异常。
实验尝试
视频信息和数据不经过三级触发器会怎么样?
这里注释掉原来触发器部分的代码,更改为下列代码。
assign vout_hs = vin_hs;
assign vout_vs = vin_vs;
assign vout_de = vin_de;
assign vout_data = vin_data;
最后输出的显示屏效果是这样的,有许多地方和实际不一样,显示视频的话会更明显。为什么,这就是亚稳态吗?
总结
本实验通过将HDMI解码数据送往编码数据芯片,实现了将输入图像直接输出的效果。
TODO
- 了解亚稳态。
- 解释图像异常的原因。
- 掌握使用代码调试的方法。