По сути, ни один микроконтроллер, даже 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) с ручной сборкой.