Оглавление:

WIDI - беспроводной HDMI с использованием Zybo (Zynq Development Board): 9 шагов (с изображениями)
WIDI - беспроводной HDMI с использованием Zybo (Zynq Development Board): 9 шагов (с изображениями)

Видео: WIDI - беспроводной HDMI с использованием Zybo (Zynq Development Board): 9 шагов (с изображениями)

Видео: WIDI - беспроводной HDMI с использованием Zybo (Zynq Development Board): 9 шагов (с изображениями)
Видео: № 133 Еженедельный обзор № 35 – Новые продукты для производителей 2024, Июль
Anonim
WIDI - беспроводной HDMI с использованием Zybo (Совет по разработке Zynq)
WIDI - беспроводной HDMI с использованием Zybo (Совет по разработке Zynq)
WIDI - беспроводной HDMI с использованием Zybo (Совет по разработке Zynq)
WIDI - беспроводной HDMI с использованием Zybo (Совет по разработке Zynq)

Вы когда-нибудь хотели, чтобы вы могли подключить свой телевизор к ПК или ноутбуку в качестве внешнего монитора, но не хотели, чтобы все эти надоедливые шнуры мешали? Если да, то это руководство как раз для вас! Хотя есть некоторые продукты, которые достигают этой цели, проект DIY намного более удовлетворителен и потенциально дешевле.

Эта концепция отличается от таких продуктов, как chromecast, поскольку она предназначена для использования вместо кабеля HDMI, подключаемого к монитору, а не в качестве устройства потоковой передачи.

Наш проект был создан как заключительный проект для курса операционных систем реального времени в Калифорнийском государственном политехническом университете в Сан-Луис-Обиспо.

Цель проекта - использовать две платы Digilent Zybo в качестве интерфейса беспроводной связи между передающим устройством HDMI (ПК, blu-ray и т. Д.) С принимающим устройством HDMI (настольный монитор, проектор, телевизор и т. Д.).

Один Digilent Zybo будет подключен через HDMI к передающему устройству, а другой будет подключен через HDMI к принимающему устройству.

Беспроводная связь будет осуществляться с использованием беспроводной локальной сети, предназначенной для передатчика и приемника, без маршрутизации через домашний маршрутизатор или другое подобное устройство. Беспроводным модулем, используемым в этом проекте, является наномаршрутизатор tplink wr802n, один из которых работает как точка доступа для установления сети, а другой - как клиент для подключения к сети. Каждый нанонаправитель будет подключен через Ethernet-кабель к любой плате Zybo. При подключении к этим маршрутизаторам устройства будут взаимодействовать через TCP, как если бы они были подключены с помощью одного кабеля Ethernet (что означает, что единственная конфигурация, необходимая для установления соединения, - это IP-адрес клиента).

Хотя целью проекта было облегчить поток видео 1080x720 при 60 Гц, это было недостижимо из-за ограничений полосы пропускания в беспроводной сети и отсутствия сжатия видео в реальном времени для уменьшения объема данных, необходимых для отправки. Вместо этого этот проект служит основой для будущих разработок для достижения этой цели, поскольку он имеет жесткие ограничения по частоте кадров для правильной потоковой передачи данных HDMI, как задумано.

Требования к проекту:

2 платы для разработки Digilent Zybo (должен иметь хотя бы один порт HDMI)

2x кабеля HDMI

2 кабеля microusb (для подключения Zybo к ПК для разработки)

2 нанамаршрутизатора tplink wr802n (включая adtl. 2x microusb и адаптеры питания для розеток)

2x кабеля Ethernet

*** Примечание: это руководство предполагает знакомство с пакетом дизайна Vivado и опыт создания нового проекта и блочного дизайна. ***

Шаг 1. Настройте программируемую логику Zynq для передатчика

Настройка программируемой логики Zynq для передатчика
Настройка программируемой логики Zynq для передатчика
Настройка программируемой логики Zynq для передатчика
Настройка программируемой логики Zynq для передатчика
Настройка программируемой логики Zynq для передатчика
Настройка программируемой логики Zynq для передатчика

