|
Несложный видеоконтроллер на ПЛИС, с чего начать? |
|
|
|
Oct 12 2009, 23:59
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902

|
в ПЛИСах начинающий. сильно не пинать  требуется сделать несложный видеоконтроллер обладающий следующим: 1) вывод на телевизор (PAL / NTSC) 2) разрешение 320 на 240 (QVGA) 3) цветность - 16 бит на точку (компоненты R,G,B побитово 5:6:5), поддержка палитры (256 цветов, 1 байт на точку) 4) доступ к видеопамяти видеоконтроллера через 8-битный порт-ввода вывода 5) обращение к памяти с автоинкрементом адреса (экономит адресные линии, A0=0 - комманды, A0=1 - данные) 6) обращение к видеоконтроллеру во время HBlank или VBlank. Или прийдётся делать 2 страницы Вопросы: 1) есть ли похожие готовые решения? 2) с чего начать? 3) где можно почитать о принципах построения видеоконтроллеров на ПЛИС? 4) возможно ли впихнуть в недорогую ПЛИС (типа PLCC, QFP с количеством пинов не более 128)? 5) есть ли ПЛИС со встроенной памятью от 512 кБ и выше? со встроенным видео-цап ?
|
|
|
|
|
Oct 13 2009, 01:19
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902

|
Цитата(rezident @ Oct 13 2009, 04:44)  к сожалению намёток на мои вопросы там не получил, потому что задачи разные. я же в основном упор делаю на генерацию видеосигналов, тоесть как работает видеоконтроллер - тоесть как происходит считывание из памяти и выброс на экран? как реализуется палитра ? обращение к порту? ит.п. ? тоесть на уровне триггеров, регистров и пр. или на VHDL
|
|
|
|
|
Oct 13 2009, 01:55
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(penauch @ Oct 13 2009, 07:19)  тоесть как происходит считывание из памяти и выброс на экран? В цикле, вестимо.  Синхронно с генерацией импульсов синхронизации происходит циклический перебор адресов памяти с выборкой значений из видеоОЗУ. Цитата(penauch @ Oct 13 2009, 07:19)  как реализуется палитра ? Обычно с помощью видеоЦАП и таблицы преобразования. Цитата(penauch @ Oct 13 2009, 07:19)  обращение к порту? К какому именно порту? К видеоОЗУ или к регистрам видеоадаптера? Цитата(penauch @ Oct 13 2009, 07:19)  тоесть на уровне триггеров, регистров и пр. или на VHDL А вот это зря! Рано еще. Попробуйте использовать тот же метод, что и небезызвестный Шерлок Холмс - метод дедукции. Идите от общего к частному. Сначала основы изучите, потом на уровне блок-схем прикиньте реализацию и только потом к триггерам и регистрам схемы переходите.
|
|
|
|
|
Oct 13 2009, 04:47
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902

|
Цитата(rv3dll(lex) @ Oct 13 2009, 08:18)  очень сильно зависит от того как писать в память и какой тип памяти использовать. вывод на тв самому интересен, на монитор vga уже пройденный этап.
этап 1 - выдать растр -сформировать комплексный видео сигнал без данных или с палитрой. Память SRAM 256K x 16 одно слово хранит 1 пиксель в формате RGB 5:6:5 Писать в память видеоконтроллера посредством записи в его 16-битный порт. Интерфейс обмена наподобие как в ЖКИ. Тоесть: D0..D15 - данные или команда A0 (0 - команда, 1 - данные) CS,OE,WE - стробы: выбор видеоконтроллера, асинхронные чтение, запись вот через такой порт общение с хост-CPU при каждом обращении к видео-памяти адрес увеличивается, по достижению конца кадра адрес переходит на начало. По части вывода на TB ничего сложного - нужна микросхема кодера PAL и будет телевизор. Ну и развертка 15 кГц по горизонтали д.б. Вопросы: 1) как сделать палитру? 256 цветов из 65536 2) как посчитать растактовки сигналов исходя из частоты кварца, которым тактируется ПЛИС?
|
|
|
|
|
Oct 13 2009, 06:06
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902

|
Цитата(rv3dll(lex) @ Oct 13 2009, 09:24)  зачем делать палитру, если у тебя уже 65к цветов судя по 5 6 5 нужно 2 режима(256 цветов палитровый и 64К директ колор). ну как в видеокарточках ПК Цитата(rv3dll(lex) @ Oct 13 2009, 09:24)  в кадре не 240 строк - следовательно строку надо выводить по 2 раза - а так как в разных полукадрах, то хранить не получится придётся окучивать память. это по-моему называется double scan, так? Цитата(rv3dll(lex) @ Oct 13 2009, 09:24)  итого 480*320*25 - учитывая обратные ходы около 4-5 мегагерц дальше надо разруливать эту асинхронность записи, чтобы было без потерь времени нужно фифо не совсем понял. как себе представляю считывание из видео-памяти. есть счётчик, который выставляет адреса с частотой пиксельклока (адреса увеличиваются), а видеопамять выдаёт (из неё сканер читает) слова. вродеб заморочек нет... Цитата(rv3dll(lex) @ Oct 13 2009, 09:24)  какую плис хочешь использовать? навороты в видеоконтроллере не нужны - хотелось бы уложиться в Altera MAX7000 или Cyclone-2 ну худой конец.
|
|
|
|
|
Oct 13 2009, 06:35
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(penauch @ Oct 13 2009, 12:06)  навороты в видеоконтроллере не нужны - хотелось бы уложиться в Altera MAX7000 или Cyclone-2 ну худой конец. В циклон 2, думаю, без проблем - подобный проект, с выводом на монитор 1024*768 займет порядка 1500 ячеек. Память SDRAM логичнее для плис исползовать. Для ТВ требования попроще, наверное.
|
|
|
|
|
Oct 13 2009, 08:00
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(penauch @ Oct 13 2009, 12:57)  не хотелось бы обсуждать множество вариантов, а хотелось бы остановиться на конкретике, которая написана в первом сообщении. нужен 320x240 @50/60 Гц 8bpp, 16bpp на телевизионный приёмник Под конкретикой подразумевается готовый проект, адаптируемый методом copy|paste ?  Предполагаю, что извилинами все же придется пошевелить- вряд ли найдется у кого-нибудь пара часов - > дней, для представления конкретики "под ключ".
Сообщение отредактировал alevnew - Oct 13 2009, 08:16
|
|
|
|
|
Oct 13 2009, 11:08
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902

