Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Синхронизация вывода видео на VGA монитор
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2
Alexey_Rostov
Цитата(Plain @ Aug 29 2018, 16:48) *
С чего вдруг? Создание кадра — всего лишь создание трёх сигналов синхронизации.


Цитата(Plain @ Aug 29 2018, 15:31) *
Нет, во время Вы не можете, только по прошествии — я же сразу сказал, что входной кадр сперва надо разобрать, а выходной затем собрать...
Plain
Извлечение из поступающих сигналов полезной информации и создание из полезной информации исходящих сигналов — так понятнее?

Если Вы не способны создать синхронизацию, о чём собственно эта тема, то Вам, как и её автору, придётся делать послабление — сперва создание полного кадра в памяти, для эмоционального ощущения его целостности.
Flip-fl0p
Цитата(Plain @ Aug 30 2018, 08:31) *
Извлечение из поступающих сигналов полезной информации и создание из полезной информации исходящих сигналов — так понятнее?

Если Вы не способны создать синхронизацию, о чём собственно эта тема, то Вам, как и её автору, придётся делать послабление — сперва создание полного кадра в памяти, для эмоционального ощущения его целостности.


Так тема была создана для того, чтобы уважаемые гуру помогли помочь разобраться как правильно реализовать такую синхронизацию. И есть есть такой способ - то без применения внешнего кадрового буфера. И если мы не понимаем - чтобы нам дали пинка и разъяснили в чем мы не правы, и почему надо делать именно так, а не иначе, и данный процесс повторялся пока не наступит просветление в наших головах. Тогда и нам хорошо - мы поймем и будем знать как делать, и вам плюсик в карму. И база знаний накопится ещё одной толикой мудрости гуру(а форум я считаю в первую очередь отличной базой знаний), и вновь пришедшим и непросветлённым будет дана возможность созерцая эти страницы тоже наполниться мудростью...
Но уважаемые гуру лишь упрекают нас в неспособности создать такую синхронизацию....

Вот вы писали что:

Цитата(Plain @ Aug 30 2018, 08:31) *
На вход подано неизвестных размеров изображение, следовательно:
1) измерить его размеры, для чего посчитать в его CLK длину его DE и количество DE за интервал его VS;
2) на основе этих данных пересчитать коэффициенты интерполятора и задать длину всех буферов;
3) измерить интервал от VS до DE и посчитать требуемую положительную или отрицательную задержку для получения в требуемый, т.е. с учётом задержки на FIFO, момент аналогичных выходных сигналов;
4) по очередному входному VS зафиксировать собранные данные в качестве новых настроек выходного автомата и начать выдачу им сигналов;
5) продолжать измерять всё вышеперечисленное.

Тут понятно все кроме пункта 4.
Приведу картину для наглядности:

Из неё следует что одна строка состоит из:
1. Периода строчного импульса горизонтальной синхронизации(HSYNC)
2. Периода задней границы (Horisontal back porch).
3. Периода активных даных (data_enable).
4. Периода передней границы (Horisontal front porch).
Допустим я измерил интервал интервал времени источника от конца импульса VS до начала активных данных.
Получил некую константу. Что мне с ней делать ? Расскажите поподробнее про это, если Вас не затруднит...
Я изучаю исходники альтеры, и мне кажется скоро я плюну на это. Жуть жуткая. Несколько тысяч строк кода без комментариев и какой-либо логики...
PS UPD
А вообще тут правильно подметили, что такая синхронизация без применения внешнего буфера невозможна. Тому подтверждение найдено в xilinx appnote: https://www.xilinx.com/support/documentatio...g-with-vpss.pdf
Plain
Цитата(Flip-fl0p @ Aug 31 2018, 10:47) *
измерил интервал времени источника от конца импульса VS до начала активных данных

Измерить реальный интервал (т.е. непрерывными собственными (выходными) тактами) от начала входного VS до конца первого входного DE и прибавить к этому задержку на FIFO, т.е. измеренный теми же единицами интервал DE, умноженный на размер FIFO — получится задержка готовности входных данных (т.е. завершения принятия N входных строк, требуемых для вычисления первой выдаваемой строки) от фронта кадрового синхроимпульса.

