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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Несложный видеоконтроллер на ПЛИС, с чего начать?
penauch
сообщение Oct 12 2009, 23:59
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902



в ПЛИСах начинающий.
сильно не пинать smile.gif

требуется сделать несложный видеоконтроллер обладающий следующим:

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 кБ и выше? со встроенным видео-цап ?
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 13 2009, 00:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Для начала нужно воспользоваться поиском по форуму. Темы, схожие или родственные с вашей, поднимались неоднократно. Для примера
http://electronix.ru/forum/index.php?showtopic=54311
http://electronix.ru/forum/index.php?showtopic=64006
http://electronix.ru/forum/index.php?showtopic=58071
Go to the top of the page
 
+Quote Post
penauch
сообщение Oct 13 2009, 01:19
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902



Цитата(rezident @ Oct 13 2009, 04:44) *


к сожалению намёток на мои вопросы там не получил, потому что задачи разные.

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

тоесть на уровне триггеров, регистров и пр. или на VHDL
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 13 2009, 01:55
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(penauch @ Oct 13 2009, 07:19) *
тоесть как происходит считывание из памяти и выброс на экран?
В цикле, вестимо. laughing.gif Синхронно с генерацией импульсов синхронизации происходит циклический перебор адресов памяти с выборкой значений из видеоОЗУ.
Цитата(penauch @ Oct 13 2009, 07:19) *
как реализуется палитра ?
Обычно с помощью видеоЦАП и таблицы преобразования.
Цитата(penauch @ Oct 13 2009, 07:19) *
обращение к порту?
К какому именно порту? К видеоОЗУ или к регистрам видеоадаптера?
Цитата(penauch @ Oct 13 2009, 07:19) *
тоесть на уровне триггеров, регистров и пр. или на VHDL
А вот это зря! Рано еще. Попробуйте использовать тот же метод, что и небезызвестный Шерлок Холмс - метод дедукции. Идите от общего к частному. Сначала основы изучите, потом на уровне блок-схем прикиньте реализацию и только потом к триггерам и регистрам схемы переходите.
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Oct 13 2009, 04:18
Сообщение #5


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



очень сильно зависит от того как писать в память и какой тип памяти использовать. вывод на тв самому интересен, на монитор vga уже пройденный этап.

этап 1 - выдать растр -сформировать комплексный видео сигнал без данных или с палитрой.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Oct 13 2009, 04:41
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Смотрите учебный курс у Альтеры или стартовый набор на Спартан-3е у ксайлинкса...
И сайт Диджилента...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
penauch
сообщение Oct 13 2009, 04:47
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 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) как посчитать растактовки сигналов исходя из частоты кварца, которым тактируется ПЛИС?
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Oct 13 2009, 05:24
Сообщение #8


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



зачем делать палитру, если у тебя уже 65к цветов судя по 5 6 5

сразу скажу где будут узкие места.

в кадре не 240 строк - следовательно строку надо выводить по 2 раза - а так как в разных полукадрах, то хранить не получится придётся окучивать память.

итого 480*320*25 - учитывая обратные ходы около 4-5 мегагерц дальше надо разруливать эту асинхронность записи, чтобы было без потерь времени нужно фифо

какую плис хочешь использовать?

Сообщение отредактировал rv3dll(lex) - Oct 13 2009, 05:32
Go to the top of the page
 
+Quote Post
penauch
сообщение Oct 13 2009, 06:06
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 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 ну худой конец.
Go to the top of the page
 
+Quote Post
alevnew
сообщение Oct 13 2009, 06:35
Сообщение #10


Частый гость
**

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



Цитата(penauch @ Oct 13 2009, 12:06) *
навороты в видеоконтроллере не нужны - хотелось бы уложиться в Altera MAX7000 или Cyclone-2 ну худой конец.

В циклон 2, думаю, без проблем - подобный проект, с выводом на монитор 1024*768 займет порядка 1500 ячеек. Память SDRAM логичнее для плис исползовать. Для ТВ требования попроще, наверное.
Go to the top of the page
 
+Quote Post
penauch
сообщение Oct 13 2009, 06:57
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902



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

нужен 320x240 @50/60 Гц 8bpp, 16bpp на телевизионный приёмник
Go to the top of the page
 
+Quote Post
alevnew
сообщение Oct 13 2009, 08:00
Сообщение #12


Частый гость
**

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



Цитата(penauch @ Oct 13 2009, 12:57) *
не хотелось бы обсуждать множество вариантов, а хотелось бы остановиться на конкретике, которая написана в первом сообщении.
нужен 320x240 @50/60 Гц 8bpp, 16bpp на телевизионный приёмник

Под конкретикой подразумевается готовый проект, адаптируемый методом copy|paste ? biggrin.gif
Предполагаю, что извилинами все же придется пошевелить- вряд ли найдется у кого-нибудь пара часов - > дней, для представления конкретики "под ключ".

Сообщение отредактировал alevnew - Oct 13 2009, 08:16
Go to the top of the page
 
+Quote Post
penauch
сообщение Oct 13 2009, 11:08
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902



Цитата(alevnew @ Oct 13 2009, 12:00) *
Под конкретикой подразумевается готовый проект, адаптируемый методом copy|paste ? biggrin.gif
Предполагаю, что извилинами все же придется пошевелить- вряд ли найдется у кого-нибудь пара часов - > дней, для представления конкретики "под ключ".


мне не нужен копипаст, а нужно чтоб направили на соответствующую литературу или информации.

книжек про ПЛИСы много а вот книги под названием "как сделать видеоконтроллер" или "принципы работы видеоконтроллера" нет.

вот я и хочу выяснить есть ли такая литература вообще или вкратце рассказали об основыных блоках видеоконтроллера с точки зрения блок-схем
Go to the top of the page
 
+Quote Post
AlexanderX
сообщение Oct 13 2009, 11:10
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 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. ИМНО выводить на компьютерный монитор гораздо проще, чем в телевизионном стандарте. Кстати можно избежать многих проблем с масштабированием, преобразованием форматов и пр. Если выводить черно-белое изображение. Тогда можно применить простой ЦАП, которым сформировать нужную форму, включая синхроимпульсы. cool.gif
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Oct 13 2009, 11:22
Сообщение #15


Знающий
****

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



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


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post

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

 


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


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