Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: необходимо сделать графический контроллер на ПЛИС для вывода информации на телевизор. Нужен совет.
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Лунь
Хочу сделать простой контроллер, по сути, видеобуфер, который будет формировать изображение в формате NTSC или PAL. А дальше, уже с помощью внешнего микроконтроллера, рисовать разноцветные буковки, простенькие графики и прочее.
Хочу получить 320 на 240 точек, пара бит на цвет. Короче, все не сложно. Но и проект должен быть бюджетным.
Вопросы:
1. Нет ли где готового проекта, посидеть - поковырять, сделать на его основе что нужно мне.
2. Если нет, подскажите пожалуйста, как прикинуть минимальную ПЛИС, которая потянет задачу. Склоняюсь в сторону Альтеры. Хочется чтобы была Альтера за 3-5 долларов + статическое ОЗУ за пару долларов.
Спасибо!
iosifk
Цитата(Лунь @ Nov 14 2008, 12:14) *
Хочу сделать простой контроллер, по сути, видеобуфер, который Вопросы:
1. Нет ли где готового проекта, посидеть - поковырять, сделать на его основе что нужно мне.

Поищите в Альтеровской университетской программе. Должны быть такме проекты.
А у Ксайлинкса - тоже есть на сайте, где стартовый набор на Спартан 3Е...
vik0
Цитата(Лунь @ Nov 14 2008, 11:14) *
1. Нет ли где готового проекта, посидеть - поковырять, сделать на его основе что нужно мне.
2. Если нет, подскажите пожалуйста, как прикинуть минимальную ПЛИС, которая потянет задачу. Склоняюсь в сторону Альтеры. Хочется чтобы была Альтера за 3-5 долларов + статическое ОЗУ за пару долларов.
Спасибо!

1. http://opencores.org/projects.cgi/web/fbas_encoder/overview
2. Автор пишет что проект поместился в XC9536 (~5$)
Лунь
Цитата(vik0 @ Nov 14 2008, 13:36) *
1. http://opencores.org/projects.cgi/web/fbas_encoder/overview
2. Автор пишет что проект поместился в XC9536 (~5$)


этот проект я видел. Это энкодер просто. Есть готовые микросхемы для выполнения данной функции, к примеру, CXA1645 - совсем дешевая, есть производства Аналоговых Девиц, подороже и по качественнее. Но мне нужно сделать фрейм буфер. Логика, которая будет работать с ОЗУ, выплевывая из нее в соответствующие моменты времени RGB пикселя, и одновременно, следящая за синхронизацией - строковой и кадровой. Другими словами, формирующая эти самые кадры. Ну а содержимое ОЗУ я буду заполнять внешним микроконтроллером.

Цитата(iosifk @ Nov 14 2008, 13:32) *
Поищите в Альтеровской университетской программе. Должны быть такме проекты.
А у Ксайлинкса - тоже есть на сайте, где стартовый набор на Спартан 3Е...


Спасибо за наводку! Посмотрю обязательно.
Dopler
Пару недель назад задавался такими же вопросами. Мне нужно разрешение 480х232, 2 бита на цвет, двойная буферизация.
Перебрал много вариантов от третьего циклона до LPC. В итоге сделал на EPM3032A (заняло 20 ячеек ) и 2 памяти N256S08 (из одной выводим на телевизор, в другую рисует контролер). В железе пока не проверял, так как все микросхемы привезут только в понедельник.

Единственное, синхронизацию я тоже решил делать контроллером. Сделать ее на плис особых проблем нет, но она сильно не регулярная, мало того, что все импульсы синхронизации разной длины, так еще и частота следования меняется, на плис получается не красиво, а в контролере легко.
Лунь
Цитата(Dopler @ Nov 14 2008, 21:54) *
Пару недель назад задавался такими же вопросами. Мне нужно разрешение 480х232, 2 бита на цвет, двойная буферизация.
Перебрал много вариантов от третьего циклона до LPC. В итоге сделал на EPM3032A (заняло 20 ячеек ) и 2 памяти N256S08 (из одной выводим на телевизор, в другую рисует контролер). В железе пока не проверял, так как все микросхемы привезут только в понедельник.