Наш подход к разработке программируемой логики передатчика заключался в том, чтобы выполнить сквозную передачу HDMI-HDMI с ПК на монитор с использованием двух блоков прямого доступа к видеопамяти (VDMA), одного для записи и одного для чтения.

Оба выбраны для автономного режима 3-кадрового буфера (0-1-2). Поскольку видеоядро оптимизировано для 60 кадров в секунду, это означает, что VDMA будет записывать или читать новый кадр каждые 16,67 мс в следующем порядке: 0, 1, 2, 0, 1, 2, 0, 1, 2. Ячейки памяти DDR для каждого кадра различны для двух VDMA, потому что они больше не синхронизированы друг с другом. Вместо этого используется аппаратный таймер (TTC1), настроенный на 60 Гц, для синхронизации перемещения данных между двумя ячейками памяти.

На изображении выше показаны 3 кадра, их размеры и объем памяти, необходимый для каждого (справа от кадра). Если мы назначим VDMA записи этим ячейкам памяти, то мы сможем назначить ячейки памяти VDMA для чтения за пределами этого набора, скажем, начиная с 0x0B000000. Каждый кадр состоит из 1280 * 720 пикселей, и каждый пиксель состоит из 8 бит красного, зеленого и синего, что в сумме составляет 24 бита. Это означает, что кадр состоит из 1280 * 720 * 3 байтов (2,76 МБ).

Внутри таймера IRQ, который описан в настройке драйвера VDMA, будет обрабатывать копирование данных между двумя ячейками памяти VMDA. VDMA предоставляет указатель на текущий кадр, в который выполняется запись или чтение. Рамка представлена определенным кодом Грея, который преобразуется программно. Определения кода Грея для конфигурации из трех кадровых буферов можно найти в Руководстве по продукту AXI VDMA в приложении C.

Это позволяет нам копировать записываемое содержимое в память без чтения из кадра, в который в настоящее время выполняется запись.

*** Обратите внимание, что чтение VDMA не используется при отправке данных по беспроводной сети. Его единственная цель - проверить правильность работы копирования памяти из записывающего VMDA. Считывание VMDA должно быть отключено. ***