В соответствии с заданным форматом выходного изображения, требуемая задержка от фронта создаваемого выходного кадрового синхроимпульса до требуемой предустановки выходных данных перед началом их выдачи известна и однозначна — вычитаете первую задержку из этой и получаете положительную или отрицательную фазу выходного автомата (состояния всех его счётчиков), с которой его надо устанавливать по фронтам входного кадрового синхроимпульса.

П.4 и п.5. напоминают о том, что о формате входного изображения всегда требуется знать всё, и он имеет право в любой момент смениться на другой, тупая молотилка захлебнётся.
Flip-fl0p
Цитата(Plain @ Aug 31 2018, 12:37) *

Огромное и Человеческое спасибо за то что вы пытаетесь нам помочь !
Но всё-же хотелось бы немного уточнить про выходной автомат.
Что понимается под термином "выходной автомат" ?

В моем случае в качестве автомата, который задает выходные синхроимпульсы - является пара автоматов:
Один прыгает по состояниям back_porch_st => visible_area_st => front_porch_st => HS_st => back_porch_st ... и.т.д. Он генерирует сигнал DE для горизонтальных линий, он генерирует сигнал строчной синхронизации, и генерирует сигнал окончания строки для второго автомата.
Другой автомат точно также прыгает по состояниям: back_porch_st => visible_area_st => front_porch_st => VS_st => back_porch_st ... И.Т.Д. Он принимает сигнал окончания строки от первого автомата считает строки и генерирует DE для вертикальных линий, генерирует сигнал кадровой синхронизации.
Фактически пара автоматов - реализуют классический синхрогенератор для генерации таймингов в соответствии с VESA.
Я могу запустить мой "синхрогенератор" в нужное мне время за счет того, что у меня автоматы начинают работу с состояния IDLE (которое нужно для первичной инициализации счетчиков, и возможности сброса синхрогенератора).

Я всё пытаюсь понять сказанное Вами, и никак не могу взять в толк, а что я должен делать с автоматом, чтобы добиться синхронности ?
Допустим я посчитал положительную или отрицательную задержку и запустил автомат в нужное время и первый кадр нового изображения вывелся как положено.
Но потом у нас получается, что в реальности новый кадр может начать генерироваться либо чуть раньше (относительно прошлого кадра, т.е мой синхрогенератор ещё не завершил работу - досчитывает длительность кадрового импульса), либо чуть позже (т.е выходной автомат начал рассчет back_porch_st нового кадра). Я могу даже величину этой рассинхронизации посчитать в pixel_clk нового изображениея. И для того чтобы синхронность не нарушилась я должен:
1. Либо раньше начать генерировать изображение, в случае если у нас входные кадры идут чуть чаще чем выходные. т.е не выдать полную длительность VSYNC а начать генерировать back_porch_st нового кадра.
2. Либо я должен чуть подождать при генерации нового изображения случае если у нас выходные кадры идут чуть медленнее чем выходные - т.е удлинить длительность back_porch_st нового кадра.
Но в обоих вариантах ожидание или "опережение" приводит к тому, что фактически искажается back_porch_st (в первой строке) что неминуемо ведет к искажению всего изображения (проверено на практике).
Plain
Для любой синхронизации естественно должен быть запас (на опережение/отставание) — в данном случае, запас по фазе.

Я не в курсе, может мониторы и в самом деле зачем-то считают CLK, тогда этот запас, например, должен быть в виде большей частоты этого CLK, т.е. требуемый фиксированный интервал реального времени, в нём фиксированная пачка импульсов и изменяемая пауза, чтобы количество CLK в каждом интервале гашения не менялось. Ну или сделать простецкую цифровую ФАПЧ, т.е. дискретно менять частоту CLK (неактивный его перепад), управляя его делителем измеренной фазовой ошибкой, запас будет гораздо больше, т.е. уже можно будет менять частоту кадров.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.