реклама на сайте
подробности

 
 
> Синхронизация вывода видео на VGA монитор, Как синхронизировать отмасштабированное видео c VGA монитором
Flip-fl0p
сообщение Aug 20 2018, 08:01
Сообщение #1


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Приверствую уважаемые посетители форума !
Возник вопрос про синхронизацию вывода изображения на VGA.
Поскольку альтеровское ядро scaler II"платное" - пришлось разработать собственный scaler в основе которого лежит алгоритм билинейной интерполяции.
Особых проблем при написании scaler у меня не возникло и моделирование показывает - что все работает правильно.
Но я столкнулся с тем, что никак не могу придумать как правильно синхронизировать вывод отмасштабированного видео с новым разрешением.
Чуть подробнее про проблему:
Допустим что scaler понижает масштаб видео с 800х600х60hz (Vertical refresh 37.878787878788 kHz) до 640х480х60Hz (Vertical refresh 31.46875 kHz). Так вот у нас получается, что не совпадают периоды Vertical refresh на этих разрешениях. И это несовпадение периодов приводит к тому, что выходной видеобуффер либо постоянно переполняется, либо слишком быстро опустошается, в зависимости от того какое разрешение масштабируется. Вот и сижу ломаю голову как правильно синхронизировать новый отмасштабированный видеопоток с выходным разрешением. Очень хотелось бы услышать подсказку от более опытных коллег !
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Flip-fl0p
сообщение Aug 21 2018, 08:01
Сообщение #2


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Мне стыдно признаться, но даже сейчас я не совсем Вас понимаю 05.gif . Возможно связано с тем, что я сам себя своими рассуждениями загнал в тупик и не вижу способа из него выбраться.
Попробую обьяснить свою логику, может так получится понять друг друга и если я ошибаюсь мне укажут на ошибку в моих рассуждениях.
Итак, за основу своих рассуждений я беру следующую аксиому: для того чтобы вывести на матрицу правильно изображение я должен выполнить требования стандарта VESA, а именно:
Код
pixel_clk    25.175 MHz
Visible area 640    pixel    
Front porch     16     pixel    
Sync pulse     96     pixel    
Back porch     48     pixel    
Visible area 480    lines
Front porch     10     lines
Sync pulse     2        lines
Back porch     33     lines


И сли отклонение частоты pixel_clk ±100...500 КГц еще допускается, то изменение длительности Front porch, Back porch приводит к тому, что видимая область изображения будет отображаться за пределами экрана, т.е часть выводимого изображеня будет обрезана. Неточность же Sync pulse приводит к тому, что матрица вообще может отказываться понимать входной видеосигнал.

Итого мы имеем 3 клоковых домена:
Домен Vga_sync_gen - синхрогенератор, который генерирует сигналы H_sync, V_sync, Data_enable для разрешения 640х480х60Hz
Домен source_data - источник виедосигнала, данные которого я масштабирую. Он имеет свои синхросигналы H_sync, V_sync, Data_enable, имеет свой pixel_clk 40MHz.
Домен scaler - собственно сам scaler который работает на частоте выше доменов Vga_out и source_data. Это сделано специально для того, чтобы scaler успевал обрабатывать данные независимо от входной или выходной частоты.

Данные из домена source_data посредством FIFO переносятся в домен scaler, обрабатываются там по алгоритму билинейной интерполяции и scaler выдает сигналы:
Данные нового отмасштабированного пикселя new_pixel.
Сигнал Data_valid - показывающий что данные нового пикселя можно использовать.
Сигнал SOL (start of line ) - сообщающий что это у нас первый пиксель в линии.
Сигнал EOL (end of line ) - сообщающий что это у нас последний пиксель в линии.
Сигнал SOF (start of frame) - сообщающий что это у нас первый пиксель кадра.
Сигнал EOF (end of frame) - сообщающий что это у нас последний пиксель в кадре.