Вот шаги для создания блока проектирования передатчика:

  1. При создании нового проекта рекомендуется назначить проекту микросхему или плату. Эта ссылка описывает, как добавить новые файлы досок в каталог Vivado и связать правильную доску с вашим проектом. Это пригодится при добавлении блока «Система обработки» и переходе с аппаратного на программное обеспечение (сторона SDK).
  2. Добавьте следующие блоки:

    • dvi2rgb
    • Видео в Axi4-потоке
    • Регулятор времени
    • axi4-stream, чтобы удалить
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • Мастер часов
    • Постоянный
    • Система обработки Zynq
  3. При добавлении системы обработки нажмите «Run Block Automation» на верхней панели зеленого цвета и убедитесь, что выбран параметр «Apply Board Preset». Все остальное оставьте по умолчанию.
  4. Изображения каждого окна конфигурации блока можно найти на изображениях выше. Если вы не видите изображение для определенного окна, просто оставьте его по умолчанию.
  5. Начните настройку системы обработки Zynq:

    • В конфигурации PS-PL AXI Non Secure Включить GP Master AXI, включить M AXI GP0 Interface
    • В конфигурации PS-PL Интерфейс HP Slave AXI включите как HP0, так и HP1
    • В конфигурации MIO убедитесь, что ENET0 включен в разделе I / O Peripherals, затем Application Processor Unit, включите Timer0
    • В тактовой конфигурации PL Fabric Clocks включите FCLK_CLK0 и установите значение 100 МГц.
    • Нажмите ОК
  6. Перед тем, как нажать «Run Connection Automation», обязательно подключите видеоблоки, как показано на изображении конструкции блока TX выше. Вы захотите переименовать константу в VDD и установить значение 1. Подключите видеоблоки соответствующим образом.
  7. Сделайте выводы синхронизации и данных HDMI TMDS внешними на блоках rgb2dvi и dvi2rgb
  8. Создайте входной и выходной порт для сигнала обнаружения горячего подключения (HPD) и соедините их вместе, они определены в файле ограничений.
  9. Пиксельные часы восстанавливаются из TMDS_Clk_p, который создается в файле ограничений. Это будет 74,25 МГц в соответствии с разрешением 720p. Важно подключить пиксельные часы (из блока dvi2rgb) к следующим контактам:

    • vid_io_in_clk (vid в блоке потока axi)
    • vid_io_out_clk (поток axi для вывода блока)
    • clk (контроллер времени)
    • PixelClk (rgb2dvi)
  10. *** Примечание. В настоящее время для активации восстановления тактовой частоты пикселей разъемы HDMI rx и tx должны быть подключены к активному источнику / приемнику. Один из способов обойти это - разделить блоки видео rx и tx на разные домены синхронизации (другими словами, сгенерировать новую частоту 74,25 МГц для подачи на блок tx). ***
  11. Затем настройте мастер синхронизации так, чтобы у вас был вход 100 МГц (глобальный буферный источник) и 3 выходных тактовых сигнала @ 50 МГц (часы AXI-Lite), 150 МГц (часы AXI4-Stream), 200 МГц (вывод dvi2rgb RefClk).
  12. Подключите вывод системы обработки FCLK_CLK0 ко входу мастера синхронизации.
  13. На этом этапе нажмите «Запустить автоматизацию подключения» на зеленой полосе в верхней части окна дизайна. Это хорошая идея делать это для одного блока за раз и следовать изображению дизайна блока TX выше.
  14. Инструмент попытается добавить соединение AXI Interconnect, которое действует как соединение ведущий / ведомый для блоков, использующих шину AXI-Lite (VDMA и GPIO).
  15. Он также добавит AXI SmartConnect, который действует как межсоединение главный / подчиненный для интерфейсов процессора AXI4-Stream и High Performance, используемых VDMA (Stream to Memory Map и наоборот).
  16. Инструмент также добавит сброс системы процессора. Убедитесь, что он подключен только к VDMA, GPIO и блокам, связанным с процессором. Не подключайте его к каким-либо видеоблокам (например, dvi2rgb, контроллеру времени, vid to stream и т. Д.)
  17. После того, как автоматизация подключения будет завершена, убедитесь, что подключения соответствуют таковым в образе конструкции блока TX. Вы заметите дополнительный блок System ILA, о котором не упоминалось. Это только для отладки и пока не требуется. Он использует 150-мегабайтный сброс процессора, так что он тоже не нужен. Везде, где вы видите маленькие зеленые «жучки» на автобусах, это связано с ILA, и на них можно не обращать внимания.
  18. Последний шаг - щелкнуть правой кнопкой мыши по дизайну блока в дереве источников проекта и выбрать «Создать HDL Wrapper». Если вы планируете добавлять логику в оболочку, она будет перезаписываться каждый раз, когда это будет выбрано.
  19. Подробнее о SDK см. В разделе «Настройка драйвера VDMA».

Часы и сброс

Я обнаружил, что наиболее важными аспектами любого проекта программируемой логики является тщательное рассмотрение доменов часов и сигналов сброса. Если они настроены правильно, у вас есть хорошие шансы заставить ваш дизайн работать.

Пиксельная синхронизация и синхронизация заблокированы

Чтобы проверить, что определенные сигналы активны, рекомендуется связать эти сигналы со светодиодами (часы, сбросы, блокировки и т. Д.). Два сигнала, которые я счел полезными для отслеживания на плате передатчика, - это частота пикселей и «заблокированный» сигнал в блоке AXI4-Stream to video out, который сообщает вам, что синхронизация видео синхронизирована с контроллером синхронизации и источником видео. данные. Я добавил некоторую логику в оболочку блока дизайна, которая отслеживает тактовую частоту пикселей, используя сигнал PixelClkLocked в блоке dvi2rgb в качестве сброса. Я прикрепил сюда файл hdmi_wrapper.v. Сюда же прилагается файл ограничений.

Шаг 2. Настройте программируемую логику Zynq для приемника

