Фоновая подсветка HDMI-FPGA-LED. Часть 2: Альтернатива

Блог им. Perfer
«На Почту России надейся, а сам не плошай» или альтернативный путь развития проекта HDMI-FPGA-LED и первые успешные попытки приема HDMI/DVI сигналов на FPGA.

Печатная плата

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

Разводка
При разводке печатной платы решил идти по пути наименьшего сопротивления и сделал все в EagleCAD 6.1.0. Библиотеки многих элементов доступны на сайте CadSoft. По причине не законченности устройства разводку печатной платы здесь не привожу. 3D вид на на плату, подготовленный в SketchUp 8 с использованием плагина EagleUp для EagleCAD:


Изготовление
Первоначальное изготовление печатной платы планировалось произвести в кустарных условиях используя ЛУТ, переходные отверстия заделать проводком МГТФ и т.д., но после того как оказалось что количество переходных отверстий более 50 и толщина дорог на пределе + начал «темнить» мой принтер, от использования ЛУТ пришлось отказаться.
Погуглив нашел, что на SeeedStudio.com предлагают не дорогой сервис по изготовления двухслойных печатных плат. По отзывам, качество печатных плат на выходе достойное, правда срок изготовления с доставкой ~1 месяц.
Заказал 19 мая 2013, изготовили, быстро — 5 дней, и настала замечательная пара ожидания когда же платы доберутся до России. На момент публикации топика, платы, а вместе с ними и программатор для Xilinx, были еще где-то в пути.
Таким образом рассказать о монтаже компонентов и первом включении не получится, будет в следующей части, надеюсь.

Альтернативы

Не смотря на то, что, ни плат ни программатора не было, проект продолжать надо, а значит нужно решить 2 проблемы: что прошивать (FPGA есть, а платы под него нет), и чем прошивать/отлаживать.
Ответ на вопрос «чем прошивать/отлаживать?», временно, пропустим.
В качестве отладочной платы решил использовать отладку от starterki.ru, а именно SK-XC6SLX9.

Отладка крайне минималистична:
  • Xilinx FPGA Spartan 6 — XC6SLX9
  • SRAM 512K
  • Генератор 50МГц
  • 2 LDO
  • Диод от переполюсовки
  • Flash AT45DB021
Доставили за один день из Ижевска в Москву. Качество монтажа и самой печатной платы на 5 из 5. (Немного в сторону: внимательного читателя наверняка уже начали смущать ораньжевенькие танталы по цифровому питанию, на картинке, в реальной плате их нет — стоят керамические конденсаторы)

Hellow VGA

Так как на SK-XC6SLX9 нет ни светодиодов доступных пользователю, ни кнопок, то от привычного Hellow Led отказался в пользу Hellow VGA. Тем более, VGA выход понадобится, чтобы убедиться в корректности принимаемого по HDMI видео потока. На коленке развел-спаял плату с парой кнопок и светодиодов, а также с тремя четырех битными ЦАП по схеме R2R (если окончание фразы оказалось слишком запутанным — вот ссылка для ознакомления).
Примеров описания VGA для FPGA в интернете превеликое множество (1, 2, 3 и наконец google.com) для разных языков описания схем, да и к тому же там ничего сложного то и нет, поэтому свой код приводить пока не буду.
Собрав все в кучу, получилось следующее (извиняюсь за качество фото):


Картинка стабильна, цветопередача почти соответствует желаемому, несмотря на то, что я по не внимательности, младший бит красного цвета посадил на +3,3 В.

Галопом по Европам: Hellow TMDS

Провека работоспособности механизма преобразование HDMI/DVI в RGB для каждого пикселя дисплея, будет осуществляться по связке Ноутбук->HDMI->FPGA->VGA->Монитор. Для преобразования HDMI->FPGA понадобятся теоретические (читай как поверхностные) знания стандарта HDMI 1.3, в котором имеется следующая, крайне познавательная, картинка:

Видно, что по HDMI, помимо видео потока (TMDS channel 0/1/2/clk), передаются еще и данные по интерфейсам DDC и CEC, последний нас пока интересовать не будет. DDC есть не что иное как интерфейс I2C, только без мультимастера, мастер только один — источник видео сигнала. Основной информацией передаваемой по DDC, для случая не защищенного HDCP HDMI канала, является EDID — «это стандарт формата данных VESA, который содержит базовую информацию о мониторе и его возможностях, включая информацию о производителе, максимальном размере изображения...». Да и еще одна маленькая, но важная особенность: без получения «нормального» EDID, источник сигнала не активизирует передачу видео сигналов по TMDS. По итогу имеем следующее: приемником HDMI является FPGA которая и знать не знает что такое I2C, EDID, DDC, также для I2C есть схемотехнические особенности не позволяющие так просто FPGA воткнуть на эту шину, а без нормального EDID, честных сигналов TMDS от видеокарты не видать «как своих ушей». Писать дизайн I2C/DDC, EDID для FPGA сейчас совсем нет желания. Решил облегчить себе задачу, подсунув (временно) источнику видеосигнала, DDC с EDID от реального монитора, а TMDS благополучно завести на FPGA, где его уже и преобразовывать в RGB-цвет для каждого пикселя, который легко перекинуть в сигналы VGA. Звучит, наверное, сложно и запутанно, но это все работает (извиняюсь за качество фото):


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