Вы говорите, что:
Цитата
Частота кадров одинаковая.

Но ведь кадровые синхроимпульсы формируются на разных частотах, и частота кадров реально будет разная.
Например прии разрешении 640x480 частота кадров 16.683217477656 ms.
А вот на разрешении 800х600 частота кадров уже 16.5792 ms.

С этими я полностью согласен, да это и так вроде очевидно rolleyes.gif :
Цитата
2. За один кадр приходит 600 строк выходит 480 строк.
3. На каждые пришедшие 5 строк выдаётся синхронно 4 строки.
4. в каждой принятой строке 800 пиксель клоков внутри строчной - в каждой отданной - 640.


Цитата
Теоретически количество пиксельклоков вне строчного импульса, а также пиксельклоков и строчных импульсов вне кадровой - может быть любым и даже не постоянным.

А вот это утверждение уже интересно, и непонятно одновременно. У нас же после строчного импульса - каждый клок начинает отсчитывать рамку Front porch. Соответственно через определенное количество импульсов у нас должны быть поданы данные. Иначе картинка будет смещена относительно краев видимой области.

Для примеря я покажу структуру проекта.



Источник разрешения 800x600 сейчас находится внутри FPGA, но в последствии это будет отдельное внешнее устройство. Сейчас для отладки так удобнее. Поэтому на блок-схеме он изображен пунктиром
Go to the top of the page
 
+Quote Post
prostoRoman
сообщение Aug 21 2018, 09:14
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 28-06-11
Пользователь №: 65 930



Цитата(Flip-fl0p @ Aug 21 2018, 11:01) *
Мне стыдно признаться, но даже сейчас я не совсем Вас понимаю 05.gif . Возможно связано с тем, что я сам себя своими рассуждениями загнал в тупик и не вижу способа из него выбраться......


Ещё раз посоветую Вам произвести декомозицию проблемы, сделайте и отладьте простые вещи.

Если ресурсы позволяют:

1. Сделайте генератор видео из фреймбуфера. (то, что у Вас на схеме VGA_SYNC_GEN + кусок ОЗУ с картинкой)

2. Сделайте и отладьте свой скайлер.

3. В тупую соедините это дело и посмотрите что Вас не устраивает.

4. Итеративно добавляйте функционал: двойную/тройную буферизацию, синхронизацию и т.д.

И не пытайтесь синхронизировать заведомо не синхронные вещи. Ваш входной поток (пиксельрейт) в общем случае не только будет не иметь константного коэффициента с выходным, но и будет плавать во времени и т.д.

Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 21 2018, 09:32
Сообщение #4


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(prostoRoman @ Aug 21 2018, 12:14) *
Ещё раз посоветую Вам произвести декомозицию проблемы, сделайте и отладьте простые вещи.

Если ресурсы позволяют:

1. Сделайте генератор видео из фреймбуфера. (то, что у Вас на схеме VGA_SYNC_GEN + кусок ОЗУ с картинкой)

2. Сделайте и отладьте свой скайлер.

3. В тупую соедините это дело и посмотрите что Вас не устраивает.

4. Итеративно добавляйте функционал: двойную/тройную буферизацию, синхронизацию и т.д.

И не пытайтесь синхронизировать заведомо не синхронные вещи. Ваш входной поток (пиксельрейт) в общем случае не только будет не иметь константного коэффициента с выходным, но и будет плавать во времени и т.д.

Так с видео буфером не интересно rolleyes.gif. Шутка...
С внешним буфером на SDRAM сделать это вообще не проблема, благо есть нормальный самописный контроллер., но мне ресурсы SDRAM нужны, для реализации режима PIP (картинка в картинке), поскольку планируется вывод изображения на матрицу с двух независимых источников DVI видеосигнала Хотя память работает на частоте 144 Мгц - то может на определённом соотношении выходных разрешений после скалеров её и будет хватать, надо эту мысль подумать.
Во всяком случае IP ядра Altera (но они гады платные) делают все то, что я хочу без внешних буферов. А раз делают они, значит и я смогу, надо просто разобраться с алгоритмом. Сейчас некоторые мысли появились после слов:
Цитата
А я считаю, что
1. Back porch 48 pixel - может быть хоть 148
2. Back porch 33 lines - может быть хоть 133
3. pixel_clk не 25.175 MHz, а 25 175 000 импульсов в секунду, с довольно свободной скважностью.