Настройка программируемой логики Zynq для приемника
Настройка программируемой логики Zynq для приемника
Настройка программируемой логики Zynq для приемника
Настройка программируемой логики Zynq для приемника
Настройка программируемой логики Zynq для приемника
Настройка программируемой логики Zynq для приемника

Блок Programmable Logic для приемника проще. Ключевым отличием, помимо отсутствующих входных блоков hdmi, является отсутствие восстановленных часов пикселей. По этой причине мы должны сгенерировать свои собственные из мастера часов. Этот дизайн должен быть выполнен в отдельном проекте от передатчика. Для наших целей проект приемника последовал за платой Zybo 7Z-20, а передатчик последовал за платой Z7-10. ПЛИС на платах разные, так что… будьте осторожны.

Вот шаги для создания блока дизайна приемника:

  1. Добавьте в свой дизайн следующие блоки IP:

    • Регулятор времени
    • AXI4-поток на видеовыход
    • RGB в DVI
    • AXI VDMA
    • AXI GPIO
    • Система обработки
    • Мастер часов
    • Константа (VDD установлен на 1)
  2. Следуйте той же схеме для настройки этих блоков, что и передатчик. Сюда включены изображения заметных различий в конфигурации. Остальные остаются такими же, как и передатчик.
  3. Настройте VDMA для этого проекта только как канал чтения. Отключите канал записи.
  4. Мастер часов должен быть настроен для следующих выходов:

    • clk_out1: 75 МГц (частота пикселей)
    • clk_out2: 150 МГц (частота потока)
    • clk_out3: 50 МГц (часы axi-lite)
  5. Подключите видеоблоки, как показано на изображении конструкции блока RX.
  6. Затем запустите автоматизацию подключения, которая добавит блоки AXI Interconnect, AXI SmartConnect и System Reset и попытается установить соответствующие подключения. Идите сюда медленно, чтобы убедиться, что он не выполняет нежелательных подключений.
  7. Сделайте тактовые сигналы HDMI TMDS и выводы данных внешними на блоке rgb2dvi
  8. В этой конструкции нет необходимости в сигнале горячей замены.

Шаг 3: Установите драйвер VDMA

Настройка драйвера VDMA
Настройка драйвера VDMA

Настройку различных блоков, которые настраиваются через интерфейс AXI-Lite, лучше всего выполнять с помощью демонстрационных проектов, включенных в BSP, в качестве справки. После экспорта проектного оборудования и запуска SDK из Vivado вы захотите добавить новый пакет поддержки платы и включить библиотеку lwip202 в окно настроек BSP. Откройте файл system.mss из BSP, и вы увидите периферийные драйверы, присутствующие в вашем блочном дизайне. Параметр «Импортировать примеры» позволяет импортировать демонстрационные проекты, в которых используются эти периферийные устройства, и, таким образом, показать вам, как настроить их в программном обеспечении с использованием доступных драйверов Xilinx (см. Прикрепленное изображение).

Этот метод использовался для настройки VDMA, Timer & Interrupt и GPIO. Сюда включен исходный код для передачи и приема. Отличия почти исключительно в main.c.

*** ПРИМЕЧАНИЕ. Поскольку на момент написания этого руководства система не была полностью функциональна, исходный код в этом разделе не включает код беспроводной сети. Необходимо устранить несколько ошибок в результате объединения проектов передачи / приема видеоядра с проектами передачи / приема в сети. Поэтому в данном руководстве они пока рассматриваются отдельно. ***

Функция обработчика прерывания TX (IRQHandler)

Эта функция считывает коды Грея, предоставляемые VDMA чтения и записи через блоки GPIO. Коды Грея преобразуются в десятичные числа и используются для выбора места в основной памяти текущего кадра. Копируемый кадр - это предыдущий кадр по отношению к кадру, в который записывается VDMA (например, если VDMA записывает в кадр 2, мы копируем кадр 1; при записи в кадр 0 мы переносим и читаем из кадра 2).

Функция захватывает только каждый 6-й кадр, чтобы снизить частоту кадров до 10 Гц, а не 60 Гц. Верхняя граница сети - 300 Мбит / с. При скорости 10 кадров в секунду требуется пропускная способность 221,2 Мбит / с.