|
Цитата(alevnew @ Oct 13 2009, 12:00)  Под конкретикой подразумевается готовый проект, адаптируемый методом copy|paste ?  Предполагаю, что извилинами все же придется пошевелить- вряд ли найдется у кого-нибудь пара часов - > дней, для представления конкретики "под ключ". мне не нужен копипаст, а нужно чтоб направили на соответствующую литературу или информации. книжек про ПЛИСы много а вот книги под названием "как сделать видеоконтроллер" или "принципы работы видеоконтроллера" нет. вот я и хочу выяснить есть ли такая литература вообще или вкратце рассказали об основыных блоках видеоконтроллера с точки зрения блок-схем
|
|
|
|
|
Oct 13 2009, 11:10
|
Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 21-07-05
Из: Киев
Пользователь №: 6 977

|
1. Я думаю начать нужно с выбора Video Encoder. Советую посмотреть готовые решения и не мастырить своё на обычном ЦАП. Что-то типа ADV7170, SAF7129 или что-то другое на Ваш вкус (названия привел для понимания что искать). 2. После прочтения документации Вы увидите, что стандартный протокол общения с Video Encoder это ITU-R BT.656, принимающий данные в формате Cb-Y-Cr 4:2:2. Поскольку формат 4:2:2 отличается от заявленного RGB нужно будет сделать специальный конвертер. Формулы преобразования одного в другое и наоборот можно найти в Интернете. 3. Ваше разрешение (320x240) не совпадает со стандартом PAL. Поэтому Вам необходимо произвести увеличение (scale) изображения. Наиболее простое увеличение - это в два раза. Можно простым дублированием, но более симпатичная картинка получится при интерполяции. При увеличении картинки в два раза Вы должны осознавать, что получите изображение не на полный размер экрана, а например, только в центре с полями по краям. 4. По Вашему ТЗ минимальный объем памяти - 153600 байт. Это при одной странице изображения. Делать одну страницу изображения это плохой тон, потому что в момент вывода на экран Вы будете менять изображение, что может привести к различным неприятным видео эффектам. Поскольку все же лучше иметь хотя бы 2 страницы видео памяти, то требуемый объем памяти возрастает до 307200 байт. Такой объем внутренней памяти в ПЛИС встречается только в дорогих семействах. Значит нужно ставить внешнюю видео память. Наиболее простое управление у асинхронной внешней памяти. Опять же для упрощения, можно удвоить частоту на память и в нечетных тактах читать видео память, а в четных писать. 5. Не забудьте что информация в PAL выводится чересстрочная. Но при увеличении в два раза, Вы можете просто дважды вывести один и тот же кадр. Если задумаете масштабироваться в другое число раз по вертикали (не кратное двум), тогда все становится гораздо сложнее. P.S. ИМНО выводить на компьютерный монитор гораздо проще, чем в телевизионном стандарте. Кстати можно избежать многих проблем с масштабированием, преобразованием форматов и пр. Если выводить черно-белое изображение. Тогда можно применить простой ЦАП, которым сформировать нужную форму, включая синхроимпульсы.
|
|
|
|
|
Oct 13 2009, 11:22
|

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
На первых этапах, я бы вообще, абстрагировался от мысли, что делать надо именно на ПЛИС, оставив только сознание того, что формирование картинки на ТВ или мониторе это строгий реал-тайм и что ваш инструмент это может. С ТВ не работал, с VGA немного "общался". Изучите принцип формирования кадра, количество сигналов, пикселей, строк, наличие полей. Определите требуемую частоту выборки данных из некой памяти. Прикиньте скоростные возможности управляющего МК. Исходя из этого, выбирайте стратегию работы с картинкой (навскидку): 1. Полная смена кадра в течении обратного хода луча 2. Использование 2-ух страниц памяти 3. Поэтапная смена кадра в процессе прорисовки (картинка может "пускать волну") Продумывайте - как будете физически организовывать работу с памятью - либо отдельными фреймами "только запись" (во время следования полей) и "только чтение" (во время вывода строки), либо произвольное чередование (может потребоваться небольшая буферизация, вероятно - для записи). Т.о. перед Вами приличное поле для умственной деятельности безотносительно к самой ПЛИС и работе с нею.
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|