获取 vpos 和 hpos 出 vsync 和 hsync
get vpos and hpos out vsync and hsync
对于一个项目,我得到了一个分辨率为 1024*600 的屏幕。对于这个项目,我需要一个 20px *20px 的红色正方形。我试图从 hsync en vsync 脉冲中获取我的垂直位置和水平位置,但这不起作用。有人有解决方案吗?
process(int_hsync, int_vsync)
begin
if Rising_Edge(int_vsync) then
vsync <= 0;
elsif Rising_Edge(in_clk) then
vsync <= vsync+1;
end if;
if Rising_Edge(int_hsync) then
hsync <= 0;
elsif Rising_Edge(in_clk) then
hsync <= hsync+1;
end if;
end process;
process(in_clk)
begin
if Rising_Edge(in_clk) then
if hsync < 20 and vsync <20 then
int_pixel <= X"0000ff";
else
int_pixel <= X"ff0000";
end if;
end if;
end process;
如果没有一些额外的细节,很难说出你正在尝试做什么。
但是,我确实注意到您的过程仅对 int_hsync
和 int_vsync
敏感,而您正在寻找 in_clk
的 rising_edge。你应该做一个类似于此的边缘检测,而不是(假设 in_clk
比 hsync 和 vsync 快得多):
process(in_clk)
begin
if rising_edge(in_clk) then
int_vsync_dly <= int_vsync;
int_hsync_dly <= int_hsync;
if int_vsync = '1' and int_vsync_dly = '0' then -- rising edge detect
vsync <= 0;
else
vsync <= vsync+1;
end if;
if int_hsync = '1' and int_hsync_dly = '0' then -- rising edge detect
hsync <= 0;
else
hsync <= hsync+1;
end if;
end if;
end process;
每次观察到相应触发信号的上升沿时,vsync
和 hsync
计数器都会递增。请确保在边缘检测之前正确注册输入,以帮助避免亚稳态情况。
对于一个项目,我得到了一个分辨率为 1024*600 的屏幕。对于这个项目,我需要一个 20px *20px 的红色正方形。我试图从 hsync en vsync 脉冲中获取我的垂直位置和水平位置,但这不起作用。有人有解决方案吗?
process(int_hsync, int_vsync)
begin
if Rising_Edge(int_vsync) then
vsync <= 0;
elsif Rising_Edge(in_clk) then
vsync <= vsync+1;
end if;
if Rising_Edge(int_hsync) then
hsync <= 0;
elsif Rising_Edge(in_clk) then
hsync <= hsync+1;
end if;
end process;
process(in_clk)
begin
if Rising_Edge(in_clk) then
if hsync < 20 and vsync <20 then
int_pixel <= X"0000ff";
else
int_pixel <= X"ff0000";
end if;
end if;
end process;
如果没有一些额外的细节,很难说出你正在尝试做什么。
但是,我确实注意到您的过程仅对 int_hsync
和 int_vsync
敏感,而您正在寻找 in_clk
的 rising_edge。你应该做一个类似于此的边缘检测,而不是(假设 in_clk
比 hsync 和 vsync 快得多):
process(in_clk)
begin
if rising_edge(in_clk) then
int_vsync_dly <= int_vsync;
int_hsync_dly <= int_hsync;
if int_vsync = '1' and int_vsync_dly = '0' then -- rising edge detect
vsync <= 0;
else
vsync <= vsync+1;
end if;
if int_hsync = '1' and int_hsync_dly = '0' then -- rising edge detect
hsync <= 0;
else
hsync <= hsync+1;
end if;
end if;
end process;
每次观察到相应触发信号的上升沿时,vsync
和 hsync
计数器都会递增。请确保在边缘检测之前正确注册输入,以帮助避免亚稳态情况。