Комментируя / не комментируя две строки в этой функции, пользователь может перейти в режим прохода HDMI для целей отладки / тестирования (код прокомментирован для указания соответствующих строк). В настоящее время он копирует кадр в область памяти, используемую кодом Ethernet.

Функция обработчика прерывания RX (IRQHandler)

Эта функция очень похожа на функцию TX, но она копирует из двух буферов FIFO, используемых Ethernet для записи входящих данных. Код Ethernet указывает, в какой фрейм записывается FIFO, данные копируются из противоположного фрейма. Данные копируются во фрейм непосредственно за фреймом, который считывается VDMA, чтобы избежать разрывов.

Шаг 4: Настройте сеть Nanorouter

Настройка сети нано-маршрутизации
Настройка сети нано-маршрутизации

Чтобы создать сеть с использованием наномаршрутизаторов TPlink, включите их по отдельности и подключитесь к SSID Wi-Fi по умолчанию для устройств. Более подробную информацию о параметрах конфигурации для этого конкретного устройства можно найти в руководстве пользователя устройства.

Настройте одно из устройств как точку доступа, оно будет действовать как основное соединение для сети. Обязательно назовите сеть и запишите имя, а также отключите DHCP (мы не хотим, чтобы маршрутизатор настраивал IP-адреса динамически, мы хотим, чтобы платы передатчика и приемника Zybo сами устанавливали свои IP-адреса, чтобы они были согласованными). После настройки убедитесь, что устройство перезагружается и устанавливает эту сеть.

Настройте другое устройство в качестве клиента и убедитесь, что оно подключается к сетевому SSID, который вы настроили с первым наномаршрутизатором. Еще раз убедитесь, что DHCP отключен для клиента.

После того, как клиент завершит работу и перезагрузится, он должен подключиться к наномаршрутизатору точки доступа (в противном случае, вероятно, проблема в вашей конфигурации одного из устройств). Вы заметите, что светодиодный индикатор на клиенте будет гореть постоянно, когда он подключится к точке доступа.

Скорее всего, в этот момент светодиод нанорасхода точки доступа продолжит мигать, это нормально! Мигающий свет означает, что он не подключен к другому устройству через свой порт Ethernet, и после подключения к настроенному Zybo светодиод будет гореть постоянно, указывая на успешное сетевое соединение.

Теперь, когда у нас настроены наномаршрутизаторы, у нас есть беспроводная сеть, которая позволит нам общаться. Важным примечанием является то, что наш метод настройки наномаршрутизаторов (как точки доступа и клиента) позволяет нам обмениваться данными от передающей платы Zybo к принимающей плате Zybo, как если бы они были соединены одним проводом Ethernet. Это делает настройку нашей сети менее сложной, поскольку альтернатива, вероятно, будет включать настройку плат Zybo для явного подключения к серверу вместе с предполагаемым подключением.

После того, как оба устройства настроены, наномаршрутизаторы настроены и готовы к внедрению в вашу сеть WIDI. Между наномаршрутизаторами и платами Zybo нет специального сопряжения, так как точка доступа или клиент будут работать либо на передающем, либо на принимающем устройстве.

Шаг 5: Настройте систему обработки Zynq для передачи данных через Ethernet

Настройка системы обработки Zynq для передачи данных через Ethernet
Настройка системы обработки Zynq для передачи данных через Ethernet
Настройка системы обработки Zynq для передачи данных через Ethernet
Настройка системы обработки Zynq для передачи данных через Ethernet

Чтобы передавать данные HDMI с одной платы Zybo на другую, мы должны включить протокол Ethernet в наш драйвер VDMA. Наша цель здесь - передавать отдельные видеокадры через периферийное устройство Ethernet в системе обработки с заданной скоростью, соответствующей пропускной способности нашей сети. В нашем проекте мы использовали TCP, предоставляемый «голым» LwIP API. Поскольку оба участника проекта относительно неопытны в работе с сетевыми утилитами, этот выбор был сделан без полного осознания последствий и ограничений, связанных с TCP. Основной проблемой этой реализации была ограниченная пропускная способность и тот факт, что она действительно не предназначена для обработки больших объемов данных. Альтернативные решения для замены TCP и улучшения tbe в этом проекте будут обсуждены позже.

