|
Как сделать в FPGA свой SCALER, Вопрос для тех кто работает с видео |
|
|
|
Apr 13 2005, 10:57
|
Участник

Группа: Свой
Сообщений: 74
Регистрация: 30-03-05
Из: Одесса
Пользователь №: 3 796

|
Задача: есть входной сигнал RGB 24бита . Формат сигнала может быть различным 640х480, 800x600 и т.п.(вообщем VESA) надо сделать так что бы на выходе формат не зависил от входа т.е. вход 640х480 выход 1280x1024 или вход 1280х1024 выход 800х600. Т.е. понятно что сигнал оцифровуется попадает в FPGA(я использую альтеру) и выходит на ЦАП. В альтере надо сделать Upscaler и Downscaler . Так вот вопрос как это сделать. Любые ссылки , теориии , примеры приветствуются.
PS. Раньше уже делал подобную вещь но использовал готовый scaler от Philips SAA6713. Теперь scaler надо засунуть в альтеру а на входе будет простой 3хАЦП.
|
|
|
|
|
 |
Ответов
(1 - 7)
|
Apr 13 2005, 11:38
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Pahuchy @ Apr 13 2005, 05:57) Задача: есть входной сигнал RGB 24бита . Формат сигнала может быть различным 640х480, 800x600 и т.п.(вообщем VESA) надо сделать так что бы на выходе формат не зависил от входа т.е. вход 640х480 выход 1280x1024 или вход 1280х1024 выход 800х600. Т.е. понятно что сигнал оцифровуется попадает в FPGA(я использую альтеру) и выходит на ЦАП. В альтере надо сделать Upscaler и Downscaler . Так вот вопрос как это сделать. Любые ссылки , теориии , примеры приветствуются. PS. Раньше уже делал подобную вещь но использовал готовый scaler от Philips SAA6713. Теперь scaler надо засунуть в альтеру а на входе будет простой 3хАЦП. Хммм имхо если бы передо мнй встала такая задача, то нужно определить следующее : 1. Метод интерполяции данных (при увеличении изображения необходимо расчитать "недостающие" точки) 2. Метод прореживания данных.
--------------------
|
|
|
|
|
Apr 14 2005, 10:15
|
Участник

Группа: Свой
Сообщений: 74
Регистрация: 30-03-05
Из: Одесса
Пользователь №: 3 796

