【发布时间】:2021-02-14 14:28:09
【问题描述】:
我想在配备 Artix-7 FPGA 和 HDMI 接收/源端口的 Nexys-Video Board 上实现我自己的 HDMI-Passthrough。我的设置是:PC HDMI 端口连接到接收端口,而 LED 监视器连接到源 HDMI 端口。
由于板上没有 TDMS 编码器/解码器,接下来我还需要实现它们(我不想只获取互联网上现成的封闭源代码实现之一)。但是现在,我只需要通过 FPGA 连接接收器/源端口,这样我就可以在监视器上显示视频。但是,我还没有成功。没有显示图片,显示器显示“无信号”。我有点担心滥用 FGPA 端口可能会导致电路板永久性损坏。因此,我没有尝试一切都浮现在我的脑海中。我期待建议以更正/完成我的代码。
我按照以下代码和原理图连接了 HDMI 信号:
module HDMI_Top(RSTN, CLK, BTN, SW, LED,
HDMIR_TXEN, HDMIR_HPA, HDMIT_HPD,
HDMIR_SCL, HDMIR_SDA, HDMIT_SCL, HDMIT_SDA,
HDMIR_CLK_P, HDMIR_CLK_N, HDMIR_DATA_P, HDMIR_DATA_N,
HDMIT_CLK_P, HDMIT_CLK_N, HDMIT_DATA_P, HDMIT_DATA_N);
input RSTN;
input CLK;
input [4:0] BTN;
input [7:0] SW;
output [7:0] LED;
output HDMIR_TXEN;
output HDMIR_HPA;
input HDMIT_HPD;
inout HDMIR_SCL;
inout HDMIR_SDA;
inout HDMIT_SCL;
inout HDMIT_SDA;
input HDMIR_CLK_P;
input HDMIR_CLK_N;
input [2:0] HDMIR_DATA_P;
input [2:0] HDMIR_DATA_N;
output HDMIT_CLK_P;
output HDMIT_CLK_N;
output [2:0] HDMIT_DATA_P;
output [2:0] HDMIT_DATA_N;
wire [2:0] HDMI_DATA;
wire HDMI_CLK;
wire w0, w1, w2;
assign LED = SW;
//assign HDMIR_HPA = HDMIT_HPD;
assign HDMIR_TXEN = 1'b1;
assign HDMIT_SCL = HDMIR_SCL;
assign HDMIT_SDA = HDMIR_SDA;
// IBUFDS: Differential Input Buffer
IBUFDS #(
.DIFF_TERM("FALSE"), // Differential Termination
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
) IBUFDS_hdmir_clk (
.O(HDMI_CLK), // Buffer output
.I(HDMIR_CLK_P), // Diff_p buffer input (connect directly to top-level port)
.IB(HDMIR_CLK_N) // Diff_n buffer input (connect directly to top-level port)
);
OBUFDS #(
.IOSTANDARD("DEFAULT") // Specify the output I/O standard
) OBUFDS_hdmit_clk (
.O(HDMIT_CLK_P), // Diff_p output (connect directly to top-level port)
.OB(HDMIT_CLK_N), // Diff_n output (connect directly to top-level port)
.I(HDMI_CLK) // Buffer input
);
// IBUFDS: Differential Input Buffer
IBUFDS #(
.DIFF_TERM("FALSE"), // Differential Termination
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
) IBUFDS_hdmir_data [2:0] (
.O(HDMI_DATA), // Buffer output
.I(HDMIR_DATA_P), // Diff_p buffer input (connect directly to top-level port)
.IB(HDMIR_DATA_N) // Diff_n buffer input (connect directly to top-level port)
);
OBUFDS #(
.IOSTANDARD("DEFAULT") // Specify the output I/O standard
) OBUFDS_hdmit_data [2:0] (
.O(HDMIT_DATA_P), // Diff_p output (connect directly to top-level port)
.OB(HDMIT_DATA_N), // Diff_n output (connect directly to top-level port)
.I(HDMI_DATA) // Buffer input
);endmodule
Here是代码对应的原理图。
谢谢;
【问题讨论】:
-
如果 HPD 错误,那么计算机可能根本不会产生输出,所以这可能值得检查(iirc 它需要很高)。
-
您还可以尝试添加一个连接到 LED 的计数器,该计数器以 HDMI 像素时钟为时钟,以确保实际接收到时钟信号,这是视频信号正在接收的好兆头也发送了。
-
感谢您的建议,大卫,我会尝试并让您知道发生了什么。
-
大卫,在水槽侧设置 HPD 可以解决 HPD 问题。但是还是没有图。我搜索了这个问题,发现需要正确处理 DDC 信号。在我的代码中,我只是用没有像我想的那样合成的电线将它们短路。
标签: verilog xilinx hdmi pass-through