Краткое описание TCP с LwIP: данные передаются по сети пакетами размером tcp_mss (максимальный размер сегмента TCP), который обычно составляет 1460 байт. Вызов tcp_write берет некоторые данные, на которые ссылается указатель, и настраивает pbufs (буферы пакетов) для хранения данных и предоставления структуры для операций TCP. Максимальный объем данных, который может быть поставлен в очередь за один раз, устанавливается как tcp_snd_buf (буферное пространство отправителя TCP). Поскольку этот параметр представляет собой 16-битное число, мы ограничены размером буфера отправки 59695 байтами (в буфере отправки есть некоторые необходимые дополнения). Как только данные помещены в очередь, вызывается tcp_output, чтобы начать передачу данных. Перед отправкой следующего сегмента данных обязательно, чтобы все предыдущие пакеты были успешно переданы. Этот процесс выполняется с помощью функции recv_callback, так как это функция, которая вызывается, когда приемник видит подтверждение.

Использование примеров проектов в Vivado SDK очень полезно для изучения работы LwIP TCP и является хорошей отправной точкой для начала нового проекта.

Процедура для передающего устройства WiDi следующая:

  1. Инициализируйте сеть TCP с помощью вызовов функций драйвера LWIP без операционной системы.
  2. Укажите любые функции обратного вызова, необходимые для сетевых операций.
  3. Подключитесь к приемнику WiDi, подключившись к его IP-адресу и порту (наша конфигурация: IP-адрес приемника 192.168.0.9, подключение к порту 7).
  4. Когда таймер драйвера VDMA истекает, введите TX ISR.
  5. Определите текущий буфер кадра для доступа на основе кода Грея VDMA
  6. Поставить в очередь первый сегмент данных в буфере отправки TCP
  7. Выведите данные и обновите локальные переменные, чтобы отслеживать, сколько данных было отправлено в текущем кадре.
  8. По достижении полученного обратного вызова (вызов функции, сделанный после того, как передатчик получает подтверждение получения данных), поставьте в очередь следующий сегмент данных.
  9. Повторяйте шаги 7 и 8, пока не будет отправлен весь кадр.
  10. Вернитесь в состояние ожидания, чтобы дождаться следующего прерывания таймера, чтобы указать, что новый кадр готов (возврат к шагу 4).

Обязательно установите параметры LwIP пакета поддержки платы, как показано на изображении выше. Все значения по умолчанию, кроме tcp_snd_buf, tcp_pueue_ooseq, mem_size, memp_n_tcp_seg. Также обратите внимание, что детальная отладка может быть достигнута путем изменения параметров BSP для группы debug_options.

Шаг 6: Настройте систему обработки Zynq для приема данных через Ethernet

Плата разработки Zybo, которая будет действовать как беспроводной приемник, будет работать аналогично передающему устройству. Настройки пакета поддержки платы для LwIP будут идентичны настройкам на предыдущем шаге.

Устройство принимает пакеты, содержащие сегменты видеокадра из нанорасхода, и копирует данные видеокадра в пространство тройного буфера кадра для принимающего VDMA. Чтобы избежать перезаписи каких-либо данных, при сборе данных с наномаршрутизатора используется двойной буфер данных (мы будем называть его сетевым буфером), чтобы сетевой трафик мог продолжать потоковую передачу, в то время как предыдущий полный видеокадр копируется в Буфер VDMA.

Процедура для принимающего устройства WiDi требует двух задач, одна из которых - получение данных Ethernet, а другая - копирование видеокадров из сетевого буфера в буфер тройных кадров VDMA.

Задача приема Ethernet:

  1. Инициализируйте сеть TCP, используя вызовы функций драйвера LWIP без операционной системы (настройка с IP-адресом, к которому будет подключаться передатчик, 192.168.0.9 в нашем)
  2. Укажите любые функции обратного вызова, необходимые для сетевых операций.
  3. После получения пакета Ethernet скопируйте данные пакета в текущий сетевой буфер, увеличьте текущие накопленные данные.
  4. Если пакет заполняет сетевой буфер кадра, перейдите к шагам 5 и 6. В противном случае вернитесь к шагу 3 для этой задачи.
  5. сигнализируют, что задача буфера тройного кадра VDMA должна скопировать из недавно завершенного сетевого буфера.
  6. Переключитесь на другой сетевой буфер и продолжите сбор данных через Ethernet.
  7. Ожидание, пока не будет получен новый пакет Ethernet (шаг 3).

