Почему FPGA используются так часто для видеопроектов HDMI?


24

Если вы посмотрите hdmi-проекты на таких сайтах , как hackaday , вы обнаружите, что почти каждый из них включает FPGA. Я не думаю, что видел какой-либо проект DIY с выходом HDMI, который не использовал FPGA.

Но почему? Насколько я могу судить, FPGA стоят дорого, около $ 70-100. Сравните это с Raspberry Pi за 35 долларов, который может делать более сложные вещи, и выводить HDMI. Почему не используется ARM? Или даже более дешевый микроконтроллер?

В случае обновления видео на старых игровых системах логика не должна быть более сложной, с которой может справиться дешевый микроконтроллер , но я продолжаю рассматривать HDMI как невозможное препятствие, которое решают только ПЛИС.


Вы можете найти дешевые G PUS тоже (как на RPi). Суть в том, что они не будут делать вещи, которые нарушают лицензию HDMI или являются абсолютно незаконными в некоторых (DMCA) странах. Именно на это и делается большинство проектов, на которые вы ссылаетесь. Вы можете купить GPU с IP-ядром и модифицировать его, чтобы он делал такие вещи ... Но кто же это сделает? FPGA - потрясающий человек (или пират).
Fizz

Ответы:


66

По сути, ни один микроконтроллер, даже Raspberry Pi, не достаточно быстр. Raspberry Pi имеет встроенный графический процессор, который генерирует выход HDMI. Кроме того, возможности ввода-вывода Raspberry Pi невероятно ограничены - интерфейс с самой высокой пропускной способностью помимо HDMI - это USB. Многие проекты преобразования HDMI предполагают передачу другого видеопотока в странном формате и его преобразование в нечто, что можно отправить на стандартный HDTV через HDMI. Это требует некоторой пользовательской логики интерфейса для считывания видеосигнала, логики обработки сигнала для его переформатирования, логики кодирования HDMI TMDS, а затем высокоскоростных сериализаторов для фактического управления портом HDMI.

Работа с потоковым, несжатым видео высокой четкости требует обработки огромного количества данных, чего нельзя добиться на центральном процессоре общего назначения. Видеосигнал 1080p со скоростью 30 кадров в секунду имеет около 62 миллионов пикселей в секунду. Raspberry Pi работает на частоте 700 МГц, поэтому у вас 11 инструкций на пиксель. И это 11 инструкций, чтобы прочитать в формате видео чудака в реальном времени, изменить его масштаб и т. Д. И т. Д. Невозможно. Период.

На FPGA можно генерировать длинный конвейер обработки, который может обрабатывать один или несколько пикселей за такт и делать это с высокой степенью детерминированности (без прерываний или переключения задач!), Чтобы данные пикселей были готовы для передачи по HDMI в нужное время Если вы интенсивно работали с процессорами общего назначения, работающими с любой операционной системой, вы будете знать, что получить точную синхронизацию на миллисекундном уровне более или менее выполнимо, но на микросекундном уровне практически невозможно. Для HDMI вам нужна точность в масштабе наносекунд. Невозможно выполнить на процессоре общего назначения. Кроме того, взгляните на аудио / видео проект HDMI для нео Geo. Этот не только должен масштабировать видео, он также должен повторно сэмплировать аудио и вставить его в видеопоток HDMI.

И это все еще не учитывает пользовательскую логику, необходимую для чтения в любом формате входных данных, который у вас есть. Вам понадобится специальное оборудование, чтобы интерпретировать это. Программное обеспечение недостаточно быстрое или детерминированное. Вы можете, скажем, переформатировать его в какой-то поток на основе USB, но это все равно потребует специальной цифровой логики, так что вы можете просто вывести HDMI напрямую.

Для реализации всего этого цифровая логика - действительно единственно возможное решение. И если вы работаете с цифровой логикой, ПЛИС являются единственным выполнимым решением, поскольку это слишком быстро и слишком сложно для дискретной логики 7400, а ASIC, ну, на несколько порядков дороже.

Другим необходимым компонентом являются фактические высокоскоростные сериализаторы и дифференциальные драйверы для генерации параллельных последовательных потоков данных, которые передаются по кабелю. Невозможно передавать последовательные данные с битовой скоростью порядка гигабит в секунду от процессора общего назначения, для этого требуется специальное оборудование. У Raspberry Pi есть встроенный графический процессор, который делает это, но он ограничен с точки зрения того, на что способен графический процессор, не говоря уже о том, что задокументировано. Большинство FPGA содержат по крайней мере необходимые дифференциальные драйверы и триггеры DDR, которых достаточно для поддержки видео с низким разрешением, и существует довольно много FPGA, которые также содержат необходимые сериализаторы (то есть блоки Xilinx OSERDES) для генерации потоков Full HD. Не забывайте, что последовательный поток не является «основной полосой» как обычный последовательный порт, где фактические данные передаются дословно с некоторой информацией об кадрировании, но данные фактически кодируются с помощью TMDS (дифференциальной сигнализации с минимизацией переходов), чтобы придать сигналу определенные электрические характеристики. Требуется немного логики, чтобы реализовать это в дополнение к фактическим высокоскоростным сериализаторам. Все это относительно просто сделать в чисто цифровой логике (ну, в любом случае, кодирование - сериализаторы, возможно, аналоговые или, по крайней мере, смешанный сигнал) на ASIC или FPGA.

На самом деле это очень важная часть общего процесса проектирования цифровых / встроенных систем, чтобы выяснить, какие части системы могут быть реализованы в программном обеспечении, а какие требуют аппаратного обеспечения, либо в виде готовых специализированных чипов, ПЛИС, пользовательских ASIC, жесткий или программный IP (HDL, сетевые списки, GDSII) и т. Д. В этом случае все четко: генерация видеосигнала требует специального оборудования, будь то графический процессор в сочетании с центральным процессором общего назначения, FPGA со встроенным жестким или мягкое ядро ​​процессора или в паре с внешним процессором, или что-то более специализированное.

Редактировать: я только что понял, что сайт fpga4fun и проект neo geo video работают с разрешением 640x480 вместо Full HD. Тем не менее, это на самом деле не упрощает эту задачу. Минимальный тактовый пиксель составляет 25 МГц, а битовый тактовый сигнал составляет 250 МГц. Это означает, что FPGA фактически не требует сериализаторов для передачи HDMI, только DDR-триггеры. Это все еще не облегчает проблему чтения видеоданных. Если вы хотите сделать это на Raspberry Pi без аппаратной помощи, вам придется непрерывно считывать данные с GPIO с частотой 25 МГц. Который один читал каждые 175 инструкций. Вхождение в сферу возможностей, но единственный способ сделать это - на голом железе (без Linux) с ручной сборкой.


2
Теперь, когда я упомянул логику 7400 ... Интересно, возможно ли генерировать сигнал HDMI с дискретной логикой. На сайте fpga4fun есть пример видео 640x480 с тактовой частотой HDMI 25 МГц для скорости передачи данных 250 Мбит / с или 125 МГц DDR. Это не так высоко, что это может быть выполнимо с дискретными логическими чипами. Может быть интересным проектом для кого-то.
alex.forencich

11 инструкций на пиксель - как вы рассчитали это число? Вы принимаете одну инструкцию на такт?
Гроностай

700 МГц / 62 Мбит / с = 11,3. Допустимое допущение: 1 процессор за такт для одноядерного процессора.
alex.forencich

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

15
TL; DR: должно быть сделано аппаратно. Программное обеспечение работает слишком медленно.
JS.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.