对于一个项目,我得到了一个分辨率为1024 * 600的屏幕。对于该项目,我需要 20px *20px 的红色平方。我试图让我的垂直位置 en 水平故事 pos 脱离 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
计数器。请确保在边缘检测之前正确注册输入,以帮助避免亚稳定情况。