Скопируйте сетевой буфер в тройной кадровый буфер VDMA:

  1. Когда таймер драйвера VDMA истекает, введите RX ISR.
  2. Определите текущий буфер кадра для доступа на основе кода Грея VDMA.
  3. Определите, какой сетевой буфер будет скопирован в буфер VDMA, и скопируйте эти данные.

Шаг 7. Подключите платы Zybo к источнику HDMI и приемнику HDMI

Подключите платы Zybo к источнику HDMI и приемнику HDMI
Подключите платы Zybo к источнику HDMI и приемнику HDMI

Теперь подключите кабели hdmi к приемнику и передатчику, запрограммируйте FPGA и запустите систему обработки. Частота кадров, вероятно, будет очень низкой из-за огромных накладных расходов при работе LwIP и ограниченной пропускной способности. Если есть какие-либо проблемы, подключитесь через UART и попытайтесь определить любые предупреждения или ошибки.

Шаг 8: Альтернативные идеи для улучшения

Альтернативные идеи для улучшения
Альтернативные идеи для улучшения

Большой проблемой для этого проекта был объем данных, необходимых для отправки по Wi-Fi. Это было ожидаемо, однако мы недооценили влияние, которое это могло бы оказать, и привело к большему количеству всплесков изображений на экране, чем к видеопотоку. Есть несколько способов улучшить этот проект:

  • Сжатие видео в реальном времени. Сжатие входящего видеопотока по кадрам значительно уменьшит объем данных, необходимых для передачи по сети. В идеале это могло бы быть сделано аппаратно (что является непростой задачей), или это можно было бы сделать программно, используя другое ядро ARM для запуска алгоритмов сжатия (это потребует дальнейшего анализа, чтобы убедиться, что время работает). В сети есть некоторые компоненты сжатия видео в реальном времени с открытым исходным кодом, но большинство из них - IP.
  • Реализация потока Ethernet не программно, а аппаратно. Из-за нехватки места для постановки в очередь исходящих данных в передатчике возникла масса накладных расходов из-за ограничения размера сегмента. Гораздо более эффективный процесс - использовать AXI Ethernet IP с буфером FIFO или DMA для подачи в него данных. Это уменьшило бы дополнительный багаж от LwIP TCP и обеспечило бы больший поток данных.

Шаг 9: доступность

Конечным продуктом этого проекта WiDi должна быть полностью интегрированная, компактная пара устройств, которую пользователь мог бы подключать к любому источнику HDMI, а затем передавать видеопоток на дисплей с поддержкой HDMI по беспроводной сети. Устройства будут оснащены SoC Zynq-7000, установленным на эталонной плате Zybo, и будут включать сетевое оборудование, используемое в нано-маршрутизаторах TP-Link. В идеале пользователь мог бы управлять передающим модулем из отдельного места в целевой операционной системе без особых технических возможностей.

Безопасность и подключение

Устройства также должны включать протокол TLS и иметь ограниченную возможность автоматического подключения, как в целях конфиденциальности. Разработчики намерены сделать соединение с дисплеем через беспроводной интерфейс преднамеренным действием от имени пользователя, чтобы избежать ошибочной трансляции конфиденциального материала.

Текущий статус

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

Данные, отправляемые по сети, на этом этапе не шифруются и предполагается, что это необработанная передача пакетов TCP / IP.

Проект видеоядра был успешно протестирован как на передачу, так и на прием. С другой стороны, беспроводное соединение между двумя платами zybo было установлено, и данные тестового кадра были успешно отправлены. Однако по-прежнему необходимо комбинировать сетевой код для каждого проекта видеоядра и тестировать передачу реальных видеокадров.

Рекомендуемые: