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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Связать FPGA и монитор TFT, Советы начинающим
Serhiy_UA
сообщение Dec 23 2011, 07:31
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



В проекте с FPGA еще осталась ресурсы. Появилось желание вывести графику на TFT через VGA (D-Sub) или DVI-D (HDCP), т.е. связать напрямую FPGA и монитор TFT.

Вопросы к тем, кто уже прошел по этой дороге и возвращается назад:
1. Что и где почитать про протоколы и физику процессов на уровне сигналов?
2. VGA или DVI-D, что предпочтительнее и проще в реализации?
3. Есть ли готовые примеры реализации, программы и схемы?
4. Какие здесь есть тонкости, узости и прочие подводности?

Заранее спасибо за обстоятельные ответы.
Go to the top of the page
 
+Quote Post
DevL
сообщение Dec 23 2011, 08:32
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 254
Регистрация: 23-10-10
Из: астрал
Пользователь №: 60 371



информации на эту тему достаточно, от простой http://www.fpga4fun.com/PongGame.html
до расширеной http://opencores.org/project,vga_lcd
Go to the top of the page
 
+Quote Post
Andrew Su
сообщение Dec 23 2011, 09:42
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 301
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 647



Добрый день.
В принципе задача не очень сложная, необходимо только где-то найти место для видеопамяти - внутри кристалла или за его пределами.
Удачи.
Go to the top of the page
 
+Quote Post
A.P.
сообщение Jan 25 2012, 11:30
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 9-05-11
Пользователь №: 64 879



Вот еще:
http://www.marsohod.org/index.php/projects/172-phframe1
http://www.marsohod.org/index.php/projects/173-phframe2
http://www.marsohod.org/index.php/projects/174-phframe3
Go to the top of the page
 
+Quote Post
Hoodwin
сообщение Jan 25 2012, 14:15
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



Вообще много зависит от того, какого формата графика интересует. полноценная реализация VGA на современных мониторах с большим разрешением потребует хорошего VideoDAC. Я некоторое время назад выбрал THS8200 от TI. Немного заморочисто настраивался, но в итоге получил картинку 1920x1080x60Hz. Что касается аналогового вывода, то тут крайне важно в точности соблюдать тайминги GTF и держать стабильный pixel clock, иначе линии на TFT дрожать начинают. Встраиваемые панели TFT имеют простые цифровые интерфейсы, которые практически без дополнительной логики можно соединять с FPGA. Цифровой вывод дает гарантии от дребезга пикселей, при этом скорости там вполне умеренные, а ширина шины не больше, чем те же RGB для video dac. Так что Вы подумайте, стоит ли осваивать VGA. C DVI не работал, поэтому ничего тут не скажу. В свое время только проглядывал стандарт TMDS, но на ПЛИС не примерял. насколько помню, он там был на основе 3.3V LVDS, так что как минимум нужны будут дополнительные драйверы.
Go to the top of the page
 
+Quote Post
zombi
сообщение Jan 25 2012, 21:53
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Hoodwin @ Jan 25 2012, 17:15) *
Что касается аналогового вывода, то тут крайне важно в точности соблюдать тайминги GTF и держать стабильный pixel clock, иначе линии на TFT дрожать начинают.

Ув. 'Hoodwin' можете подсказать какой максимально допустимый "Jitter pixel clock", к примеру, VGA 800x600 60Hz для TFT монитора ? И есть ли вообще такой параметр?
Go to the top of the page
 
+Quote Post
Hoodwin
сообщение Jan 26 2012, 06:31
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



Так дело даже не в джиттере как таковом. Дело в том, что например, 1920 на 1923 нацело не делится. А именно это и происходит, когда временных характеристики hsync не позволяют монитору выбрать правильный pixel clock для оцифровки входа. Например, вот есть такой калькулятор в сети http://www.epanorama.net/faq/vga2rgb/calc.html.
С его помощью можно получить, что для HD pixel clock - 182.5 MHz. Я специально подключил к PLL3 в Циклоне, которая тактируетм у меня видео-ЦАП, два генератора, на 27 и 48 МГц, потому что большинство стандартных VESA режимов - как раз на основе 27 МГц. А для HD из 27 МГц можно сделать было с помощью встроенной PLL только 182.25 МГц. Казалось бы - фигня, ошибка в 3 пикселя из почти двух тысяч, монитор автоподстройкой поправит. А он не поправил, а в тестовой сетке появились нечеткие вертикальные линии с подрагиванием. Ладно, взял тогда клок на 25 МГц, который приходит от DSP и питает совсем другую PLL1, и в PLL3 попадает в обход всего кристалла. И квартус на него ругается, что вот тут-то я точно весь джиттер соберу. А на практике - идеальная картинка, ничего не дрожит, все линии четкие.

