我在Atlys Spartan 6主板上实现了HDMI发送器和接收器。它工作正常。我使用1080p @ 60Hz。电路板需要一个像素,对其进行解码,对其进行编码并将其发送到监视器。
现在我需要确定新帧的开始。因为我想在屏幕中间画一个正方形(使用FPGA)。我想当HSYNC和VSYNC都是'1'时意味着新帧的开始。但似乎事实并非如此。
有谁能告诉我如何识别新HDMI帧的开始?
谢谢!
答案 0 :(得分:2)
新帧的开始是在VSYNC变为'1'之后(或同时,它取决于您的数据源)HSYNC也已更改为'1'。
您需要检测边缘。在VHDL中,这样的过程:
process(clk)
variable last_hsync, last_vsync, got_vsync : std_logic;
begin
if rising_edge(clk) then
if vsync = '1' and last_vsync = '0' then
got_vsync := '1';
end if;
if got_vsync and hsync = '1' and last_hsync = '0' then
first_pixel <= '1';
end if;
last_vsync := vsync;
last_hsync := hsync;
end if;
end process;
如果你出现在帧中间,那可能会标记一个错误的帧开始 - 如果重要的话,你可能需要一些额外的状态来管理这些情况,但那是系统依赖的。