Единственное, синхронизацию я тоже решил делать контроллером. Сделать ее на плис особых проблем нет, но она сильно не регулярная, мало того, что все импульсы синхронизации разной длины, так еще и частота следования меняется, на плис получается не красиво, а в контролере легко.


Интересно.... сообщите пожалуйста, как получится в железе. Я как раз про эту Аьтеру и думаю, тоже на ней хочу.
Единственное, я немного вас не понял - синхронизацию вы делаете на контроллере. Что имеется в виду? вы говорите о внешнем управляющем микроконтроллере? На мой взгляд, это-то как раз и неудобно, и джиттер будет. Или вы о внешнем энкодере говорите, которому достаточно из ПЛИСа подавать совсем простенькие синхросигналы, сформировать которые очень не сложно?
В чем смысл применения 2-х корпусов памяти? По-моему вполне можно все успевать и с одной памятью, с нашими-то несложными требованиями по разрешению и по глубине цвета....
Jury093
Нда.. судя по вопросам не худо бы сначала почитать теорию..
В свое время я поинтересовался такой задачей и путями ее решения.
В первом варианте задача была решена на Lattice 1032 + 3x64КБ SRAM - разрешение 320х240х8бит
Во втором варианте цеплял контроллер к TFT Sharp 640x480x16бит (макетка с CycII + 512КБ SRAM)
К первому варианту легко довешивается кодер (PAL, NTSC) - мне было без надобности

Теперь по существу вопросов:
1. сходи сюда и почитай (это была для меня отправной точкой):
http://elm-chan.org/works/crtc/report.html
2. "прикинуть" объем несложно - тащишь пакет для проектирования в том кристалле, который выбрал, устанавливаешь, пишешь или рисуешь прошивку, в логах смотришь ответ в ЛЭ, типа такого:
Number of Macrocells is 116
Number of GLBs is 30
Number of product terms is 288
Maximum number of GLB levels is 4
Average number of inputs per GLB is 8.8
Average number of outputs per GLB is 3.9
Average number of product terms per GLB is 9.6
далее делаешь правильные выводы и подбираешь подходящий кристалл..

Цитата(Лунь @ Nov 14 2008, 12:14) *
Хочу сделать простой контроллер, по сути, видеобуфер, который будет формировать изображение в формате NTSC или PAL. А дальше, уже с помощью внешнего микроконтроллера, рисовать разноцветные буковки, простенькие графики и прочее.
Хочу получить 320 на 240 точек, пара бит на цвет. Короче, все не сложно. Но и проект должен быть бюджетным.
Вопросы:
1. Нет ли где готового проекта, посидеть - поковырять, сделать на его основе что нужно мне.
2. Если нет, подскажите пожалуйста, как прикинуть минимальную ПЛИС, которая потянет задачу. Склоняюсь в сторону Альтеры. Хочется чтобы была Альтера за 3-5 долларов + статическое ОЗУ за пару долларов.
Спасибо!
Лунь
Цитата(Jury093 @ Nov 17 2008, 14:40) *
Нда.. судя по вопросам не худо бы сначала почитать теорию..
В свое время я поинтересовался такой задачей и путями ее решения.
В первом варианте задача была решена на Lattice 1032 + 3x64КБ SRAM - разрешение 320х240х8бит
Во втором варианте цеплял контроллер к TFT Sharp 640x480x16бит (макетка с CycII + 512КБ SRAM)
К первому варианту легко довешивается кодер (PAL, NTSC) - мне было без надобности

Теперь по существу вопросов:
1. сходи сюда и почитай (это была для меня отправной точкой):
http://elm-chan.org/works/crtc/report.html
2. "прикинуть" объем несложно - тащишь пакет для проектирования в том кристалле, который выбрал, устанавливаешь, пишешь или рисуешь прошивку, в логах смотришь ответ в ЛЭ, типа такого:
Number of Macrocells is 116
Number of GLBs is 30
Number of product terms is 288
Maximum number of GLB levels is 4
Average number of inputs per GLB is 8.8
Average number of outputs per GLB is 3.9
Average number of product terms per GLB is 9.6
далее делаешь правильные выводы и подбираешь подходящий кристалл..


Теорию..... думаю, таким образом можно отвечать на 80% всех сообщений на этом форуме. Теорию читал и буду читать. Но надо пробовать и практику.