|
Это и коню понятно  что надо интреполировать и прореживать где мне про ето почитать ? Как практически реализовать? Может кто делал что то подобное. Цитата(archip @ Apr 14 2005, 12:21) СОбственно, от добра добра не ищут. Почему возникла идея отказаться от Philips SAA6713? Если только по цене - думаю, самопал Вам обойдётся дороже. Конечно, если вопрос про расширенный диапазон температур, то именно самому придётся делать. Только придётся повторить почти весь путь эволюции scaler`ов, в борьбе за качество выходной картинки. Объясняю в новом изделии использую Cyclone II . Внутренние ресурсы используются не полностью. Какой смысл ставить внешнюю микросхему (дорогую и содержащую много ненужных узлов ) если можно использовать ресурсы циклона. Кроме того она не обеспечивает UXGA 1600x1200 Scaler который поддерживае UXGA можно купить только если вы являетесь фирмой SONY,Samsung и т.п. в количестве 1000000....... штук
|
|
|
|
|
Apr 29 2005, 14:14
|
Участник

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

|
То Pahuchy
Сэр, не будете ли Вы так дорбры ответить на несколько вопросов по SAA6713?
1) Можно ли использовать порты PA, PB, PC как входы, а данные снимать с PD, PE, PF? 2) Какой максимальный коэффициент масштабирования? 3) Можно ли сконфигурировать ИМС под маленькие размеры входной картинки, например, 64*64 пикселов? 4) Если входная картинка имеет разрешение 1024*768 и установлен максимальный коэф. масштабирования, то что получится на выходе: масштабирование первых х*у пикселей или полный паралич?
Искренне благодарен за оказанное внимание.
Сообщение отредактировал YUV - Apr 29 2005, 14:17
|
|
|
|
|
May 4 2005, 17:02
|
Участник

Группа: Свой
Сообщений: 74
Регистрация: 30-03-05
Из: Одесса
Пользователь №: 3 796

|
1. Да можно . Установите биты ext_select в 1 dvi_select в 0 настройте VCLK как вход vclk_in_en в 1
Подавайте RGB на PA, PB, PC (тактируйте их VCLK) далее в SAA делайте что вам надо (скелинг, коррекция, наложение лого и т.п.) и снимайте выходное изображение с PD, PE, PF по PCLK.
2. максимальный коофициен масштабирования определяется только максимальным back-end clock . Для этой микросхемы он равен 100MHz max. Хочу сказать что эта цифра сильно завышена, реально уже на 80 фронты начинают замыливаться. Реально можно получить XGA 1024x768. Правда я ухитрился получить 1280х1024 передавая по 2 точки за такт. но у вас (как я понял из условия) это не получиться т.к. PA, PB, PC вход.
3. минимальный размер который подавал 640*480 меньше не пробовал(теоретически наверно да).
4. паралич. Вообще SAA6713 надо настраивать крайне внимательно и точно (шаг вправо/влево - писец всё начинает дёргатся строки рвутся и т.п.). Очень желательно сделать как я написать прогу которая позволит вам изменять регистры на лету иначе замучетесь её настраивать. Что бы вы не изменили всегда делайте программный сброс (особенно это касается скелёра) GC_RESET(FCh) иначе не заметите изменений. для настройки выхода очень помог внутреений генератор полосок(рекомендую) .
|
|
|
|
|
May 5 2005, 17:35
|

Группа: Новичок
Сообщений: 5
Регистрация: 5-05-05
Пользователь №: 4 760

|
Проблема не так проста, как может показаться поначалу. Обычно такие устройства масштабируют картинку в два прохода - сначала по горизонтали, потом по вертикали, используя FIR-фильтры. Здесь нужно обращаться к общей теории ЦОС. Нужно понимать, что помимо реализации самих фильтров, понадобится также и некое количество памяти, объем которой будет зависеть от длины фильтров (для вертикального масштабирования нужно хранить в памяти несколько строк изображения). Бывают и однопроходные масштабаторы, например, Raytheon (нынешний Fairchild) выпускал в 90-х TMC2255, TMC2301 - в них использовался метод "обегания" пикселя, кстати в datashit-ах на эти микрухи очень доходчивые картинки, иллюстрирующие алгоритмы. Отдельная тема - коэффициенты для фильтров. Если не нужно реализовывать эффект плавного масштабирования, то обойдетесь простой таблицей, в противном случае потребуется делать генератор коэффициентов. Усложнить процесс может чересстрочная развертка (в грамотном устройстве желательно применять деинтерлейсинг - тоже интересная проблема), а также различающаяся кадровая развертка на входе и выходе - столкнетесь с проблемой межкадровой интерполяции, оценкой и компенсацией движения в кадре. Но, это уже довольно серьезные вещи, ими занимаются такие монстры, как AMPEX или Snell&Willcox, которые все делают по-честному с точки зрения науки. Не напугал? :) На практике можно многое упростить, существует множество уловок, связанных с особенностями зрения и, в принципе, можно ориентироваться на качество картинки "на глаз". Мне приходилось делать масштабатор в применении к телевизионному сигналу (только в сторону downscale, плавно от 1:1 до 1:16). Использовался обычный билинейный алгоритм, по-крайней мере картинка выглядила прилично и ОТК Первого канала ее пропустила). Масштабирование происходило в два прохода, на плате стояло 2 буфера памяти (внешняя SDRAM) на полный кадр, так как требовалась синхронность по выходу. Коэффициенты генерились на ходу. Каждый FIR-фильтр в кристалле ACEX 1K100 съедал около 50% ресурсов. Компилировал в Quartus II. Кстати MAX+PLUS на тот же проект тратил 90%. В кратце все, если что, стучитесь в аську.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|