Так что: джиттер - это конечно плохо, но он проявится только если ошибка в тактовых частотах вашего ЦАП и АЦП в мониторе будет больше, чем, где-нибудь, пол-пикселя на всю строку. Во всех остальных случаях автоподстройка в мониторе решит вопрос. Если, конечно, не понаделать косяков с питанием и правильно соединить земли монитора с землей видео-ЦАП. Но это обычно проявляется не на уровне дрожания отдельных вертикалей, а просто по картинке ползет всякий шум мелкий вверх или вниз.

Сообщение отредактировал Hoodwin - Jan 26 2012, 06:36
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 26 2012, 07:48
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(Hoodwin @ Jan 26 2012, 10:31) *
Казалось бы - фигня, ошибка в 3 пикселя из почти двух тысяч, монитор автоподстройкой поправит. А он не поправил, а в тестовой сетке появились нечеткие вертикальные линии с подрагиванием.

А вы горизонтальные поля бланкинга не забыли увеличить на эти 3 пиксела? Если вы выдавали 1923 пиксела под data enable - ни один монитор не исправит.
Go to the top of the page
 
+Quote Post
Hoodwin
сообщение Jan 26 2012, 11:30
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



Ну дело все в том, что VGA - это аналоговый интерфейс. Он вообще не содержит понятия пиксель. Когда я подключаю к ПЛИС внешний DAC, то естественно, посылаю туда данные как-бы попиксельно, но количество пикселей может быть произвольной величиной. Монитор видит только аналоговые сигналы RGB, как он узнает, сколько пикселей в них? Я так понимаю, что частично проблему решили путем стандартизации частоты и скважности импульсов hsync и vsync, зафиксировав размеры полей вокруг картинки, предназначавшихся ранее для обратного хода луча. Так вот, современный ЖК-монитор может оцифровывать мой сигнал на разных частотах. Вопрос: как он узнает на какой частоте ему оцифровывать сигнал? Возможно, он определяет параметры HSYNC, по которым рассчитывает параметры начала и конца отображаемой зоны, а потом выбирает частоту оцифровки равной время отображения / число точек в матрице. А возможно, он просто пытается по параметрам сигналов синхронизации выбрать параметры по таблице. И скорее всего именно так и делает, учитывая возможности юстировки. Но если так, то все упирается в набор тех частот, которыми располагает опорный генератор в мониторе. Если он сможет выбрать чатоту, совпадающую с моей, то он увидит строку длиной ровно 1920 пикселей, а если они разъедутся, то часть пикселей не влезет, а на часть будет выглядеть нечетко.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 26 2012, 13:39
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(Hoodwin @ Jan 26 2012, 14:30) *
Ну дело все в том, что VGA - это аналоговый интерфейс. Он вообще не содержит понятия пиксель. Когда я подключаю к ПЛИС внешний DAC, то естественно, посылаю туда данные как-бы попиксельно, но количество пикселей может быть произвольной величиной. Монитор видит только аналоговые сигналы RGB, как он узнает, сколько пикселей в них?

Если речь идет об аналоговом сигнале - пиксельная частота извлекается из HSYNC, подбором делителя PLL таким образом, чтобы активная область соответствовала какому-то видеорежиму. Если вы посылаете в активной области 1923 точки - PLL на приемнике частоту подберет так, чтобы активная область сигнала поделилась на 1920, так как это ближайший известный ему режим. А так как аналоговый сигнал будет менятся 1923 раза за это время - в некоторых местах будет непопадание точка-в-точку и описываемый вами эффект дрожания.

У VideoDAC есть сигнал, DE (data enable). Вы, формируя сигнал, должны при активном DE послать ровно 1920 точек, а оставшиеся точки строки (бланкинг) - при неактивном DE. Точки, которые вы ему дали при неактивном DE VideoDAC отправит с уровнями RGB "чернее черного" (черный цвет в активной области соответствует уже ненулевому напряжению), и приемник поймет, что это неактивная область.
Go to the top of the page
 
+Quote Post
Hoodwin
сообщение Jan 26 2012, 14:17
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



Вы снова меня не поняли. Я всегда посылаю ровно 1920 точек, но у меня цап работал вначале на частоте 182.25 МГц, а не 182.5. Современные мониторы умеют подстраивать свою частоту оцифровки таким образом, что активная область может у них превратиться, к примеру, и в 1923 точки, и в 1917. Но попасть ровно в 1920 точек они не могут (при выводе на 182.25 Мгц). В результате появляются вышеописанные эффекты, но они связаны с джиттером косвенно. А вот если я выведу свои 1920 точек на частоте 182.5 МГц, то они могут оцифровать активную зону ровно в 1920 точек. И даже больший джиттер не приводит к дрожанию пикселей.

