Получить 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 счетчики каждый раз, когда наблюдается нарастающий фронт соответствующих сигналов запуска. Убедитесь, что входы правильно зарегистрированы до обнаружения края, чтобы помочь избежать метастабильных случаев.

Другие вопросы по тегам