1. Я там уже все вылизал что можно. И прошил ПЛИСину (кстати только 1 версия Абелевского исходника проходит фитинг на ISE, другие - нет и вообще проекты, похоже не рабочие, но это для меня не важно. Как пример интересно). По этому проекту вопросов нет.

2. Это понятно. Это везде так. Только методологически, это - научный тык, а не прикидывание. Типа все написал, откомпилировал, не влезло (или влезло с большим запасом), пошел ножки переписывать для другой микросхемы. Вопрос задан с целью услышать +/- семейство Альтеры, которое "вроде бы" подойдет. Далее, в пределах семейства, я уж соображу что к чему. Сам думаю про микросхему EPM3032. Но это просто ощущение, может и промахиваюсь.

В общем, всем большое спасибо. На данном этапе вроде все более - менее ясно. Отправные точки имеются.
Саша Z
Вопрос в догонку:
когда источник картинки (streaming video) 320x240 или другое меньше чем натуральная резолюция ТВ - интерполриуем ?
Стандатные PAL/NTSC енкодеры ожидают на входе сигнал стандартной TV резолюции PAL или NTSC соответственно и его кодируют в composite.
Так вот если источник имеед дающий менее чем стандартный ТВ сигнал по резолюции, значит перед подачей на енкодер его нужно подогнать под PAL/NTSC ?

Если например кадровая частота источника зачительно больше нужной конечной (25 или 30 fps), например: 50, то в приципе можно попробовать запускать каждый входной кадр как одно поле выходного (т.е. из 2х кадров по 240 строк на входе получаем один кадр на выходе 480 строк). Но по ширине все равно по идее нужно интерполировать до PAL/NTSC стандарта ?
yes
Цитата(Саша Z @ Nov 17 2008, 23:23) *
Но по ширине все равно по идее нужно интерполировать до PAL/NTSC стандарта ?


ну там 704 или 720 точек - из 320 повторить дважды + небольшие поля с боков - имхо, проще

а вопрос, кроме CXA1645 какие-то аналоги есть более современные : 3В, жруть поменьше, корпус поменьше?
Лунь
Цитата(yes @ Nov 18 2008, 14:07) *
а вопрос, кроме CXA1645 какие-то аналоги есть более современные : 3В, жруть поменьше, корпус поменьше?


Есть у Аналоговых Девиц, типа AD725 и подобные. AD723 - с питанием 3 V
Саша Z
Цитата(yes @ Nov 18 2008, 15:07) *
ну там 704 или 720 точек - из 320 повторить дважды + небольшие поля с боков - имхо, проще


Вот это то как раз и вопрос...
повторять каждый второй пиксель то оно наиболее просто, но как сказывается на качестве на ТВ относительно более "умных" алгоритмов ? (тут в схожих ветках предлагались несколько подходов пиксельной интерполяции). Интересно именно на основании опыта: сильно ли сказывается простая дупликация пикселей на статическом и динамическом изображении ?
yes
Цитата(Саша Z @ Nov 18 2008, 15:17) *
Вот это то как раз и вопрос...
повторять каждый второй пиксель то оно наиболее просто, но как сказывается на качестве на ТВ относительно более "умных" алгоритмов ? (тут в схожих ветках предлагались несколько подходов пиксельной интерполяции). Интересно именно на основании опыта: сильно ли сказывается простая дупликация пикселей на статическом и динамическом изображении ?


если информации 320х240 точек, то сильно умный алгоритм нужен, чтобы качество улучшить
а при динамическом с учетом "векторов движения" совсем какие-то эвристические алгоритмы нужны - имхо, не та тема
то есть железо несопоставимо сложнее чем выдача изображения ХхУ

Цитата(Лунь @ Nov 18 2008, 14:19) *
Есть у Аналоговых Девиц, типа AD725 и подобные. AD723 - с питанием 3 V

мне получается дешевле AD7171 использовать, который (вроде бы) Вам рекомендовал на телесиськах

казалось, что такие микрухи вообще забезплатно должны раздавать smile.gif
Лунь
Цитата(yes @ Nov 18 2008, 15:32) *
мне получается дешевле AD7171 использовать, который (вроде бы) Вам рекомендовал на телесиськах

казалось, что такие микрухи вообще забезплатно должны раздавать smile.gif


