|
Несложный видеоконтроллер на ПЛИС, с чего начать? |
|
|
|
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 кБ и выше? со встроенным видео-цап ?
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 37)
|
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. Поэтапная смена кадра в процессе прорисовки (картинка может "пускать волну") Продумывайте - как будете физически организовывать работу с памятью - либо отдельными фреймами "только запись" (во время следования полей) и "только чтение" (во время вывода строки), либо произвольное чередование (может потребоваться небольшая буферизация, вероятно - для записи). Т.о. перед Вами приличное поле для умственной деятельности безотносительно к самой ПЛИС и работе с нею.
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Oct 13 2009, 16:37
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Вы же видите что человек начинающий, а Вы ему SDRAM советуете. Он только на ней умрет. Слухи о сложности окучивания SDRAM сильно преувеличены. Например - http://tinyvga.com/avr-sdram-vgaЯ тут недавно аналогичное решение в другую сторону (быстро цифровать видеосигнал) применил, только с ARM'ом. Кстати, самое смешное, что PAL можно сгенерить даже без специального кодера, хватит банального 8мибитного ЦАПа. Главное - выбрать тактовую частоту равной учетверенной частоте цветовой поднесущей.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Oct 13 2009, 23:06
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 12-10-09
Пользователь №: 52 902

|
спасибо за ссылки.
но про формирование PAL и про цветоразностные сигналы - вы немного усложнили всё.
есть готовые микросхемы кодеров PAL/NTSC, которым на вход заводятся R,G,B, CSync , а на выходе имеем уже композитный ТВ-сигнал
так что со стороны ПЛИС нужно сформировать r,g,b,csync
и не надо озадачиваться всякими черезстрочностями и так далее... - достаточно формировать прогрессивный растр.
исправьте, если ошибаюсь
P.S. память будет SRAM 256K x 16
Сообщение отредактировал penauch - Oct 13 2009, 23:07
|
|
|
|
|
Oct 14 2009, 03:46
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата я правильно понял, заинитил, рефреш побоку, запусти чтение страницы и дуй в ЦАП? Типа того. Конкретно в этом проекте я особо не разбирался, наступил на него случайно, уже когда свое поехало. Но у себя я на строчном синхроимпульсе делаю необходимое количество регенераций. Их там для телевизора 4 шутки всего надо. Цитата только не понятно на схематике откуда мега берет исходную пикчю ? Через последовательный порт заливают.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Oct 14 2009, 04:45
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(Rst7 @ Oct 13 2009, 22:37)  Слухи о сложности окучивания SDRAM сильно преувеличены. Согласен. Вот рабочий пример контроллера SDRAM от Альтеры на верилоге, с описанием и всем что нужно. Начинал с него, немного доработав.
sdr_sdram.rar ( 758.97 килобайт )
Кол-во скачиваний: 290
|
|
|
|
|
Oct 14 2009, 05:17
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(rv3dll(lex) @ Oct 14 2009, 11:06)  ну это как сказать)))
особенно по сравнению со статикой, которую не надо пречарже и тому подобные вещи - адрес поставил и через такт-два читай и весь проект в макс7000 256 Тут конечно от конкретной задачи зависит. Но когда требуются мегабайты памяти - SRAM может не помочь. Раньше пытался SRAM использовать по возможности. Но единыжды разобравшись с SRDAM теперь использую его. Да и по цене дешевле за мегабайт. В циклоне 2 данный SDRAM контроллер занимает 147 ячеек.
|
|
|
|
|
Oct 14 2009, 05:59
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(des00 @ Oct 14 2009, 11:49)  это если устроит 8/20 от максимальной полосы памяти %) в бурст режиме ест-но %) Это что имеется в виду??? Не понял. 8/20 - это что и почему? У меня работает с SDRAM 16Mx16, частота шины 130 Мгц, выше не пробовал. Режим бурст, ипользую для быстроты полные страницы (по 512 слов).
Сообщение отредактировал alevnew - Oct 14 2009, 06:00
|
|
|
|
|
Oct 14 2009, 06:52
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(alevnew @ Oct 14 2009, 00:59)  Это что имеется в виду??? Не понял. 8/20 - это что и почему? У меня работает с SDRAM 16Mx16, частота шины 130 Мгц, выше не пробовал. Режим бурст, ипользую для быстроты полные страницы (по 512 слов). srd_sdram.pdf -> Simulation, Synthesis, Place and Route, and Results -> Table 6 Post Route Performance comparison -> 133MHz -> 212.8Mbyte/s Цитата The post route performance results for the SDR SDRAM controller are shown in Table 6. Throughput is calculated using a 32 bit data path to SDRAM and a 20 clock READA cycle time for an 8 cycle SDRAM burst. READA cycle time in clocks represents the critical path as WRITE A cycle time is 15 clocks. при чтении бурстами по 8 выше 40% полосы чтения не получить, при бурстах меньше будет все хуже. Исключение режим чтения полных страниц.
--------------------
|
|
|
|
|
Oct 14 2009, 07:04
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Rst7 @ Oct 14 2009, 01:57)  Тут все не так просто - в пределах активированного банка все столбцы можно читать произвольно. Но утилизация этой фичи требует усложнения контроллера - если новый адрес не попадает ни в один из активированных банков, то самый старый (в смысле - давно использовавшийся) деактивируется и активируется с новым адресом строки. это я в курсе, в своем контроллере я это учел, правда весит он не 140 плиток %) Цитата Ну и кроме того, держать банк в активированном виде до бесконечности нельзя. так то оно так, но это время много больше рекомендуемого периода авторефреша, поэтому большой проблемы тут нет
--------------------
|
|
|
|
|
Oct 14 2009, 07:13
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Rst7 @ Oct 14 2009, 02:10)  Не совсем. Иногда выгоднее выдавать не равномерный авторефреш, а пачками, главное, чтобы все 4К прошли за 64мс - этот момент оговорен в даташитах. можно работать вообще без рефреша, если вы обращаетесь ко всей нужной вам области памяти(это не обязательно вся память) за пресловутые 64мс. т.к. авторефреш это последовательность комманд act-pre, а адрес тупо берется из счетчика %) Цитата Я вообще это к тому, что контроллер SDRAM выгодно точить под необходимое применение - например, достаточно красиво (и малоресурсно) можно генерить видеосигнал. Или - цифровать  согласен целиком и полностью %)
--------------------
|
|
|
|
|
Oct 14 2009, 07:17
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата можно работать вообще без рефреша Безусловно. Цитата согласен целиком и полностью %) Согласие есть продукт при полном непротивлении сторон
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Oct 14 2009, 07:57
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(des00 @ Oct 14 2009, 12:52)  srd_sdram.pdf -> Simulation, Synthesis, Place and Route, and Results -> Table 6 Post Route Performance comparison -> 133MHz -> 212.8Mbyte/s при чтении бурстами по 8 выше 40% полосы чтения не получить, при бурстах меньше будет все хуже. Исключение режим чтения полных страниц. Если по 8 читать, то да, потери будут на команды ощутимые. Но и то, при полосе 40% это 19 нс. SRAM с таким временем доступа и большим объемом, думаю, не слишком доступны и дешевы. На счет 15 тактов - на то он и бесплатный образец
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|