Надо попробовать и потестировать...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Flip-fl0p   Синхронизация вывода видео на VGA монитор   Aug 20 2018, 08:01
- - warrior-2001   Берем 3 буффера. В один пишем, из другого читаем, ...   Aug 20 2018, 08:43
|- - Flip-fl0p   Цитата(warrior-2001 @ Aug 20 2018, 11...   Aug 20 2018, 09:08
- - prostoRoman   Цитата(Flip-fl0p @ Aug 20 2018, 11:0...   Aug 20 2018, 09:34
|- - Flip-fl0p   Цитата(prostoRoman @ Aug 20 2018, 12:34) ...   Aug 20 2018, 09:50
|- - _4afc_   Цитата(Flip-fl0p @ Aug 20 2018, 13:5...   Aug 20 2018, 11:40
|- - Flip-fl0p   Цитата(_4afc_ @ Aug 20 2018, 14:40) С как...   Aug 20 2018, 12:11
|- - _4afc_   Цитата(Flip-fl0p @ Aug 20 2018, 16:1...   Aug 20 2018, 13:56
|- - _4afc_   Цитата(Flip-fl0p @ Aug 20 2018, 16:1...   Aug 21 2018, 09:24
- - _4afc_   Цитата(Flip-fl0p @ Aug 20 2018, 12:0...   Aug 20 2018, 09:38
- - Plain   1080 / 768 = 1,4 строки FIFO, округляется до 2, пл...   Aug 20 2018, 20:51
- - warrior-2001   Я вот так и не понять сути проблемы. Указал выше, ...   Aug 21 2018, 07:16
|- - _4afc_   А я считаю, что 1. Back porch 48 pixel - може...   Aug 21 2018, 08:45
||- - warrior-2001   Цитата(_4afc_ @ Aug 21 2018, 11:45) у мен...   Aug 21 2018, 08:48
||- - ikm   Цитата(_4afc_ @ Aug 21 2018, 11:45) у мен...   Aug 21 2018, 09:02
|- - _4afc_   Цитата(Flip-fl0p @ Aug 21 2018, 12:0...   Aug 21 2018, 09:07
|- - Plain   Цитата(Flip-fl0p @ Aug 21 2018, 11:0...   Aug 21 2018, 09:59
- - Sergey_Bekrenyov   По-моему, у TC в голове все смешалось. Scaler толь...   Aug 21 2018, 19:39
|- - Flip-fl0p   Цитата(Sergey_Bekrenyov @ Aug 21 2018, 22...   Aug 22 2018, 03:51
|- - Sergey_Bekrenyov   Цитата(Flip-fl0p @ Aug 22 2018, 06:5...   Aug 23 2018, 13:45
|- - Flip-fl0p   Цитата(Sergey_Bekrenyov @ Aug 23 2018, 16...   Aug 23 2018, 15:33
|- - Sergey_Bekrenyov   Цитата(Flip-fl0p @ Aug 23 2018, 18:3...   Aug 23 2018, 18:52
|- - Flip-fl0p   Цитата(Sergey_Bekrenyov @ Aug 23 2018, 21...   Aug 23 2018, 19:07
|- - Sergey_Bekrenyov   Цитата(Flip-fl0p @ Aug 23 2018, 22:0...   Aug 24 2018, 11:37
- - Flip-fl0p   Итак господа, провел вчера весь вечер за экспереме...   Aug 22 2018, 07:45
|- - Plain   Цитата(Flip-fl0p @ Aug 22 2018, 10:4...   Aug 22 2018, 18:17
|- - lembrix   Цитата(Flip-fl0p @ Aug 22 2018, 10:4...   Aug 24 2018, 07:07
|- - Alexey_Rostov   Цитата(lembrix @ Aug 24 2018, 10:07) Стра...   Aug 28 2018, 15:02
|- - _4afc_   Цитата(Alexey_Rostov @ Aug 28 2018, 18:02...   Aug 28 2018, 15:53
|- - Flip-fl0p   Цитата(Alexey_Rostov @ Aug 28 2018, 18:02...   Aug 29 2018, 05:12
|- - _4afc_   Цитата(Flip-fl0p @ Aug 29 2018, 08:1...   Aug 29 2018, 05:49
|- - Alexey_Rostov   Цитата(Flip-fl0p @ Aug 29 2018, 08:1...   Aug 29 2018, 06:05
|- - Plain   Цитата(Alexey_Rostov @ Aug 29 2018, 09:05...   Aug 29 2018, 06:21
||- - Alexey_Rostov   Цитата(Plain @ Aug 29 2018, 09:21) Надо у...   Aug 29 2018, 09:47
||- - Flip-fl0p   Цитата(Alexey_Rostov @ Aug 29 2018, 12:47...   Aug 29 2018, 10:26
||- - Alexey_Rostov   Цитата(Flip-fl0p @ Aug 29 2018, 13:2...   Aug 29 2018, 10:46
||- - Flip-fl0p   Цитата(Alexey_Rostov @ Aug 29 2018, 13:46...   Aug 29 2018, 10:51
|- - Flip-fl0p   Цитата(Alexey_Rostov @ Aug 29 2018, 09:05...   Aug 29 2018, 06:23
|- - _4afc_   Цитата(Alexey_Rostov @ Aug 29 2018, 09:05...   Aug 29 2018, 10:21
|- - Alexey_Rostov   Цитата(_4afc_ @ Aug 29 2018, 13:21) Вот п...   Aug 29 2018, 10:29
- - warrior-2001   Ну я же скинул ссылку на проект рабочий от Альтеры...   Aug 22 2018, 08:33
|- - Flip-fl0p   Цитата(warrior-2001 @ Aug 22 2018, 11...   Aug 22 2018, 09:02
- - Plain   Цитата(Alexey_Rostov @ Aug 29 2018, 12:47...   Aug 29 2018, 10:40
|- - Alexey_Rostov   Цитата(Plain @ Aug 29 2018, 13:40) Суммир...   Aug 29 2018, 10:53
|- - Plain   Цитата(Alexey_Rostov @ Aug 29 2018, 13:53...   Aug 29 2018, 12:31
|- - Alexey_Rostov   Цитата(Plain @ Aug 29 2018, 15:31) Нет, в...   Aug 29 2018, 13:23
|- - Plain   Цитата(Alexey_Rostov @ Aug 29 2018, 16:23...   Aug 29 2018, 13:48
|- - Alexey_Rostov   Цитата(Plain @ Aug 29 2018, 16:48) С чего...   Aug 30 2018, 05:05
- - Plain   Извлечение из поступающих сигналов полезной информ...   Aug 30 2018, 05:31
- - Flip-fl0p   Цитата(Plain @ Aug 30 2018, 08:31) Извлеч...   Aug 31 2018, 07:47
|- - Plain   Цитата(Flip-fl0p @ Aug 31 2018, 10:4...   Aug 31 2018, 09:37
|- - Flip-fl0p   Цитата(Plain @ Aug 31 2018, 12:37) Огром...   Sep 18 2018, 08:19
- - Plain   Для любой синхронизации естественно должен быть за...   Sep 18 2018, 09:29


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 06:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.0155 секунд с 7
ELECTRONIX ©2004-2016