Да, на телесиськах я был, но AD7171 не помню, кажется не было. Учту, погляжу. Спасибо.
Да, цены при данном функционале - не очень. Но я слышал отзывы людей, которым довелось ставить и CXA и AD. Ответ однозначный, AD много выигрывает по качеству картинки. Заметно даже на простых задачках, типа той, что мне нужно сделать. Про сравнение с AD7171 ничего не слышал.
Саша Z
Цитата(yes @ Nov 18 2008, 16:32) *
если информации 320х240 точек, то сильно умный алгоритм нужен, чтобы качество улучшить
а при динамическом с учетом "векторов движения" совсем какие-то эвристические алгоритмы нужны - имхо, не та тема
то есть железо несопоставимо сложнее чем выдача изображения ХхУ


Может быть...
Мне будет важно как можно меньше размазывать края объекта в изображении, вопрос насколько дубляж пикселей будет влиять на это, особенно в статической картинке...
yes
Цитата(Лунь @ Nov 18 2008, 15:38) *
Да, на телесиськах я был, но AD7171 не помню, кажется не было. Учту, погляжу. Спасибо.
Да, цены при данном функционале - не очень. Но я слышал отзывы людей, которым довелось ставить и CXA и AD. Ответ однозначный, AD много выигрывает по качеству картинки. Заметно даже на простых задачках, типа той, что мне нужно сделать. Про сравнение с AD7171 ничего не слышал.


картинку AD7171 показывает хорошую (на EZ-KITE смотрел)
ничего не дрожит, цвета насыщенные

у нее цифровой вход и DACи внутре
Лунь
Цитата(yes @ Nov 18 2008, 16:32) *
картинку AD7171 показывает хорошую (на EZ-KITE смотрел)
ничего не дрожит, цвета насыщенные

у нее цифровой вход и DACи внутре


Щас глянул - мы с вами наверное говорим о ADV7171? без V вроде нет. Да, наличие ЦАП дает ощутимое удобство. правда, и 10 баксов на дороге не валяется....
Dopler
Запустил свою железку. Китайцы малость обманули с разрешением телевизора (заявлено 480х234), а на самом деле получилось 460х272. Развертка прогрессивная (50 гЦ), 4 цвета (2 бита на цвет). Все это поместилось в 24 ячейки EPM3032A + один аппаратный ШИМ меги 48 для генерации синхроимпульсов + 2 микросхемы последовательной памяти N256S08 для двойной буфферизации.
Лунь
Цитата(Dopler @ Dec 4 2008, 12:10) *
Запустил свою железку. Китайцы малость обманули с разрешением телевизора (заявлено 480х234), а на самом деле получилось 460х272. Развертка прогрессивная (50 гЦ), 4 цвета (2 бита на цвет). Все это поместилось в 24 ячейки EPM3032A + один аппаратный ШИМ меги 48 для генерации синхроимпульсов + 2 микросхемы последовательной памяти N256S08 для двойной буфферизации.


Спасибо что поделились результатами.
Вопрос, у вас 4 цвета, вы пишете. То есть, вы выводите черно-белое изображение? Нет цветности, нет color burst?
Как определили разрешение TFT ящика? При вашем разрешении в 480 точек края символов размазывались? И подобрали опытным путем 460?
И все же на счет двойной буферизации. Если у вас 2 бита на точку, а не на цветовой канал, то в одном байте у вас помещается 4 точки. Думаю, вы бы все успели и с одной микросхемой памяти.....
Dopler
Цитата(Лунь @ Dec 6 2008, 13:34) *
Спасибо что поделились результатами.
Вопрос, у вас 4 цвета, вы пишете. То есть, вы выводите черно-белое изображение? Нет цветности, нет color burst?
Как определили разрешение TFT ящика? При вашем разрешении в 480 точек края символов размазывались? И подобрали опытным путем 460?
И все же на счет двойной буферизации. Если у вас 2 бита на точку, а не на цветовой канал, то в одном байте у вас помещается 4 точки. Думаю, вы бы все успели и с одной микросхемой памяти.....