В место заключения

В следующей части:
  • Очень поверхностное описание алгоритма приема TMDS сигналов на FPGA семейства Spartan 6;
  • Содержание EDID и как/где его взять;
  • I2C/DDC на FPGA;
  • HDMI to LED.

Ссылки

Почта России
CadSoft
SeeedStudio.com Fusion PCB Service

16 комментариев

avatar
С EDID, по моему, так и нужно делать — на прямую предавать на монитор. Правда, разбирать его все-равно придется, для того, чтобы выяснить разрешение.

А зачем VGA вообще? По-моему, первое, что нужно сделать — прокси HDMI. А потом, уже и шпионить за шиной :)
avatar
EDID наоборот получаем от монитора! Из википедии: «Extended Display Identification Data (EDID) — это стандарт формата данных VESA, который содержит базовую информацию о мониторе и его возможностях, включая информацию о производителе, максимальном размере изображения, цветовых характеристиках, заводских предустановленных таймингах, границах частотного диапазона, а также строках, содержащих название монитора и серийный номер.» (Ссылка)

VGA нужен исключительно для отладки и проверки стабильности принимаемого видео сигнала.
avatar
Конечно, передавать на ноут нужно напрямую, перепутал просто :)
avatar
Хоть я не граммар-наци, да и вообще не русский, но простите, не смог сдержаться. Это капец какой-то. Вы в русской школе учились или в какой? Цитата: «выход мне понадобиться, чтобы убедится в» и так во всём тексте.
avatar
О, уже исправили :=) Видать, каким-то spell checker`ом прошлись. Но моё сообщение всё же решили минусануть.
avatar
Вообще, сообщения о грамматических ошибках принято в личку писать :)
avatar
Да я тут недавно, личку нашел только что. Так что уж простите. Ветку можно удалить.
avatar
По делу пожалуйста. Оффтоп — в личные сообщения

PS bsvi — опередил :)
avatar
По делу — а не проще было, просто взять HDMI приемник который разложит HDMI сигнал?
Вы не подумайте, что я пытаюсь умничать или доколупаться, мне интересен факт сколько может занять работа над HDMI core с нуля, если сесть и работать только над ним?
avatar
По делу — а не проще было, просто взять HDMI приемник который разложит HDMI сигнал?
Вопрос выбора между HDMI Reciver и ПЛИС освещен в первой части
сколько может занять работа над HDMI core с нуля, если сесть и работать только над ним?
Сложно оценить, много факторов. Я все делал по аналогии с Application Note: Video Connectivity Using TMDS I/O in Spartan-3A FPGAs и Implementing a TMDS Video Interface in the Spartan-6 FPGA, поэтому все заняло не очень много времени, ~2-3 недели
avatar
Спасибо за топик! Очень интересно, буду следить за развитием событий.
Видео меня не очень интересует, но вот возможность выдернуть звук из HDMI меня заинтересовала…
Очень хотелось бы собрать девайс для подключения многоканального звука с разных цифровых источников (оптика, коаксил, HDMI, можно и АЦП) с возможностью обрабатывать каждый канал каждого источника, смешивать их, включать/выключать по отдельности и выводить все это дело также в цифровом виде на несколько каналов. Управлять через UART или Ethernet. Собираю информацию…
avatar
Предлагаю использовать готовую плату от китайцев за 20$
На борту на ВХОД: HDMI, VGA, Analog Composite. На выходе LVDS и монитор TTL, к ним и цепляем ПЛИС.
avatar
А можно ссылку на описание платы?
avatar
Я покупал сразу с матрицей тут, можно по отдельности покупать!
Вам понравилась моя идея? www.aliexpress.com/item/HDMI-VGA-2AV-Reversing-Driver-board-7inch-AT070TN90-800-480-lcd-display/638642446.html
avatar
Вот тут человек сделал вывод на DVI/HDMI
hamsterworks.co.nz/mediawiki/index.php/Dvid_test
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.