Получить vpos и hpos из vsync и hsync
Для проекта я получил экран с разрешением 1024*600. Для проекта мне нужна площадь 20px *20px с красным цветом. Я пытаюсь вытащить свою вертикаль из горизонтального импульса, но это не сработает. У кого-нибудь есть решение?
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;
1 ответ
Без каких-либо дополнительных деталей очень сложно сказать, что вы пытаетесь сделать.
Тем не менее, я заметил, что ваш процесс чувствителен только к int_hsync
а также int_vsync
, но вы ищете восходящий край in_clk
, Вы должны сделать обнаружение края, похожее на это, (при условии, что 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
счетчики каждый раз, когда наблюдается нарастающий фронт соответствующих сигналов запуска. Убедитесь, что входы правильно зарегистрированы до обнаружения края, чтобы помочь избежать метастабильных случаев.