对于一个项目,我得到了一个分辨率为1024 * 600的屏幕。对于这个项目,我需要一个20px * 20px和红色的squarre。我试图从hsync en vsync脉冲中获取我的verticale pos en horizontale pos但这不起作用。有人有解决方案吗?
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;
答案 0 :(得分:1)
如果没有一些额外的细节,很难说出你想要做什么。
但是,我确实注意到您的流程仅对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
个计数器。在边缘检测之前确保输入已正确注册,以帮助避免元稳定情况。