В целом это такая же точно проблема, как бывает с baud rate генераторами в UART на разных концах. Просто точности гораздо выше нужны.

Что касается всяких там DE, то у THS8200, о котором я писал, таких сигналов нет. В VGA вообще нет уровней "чернее черного", все уровни начинаются просто от черного до белого. (см. например http://microvga.com/faq/electrical/what-ar...-voltage-levels)
В тех режимах, где действительно такие уровни есть, он их делает автоматически, сам выступая мастером и запрашивая данные у видеоконтроллера. В задачу контроллера входит только в правильное время данные свои вставлять относительно hsync, который для него в этом режиме является входом, а для ths8200 - выходом.

Сообщение отредактировал Hoodwin - Jan 26 2012, 14:20
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 26 2012, 16:29
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(Hoodwin @ Jan 26 2012, 18:17) *
Вы снова меня не поняли. Я всегда посылаю ровно 1920 точек, но у меня цап работал вначале на частоте 182.25 МГц, а не 182.5. Современные мониторы умеют подстраивать свою частоту оцифровки таким образом, что активная область может у них превратиться, к примеру, и в 1923 точки, и в 1917. Но попасть ровно в 1920 точек они не могут (при выводе на 182.25 Мгц).

Я некоторое время участвовал в разработке контроллеров Genesis, которые стоят в том числе и в современных мониторах, и могу сказать: они любое число могут использовать. В частности, отдельные микрухи ADC для выделения синхронизации берут период HSYNC и умножают его на произвольное целое число (чтобы в активной области было, в данном случае, 1920 точек). Они не знают и даже не думают о том, что там должно получиться 182.5MHz.

Цитата(Hoodwin @ Jan 26 2012, 18:17) *
В целом это такая же точно проблема, как бывает с baud rate генераторами в UART на разных концах. Просто точности гораздо выше нужны.

Абсолютно ничего общего. Там используется фиксированный деленный клок, который может иметь разбег у приемника и передатчика, отсюда проблемы. VGA же извлекает клок из сигнала - у приемника VGA нет никакого своего опорного генератора. Иначе приемнику, который поддерживает все стандарты пришлось бы пачку кварцев нести на борту.

Цитата(Hoodwin @ Jan 26 2012, 18:17) *
Что касается всяких там DE, то у THS8200, о котором я писал, таких сигналов нет.

Там зато есть HS_Delay, HS_Duration и Total_Pixel в конфигурации. DE=Current_pixel_number<(Total_pixel-HS_Delay-HS_Duration).

Цитата(Hoodwin @ Jan 26 2012, 18:17) *
В VGA вообще нет уровней "чернее черного", все уровни начинаются просто от черного до белого.

Есть, в зеленом канале. Ранее эта подставка использовалась еще и для синхронизации, сейчас - только чтобы бланкинг маркировать. См. ADV7123 например, на его примере это все лучше понятно. Там и бланкинг отдельным входом, и рисунки есть, как он делается.
Go to the top of the page
 
+Quote Post
zombi
сообщение Jan 26 2012, 17:17
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(DmitryR @ Jan 26 2012, 20:29) *
Есть, в зеленом канале. Ранее эта подставка использовалась еще и для синхронизации, сейчас - только чтобы бланкинг маркировать. См. ADV7123 например, на его примере это все лучше понятно. Там и бланкинг отдельным входом, и рисунки есть, как он делается.

Ув. DmitryR, а может ли отсутствие этой самой подставки у зелёного влиять на общее качество изображения или сихронизацию TFT мониторов?
У меня после fpga просто резисторный цап и никаких подставок нет.
Go to the top of the page
 
+Quote Post
xor.kruger
сообщение Jan 26 2012, 19:45
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647



В сорцах LEON3 (GRLIB) от Gaisler есть пример реализации VGA.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 27 2012, 09:04
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(zombi @ Jan 26 2012, 20:17) *
Ув. DmitryR, а может ли отсутствие этой самой подставки у зелёного влиять на общее качество изображения или сихронизацию TFT мониторов?
У меня после fpga просто резисторный цап и никаких подставок нет.

Я вам честно скажу - сам строить схемы, которые бы формировали VGA сигнал я не пробовал. Я пользовался микросхемами, которые это делают (теми же ADV), разбирался как именно и почему именно так ими надо управлять, на основании этого опыта пишу. Синхронизацией по зеленому мониторы уже давно не пользуются, так как она идет по отдельным линиям, а бланкинг передать в VGA я не вижу другого способа, кроме как в зеленом канале. Такого, чтобы в видеосигнале не было бланкинга, а был строб HSYNC на всю невидимую область (что теоретически бы сделало передачу информации о бланкинге ненужной) - я тоже не встречал.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th July 2025 - 08:09
Рейтинг@Mail.ru


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