Да, изображение черно-белое, 4 цвета - черный, два серых и белый.
С разрешением ящика все до сих пор не ясно. Проверял я его просто выводя картинку известной величины. Во всех инструкциях (к телевизорам разных фирм) заявлено разрешение матрицы 480х234. Я не мог понять, как он в 234 строки помещает телевизионный сигнал, в котором 576 строк (при черезстрочной развертке) или 288 при прогрессивной. Я думал, что он и берет только 234 строки из 288, остальные отбрасывает. Оказалось, что картинка 480*234 помещается полностью, плюс остается назанятая полоса примерно 10%, т.е. на своем экране данный телевизор отображает все положенные строки. Т.е. либо китайцы брешут в инструкции, либо там действуют какие-либо сжимающие алгоритмы.
Еще один не ясный момент - по идее на экран должно выводится 52 мкс сигнала (12 мкс из 64 занимает строчный импульс), из этих соображений я и расчитывал частоту тактового генератора, чтобы в 52 мкс уложить 480 точек. В итоге данный телевизор выводит на экран только 50 мкс сигнала, поэтому разрешение получается 460 точек. Скорее всесго в дальнейшем повышу частоту до 10 мГц, что даст 500 точек по горизонтали.

На TFT ящике ничего не размазывается, не по краям, не по середине.

Да действительно, 4 точки в одном байте. Чтобы хранить один экран целиком (а двойная буфферизация это и подразумевает - один буфер на экране, другой формируется) необходимо - 480*234*2 = 224640 бит, что как раз помещается в одну 32К память. Отсюда следует, что для организации двух буферов нужно две таких памяти.
Лунь
Цитата(Dopler @ Dec 7 2008, 00:11) *
Да действительно, 4 точки в одном байте. Чтобы хранить один экран целиком (а двойная буфферизация это и подразумевает - один буфер на экране, другой формируется) необходимо - 480*234*2 = 224640 бит, что как раз помещается в одну 32К память. Отсюда следует, что для организации двух буферов нужно две таких памяти.


А! Понял, вы применили 2 буфера чтобы в одном формировать, а из другого выводить, другими словами, формируете изображение довольно медленно, и чтобы не утомлять этим пользователя, формируете, а потом перещелкиваетесь на другую SRAM.
Про размазывание я имел в виду тот случай, когда вы выводите например 400 точек на строку, а их на TFT реально 500, то что будет получаться в результате такого несовпадения? Например, контрастные изображения, типа черная буква на белом фоне у вас, не появляется ли каких-то хвостов? Ну там, полутона какие-нибудь?
Спасибо что делитесь информацией.
Dopler
Цитата(Лунь @ Dec 8 2008, 11:44) *
А! Понял, вы применили 2 буфера чтобы в одном формировать, а из другого выводить, другими словами, формируете изображение довольно медленно, и чтобы не утомлять этим пользователя, формируете, а потом перещелкиваетесь на другую SRAM.

Да, именно так.

Цитата
Про размазывание я имел в виду тот случай, когда вы выводите например 400 точек на строку, а их на TFT реально 500, то что будет получаться в результате такого несовпадения? Например, контрастные изображения, типа черная буква на белом фоне у вас, не появляется ли каких-то хвостов? Ну там, полутона какие-нибудь?
Спасибо что делитесь информацией.


Да, получается, но это уже практически не заметно с растояния 20-30 см. В самом начале экспериментов я выводил на экран частую сетку ( с ячейкой 4 пиксела), если смотреть в упор, то видно, что белые полосы с одной стороны обрамляются серым полутоном. В данном случае этого никак не избежать, так как сигнал аналоговый, телевизор его цифрует, частоты генераторов идеально не совпадают, поэтому джиттер на один пиксел будет в любом случае.
Лунь
Цитата(Dopler @ Dec 9 2008, 09:41) *
Да, именно так.
Да, получается, но это уже практически не заметно с растояния 20-30 см. В самом начале экспериментов я выводил на экран частую сетку ( с ячейкой 4 пиксела), если смотреть в упор, то видно, что белые полосы с одной стороны обрамляются серым полутоном. В данном случае этого никак не избежать, так как сигнал аналоговый, телевизор его цифрует, частоты генераторов идеально не совпадают, поэтому джиттер на один пиксел будет в любом случае.


Спасибо большое, все ясно. Осталось найти время и доделать. Пока есть только синхронизация. По вашему опыту, решил тоже делать 2 буфера.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.