Давайте посмотрим вместе, что есть на этой плате и какие возможности предоставляет разработчикам данный отладочный набор.
Кому интересно – добро пожаловать под кат!
❯ Нетехническая сторона вопроса
Для начала коснусь нетехнических особенностей данной платы. Данная отладка стоит просто космических денег – около 400 тысяч рублей. Такая стоимость явно неподъёмна для простых энтузиастов и подходит лишь для профессиональной разработки или для компаний, которые готовы выделить достаточно денег на приобретение.
Но мне показалось, что эта плата даёт возможности соразмерно ее стоимости. Рассмотрим её возможные применения:
- Automotive применения, для организации помощи водителю, бортовых систем с анализом данных с видеокамер;
- Для организации систем беспроводной связи, SDR и т.п.;
- Сетевые применения, где требуются мультигигабитные скорости, за счёт наличия на борту двух интерфейсов для подключения SFP/SFP+ и медного порта Ethernet. Количество портов также можно увеличить за счёт установки дополнительных плат на FMС HPC интерфейс и сделать полноценный коммутатор или маршрутизатор.
- Высокоскоростной обмен и обработка данных с использованием параллельных вычислений в очень емкой ПЛИС и очень богатого на возможности высокоскоростного интерконнекта c ARM-ядрами.
- Применение в областях машинного обучения, искусственного интеллекта и потокового распознавания в видеонаблюдении и аналитики с потоковой обработкой видеопотока в качестве 4К.
- Область аэрокосмических применений и многие другие.
Поковыряв документацию я нашел целую кучу изображений с применением данной платы. Среди них:
– обнаружение машин:
– обнаружение людей:
– детекция огня:
– обнаружение проблем и дефектов:
– обнаружение нарушения целостности проводников на PCB:
Вот бы иметь время все эти примеры раскурить и написать статьи на тему создания подобных проектов 😀. Но идём дальше.
❯ Общее описание комплекта поставки
Рассмотрим, используя изображения с сайта продавца, комплект поставки этой платы. Отладочный комплект ALINX AXU15EG состоит из двух основных компонент: SoM и материнская плата с интерфейсами.
В качестве ключевого узла SoM выступает SoC Zynq UltraScale+ MPSoC, XCZU15EG-2FFVB1156I с классом скорости 2, который содержит в себе четырехъядерный процессор с ядрами Cortex-A53 и двухъядерный Cortex-R5F для реалтайм вычислений и ПЛИС UltraScale с 746550 System Logic Cells, 682560 Flip-Flops, 274080 CLB LUT и многим другим. В общем, прям жЫр 🙂.
В сборе это хозяйство выглядит следующим образом:
Так выглядит SoM модуль с обеих сторон:
Помимо этого в комплекте имеется JTAG отладчик Alinx AL321 на чипе FTDI FT232H, который позволяет достаточно быстро осуществлять операции отладки в отличие от достаточно медленных чипов, которые идут в Platform Cable USB, типа DLC9LP.
Выглядит он вот так и поставляется с microUSB-кабелем и кабелем подключения к отладочному разъёму:
Для питания платы используется блок питания на +12V DC на 36W (3A):
Для загрузки ПО и битстрима идет в комплекте MicroSD Flash карта, может быть поставлена и на 16 Гб и на 32 Гб. Мне повезло, и в этом комплекте была флешка на 32Гб. Хотя для работы на начальном этапе более чем достаточно и 4 Гб флешки:
Плюсом ещё докладывают Card Reader для microSD карт:
В качестве ещё одного элемента поставки можно отдельно отметить систему охлаждения основного чипа в виде 30W Fan Cooler:
В качестве приятного дополнения и защиты от случайных механических воздействий имеется в комплекте плексигласовый защитный корпус:
Обратная сторона платы, к слову, выглядит следующим образом:
Внимательные читатели увидят на шелкографии надпись AXU9EGB 1.1. Но пусть не смущает эта надпись, несущая плата, видимо, используется во многих комплектах поставки.
❯ Дополнительные модули
Помимо этого у Alinx можно приобрести разные модули, которые устанавливаются в 40-пиновый разъем GPIO:
— Dual Channel 14bit 125Msps DA BNC Analog Output Module AD9767;
— Multi-channel 16 bit 200ksps Synchronous Sampling AD Module AD7606;
— Dual-channel 65MSPS 12bit AD analog to digital signal conversion module AD9238;
— 7-inch Touch Screen Module;
— модуль для установки в MIPI-интерфейс в виде 5MP камеры на контроллере OV5640;
Также продаются разные модули для установки на FMC-разъем, среди которых:
— Alinx FH1223 FMC HPC to 4-Channel SFP Optical Fiber Interface Adapter Card;
— Alinx FL2121 4-way 1000M Gigabit Ethernet LPC;
— Alinx FMC HDMI CARD Daughter Board Input Output 1080p;
— Alinx FL1404 FMC to 4-way MIPI module LPC interface;
— Alinx FL9613 FMC LPC to 4-Channel AD 12-bit 250 MSPS;
— Alinx FH9712 16 channel GMSL2/GMSL1 autopilot camera acquisition module MAX96712;
— Alinx FL1010 FMC LPC Interface to 40-Pin Expansion Ports;
— Alinx FL0214 FMC LPC to Dual Lens MIPI 1.3 Megapixel IMX214 CMOS Camera;
— Alinx FH1226 FMC HPC to Cameralink Adapter;
…и многие другие, их можно найти на сайте Alinx или на Aliexpress. Как говорится, любой каприз за ваши деньги. Возможностей для реализации огромного спектра задач – целая уйма.
❯ Zynq Ultrascale+ MPSoC
Широкими мазками опишу возможности центрального элемента данной отладки. Вот так возможности Zynq MPSoC отразили Xilinx в своих документах на данный чип:
Если рассматривать чип с точки зрения внутреннего технического устройства, то приводится следующая блок-схема:
Рассмотрим подробнее встроенный четырехъядерный ARM-процессор, и я приведу несколько его отличительных особенностей:
- Архитектура основного процессора ARMv8-A с рабочей частотой CPU до 1.5 GHz;
- Медиапроцессор с поддержкой инструкций NEON Advanced SIMD;
- Floating Point Unit (FPU) с поддержкой вычислений одинарной и двойной точности;
- CoreSight и Embedded Trace Macrocell (ETM) для расширенных функций отладки;
- Accelerator Coherency Port (ACP);
- AXI Coherency Extension (ACE);
- Два кэша размером 32 KB L1 и кэш L2 1 MB.
Отдельной фишкой данного SoC является наличие двухъядерного процессора Cortex-R5F с Real-Time Processing Unit (RPU):
- Основан на архитектуре ARMv7-R c рабочей частотой до 600 MHz;
- Floating Point Unit (FPU) с поддержкой вычислений одинарной и двойной точности;
- CoreSight и Embedded Trace Macrocell (ETM) для расширенных функций отладки;
- Кэш в 32KB L1 и кэш в 128 KB TCM c ECC.
Помимо этого присутствует On-Chip Memory:
- 256KB on-chip RAM (OCM) в PS с ECC;
- 36 Mb on-chip RAM (UltraRAM) c ECC в PL;
- 35 Mb on-chip RAM (block RAM) c ECC в PL;
- 11 Mb on-chip RAM (distributed RAM) в PL.
Для графики на чипе есть отдельный GPU ARM Mali-400 MP2 с частотой до 600 MHz:
- Поддержка OpenGL ES 1.1 и 2.0;
- Поддержка OpenVG 1.1.
Контроллеры памяти:
- Мультипротокольный контроллер динамической памяти;
- Контроллер памяти с шириной шины в 32 или 64 бита с поддержкой DDR4, DDR3, DDR3L, или LPDDR3 памяти и 32-битный интерфейс для LPDDR4;
- Поддержка ECC для 32-битного и 64-битного режима работы;
- Адресное пространство до 32GB;
- Интерфейсы для статической памяти eMMC 4.51, NAND с поддержкой ONFI3.1 и SPI/QSPI интерфейс для подключения NOR Flash;
- Два контроллера DMA, с 8 каналами каждый и поддержкой Memory-to-memory, memory-to-peripheral, peripheral-to-memory и scatter-gather транзакций.
Также на борту имеется поддержка последовательных трансиверов:
- Четыре PS-GTR трансивера с поддержкой скорости в 6.0 Gb/s;
- Поддержка SGMII tri-speed Ethernet.
Очень богат данный чип на выделенные периферийные устройства ввода-вывода и интерфейсы:
- PCI Express Gen2 x1, x2, или x4 с Root complex и End Point конфигурации;
- Serial-ATA 3.1 (SATA) с поддержкой скорости передачи данных в 1.5, 3.0, и 6.0 Gb/s
- Display Port контроллер с поддержкой рейтов до 5.4 Gb/s и двумя Tx-линиями, без поддержки Rx поддерживающий режимы работы 4K@30Hz или 1080P@60Hz;
- Четыре 10/100/1000 Ethernet MAC и интерфейсами GMII, RGMII, SGMII;
- Два контроллера USB 3.0/2.0 для Device/Host/OTG с поддержкой до 12 эндпоинтов и Super-speed, high- speed, full-speed, и low-speed режимов работы;
- Два CAN 2.0B совместимых интерфейса;
- Стандартные UART, SPI, I2C, RTC, WatchDog контроллеры;
- 78 MIO (PS) и 96 EMIO (PL) выводов GPIO.
Для реализации интерконнекта используется ARM AMBA AXI4-based контроллер. Ну и многое другое.
❯ Область программируемой логики PL
Тут тоже очень богато. Перечислю доступные ресурсы, предоставляемые ПЛИС:
- 746550 System Logic Cells;
- 682560 CLB Flip-Flops;
- 341280 CLB LUTs;
- 42660 Logic Array Block;
- 11.3 Mb Distributed RAM;
- 744 Block RAM Blocks;
- 26.2 Mb Block RAM;
- 112 UltraRAM Blocks;
- 31.5 Mb UltraRAM;
- 3528 DSP Slices;
- Clock Signal Management (CMT) 4 штуки;
- 24 GTH Transceiver 16.3Gb/s;
- Transceiver Fractional PLLs 12 штук;
- DSP блоки с 27 x 18 знаковыми вычислениями, 48-битным adder/accumulator и 27-битным pre-adder.
И многое другое, что можно очень долго перечислять…
❯ SoM и его содержимое
Теперь настало время препарировать схематик SoM-а и подробнее посмотреть, что на нём есть и какие компоненты установлены. Начнем с того, что он состоит из 4-ёх 120 пиновых коннекторов, которые установлены так, чтобы SoM было невозможно воткнуть на плату в неправильном положении. Освежим в воспоминаниях картинку:
Теперь подробнее рассмотрим верхнюю часть SoM-а:
❯ Питание на SoM
Для того, чтобы сформировать набор разных напряжений, на SoMе установлен PMIC-котроллер TPS6508640RSKR в связке с большим количеством обвязки в виде линейных, синхронных, импульсных преобразователей и большого числа пассивных компонентов:
В целом всё достаточно просто, потом можете посмотреть самостоятельно схематик и сделать свои выводы.
❯ Тактирование на SoM
На SoM установлен основной осциллятор 33.3333 MHz и низкочастотный генератор 32.768 kHz для RTC:
И дополнительно на SoM имеется генератор дифференциального тактового сигнала в 200MHz:
В целом достаточно стандартно и под стать всей периферии и сложности самой платы.
❯ Оперативная память на SoM
На SoM-е установлено 6 чипов DDR4, часть из которых подключена к PS-части, а другая часть к PL. Если быть несколько конкретнее то:
- К PS-части подключено 4 чипа DDR4 MT40A512M16LY-062E общим объёмом 4 Гбайта c 64-битной шириной полосы пропускания;
- К PL-части подключено 2 чипа DDR4 MT40A512M16LY-062E общим объёмом 1 Гбайт с шириной пропускания в 32 бита.
Максимальная рабочая скорость DDR4, подключенной к PS, может достигать 1200 МГц со скоростью передачи данных в 2400 Мбит/с. Подключается эта память к интерфейсу памяти BANK504 PS.
Максимальная скорость DDR4 SDRAM, подключенная к PL, также может достигать 1200 МГц с такой же скоростью передачи данных. И подключается эта память к BANK64 в PL.
❯ Постоянная память на SoM
Если рассматривать постоянную память, на SoM установлено следующее:
- eMMC MTFC8GAKAJCN-4M объемом 64 Гбайта;
- QSPI Flash MT25QL512ABB1EW9-0SIT объёмом 64 Мбайта, подключенный к QSPI0 PS-части;
- QSPI Flash MT25QL512ABB1EW9-0SIT объёмом 64 Мбайта, подключенный к QSPI1 PS-части;
- I2C EEPROM 24LC04B-I/SN объёмом 4 Кбит.
❯ Содержимое отладочной платы
Как я уже упоминал выше, плата состоит из двух основных компонентов – SoM c Zynq и несущей платой, которая предоставляет возможность подключения периферийных устройств и сетевых подключений.
Перечислю все основные возможности, которые предоставляет несущая плата:
- PS High Speed интерфейс PCIe Gen2 x4 с интерфейсом M.2;
- 2 разъема USB3.0 и 2 разъема USB 2.0;
- 2 разъема SATA 3.1
- mini-DisplayPort с возможность передачи 4K@30Hz или 1080P@60Hz;
- PS Gigabit Ethernet;
- PL Gigabit Ethernet;
- SD/SDIO интерфейс для подключения microSD карт;
- 2 UART microUSB интерфейса для подключения к PS и PL
- 2 CAN 2.0B интерфейса;
- 2 RS-485 интерфейса;
- MIPI-интерфейс;
- FMC-интерфейс, к которому можно подключить Alinx FMC модули;
- PL Ethernet 12.5Gb/s x16, идущие на порта для подключения SFP+;
- Температурный сенсор LM75;
- Real Time Clock с батарейным держателем;
- 40 пиновый GPIO интерфейс;
- 4 LED;
- 1 кнопка сброса и 2 пользовательских кнопки.
Помимо этого на плате имеется служебный переключатель для выбора источника загрузки:
Фото переключателя на плате:
А также имеется 6 SMA интерфейсов для подключения GTH-трансивера.
Проанализировав состав платы, я накидал схему, отображающую всё, что есть на плате:
По порядку рассмотрим каждый из пунктов чуть подробнее.
❯ Питание
Плата запитывается от 12В через самый обычный штыревой разъём, подойдёт любой качественный блок питания с выходным напряжением 12В и мощностью 36W.
Помимо этого на плате имеется несколько преобразователей из 12V в целевые напряжения. Из 12V в 5V:
Из 12V в 3.3V:
И из 12V в 1.8V:
Плюсом к этому на плате имеются и тест-поинты для контроля качества питания.
❯ Источники тактирования
Очень интересным компонентом на плате является программируемый источник тактовой частоты Si5332BD11025-GM2, который позволяет генерировать весь необходимый спектр тактовых частот для всей необходимой периферии:
❯ JTAG разъем
Для отладочных целей на плате имеется стандартный для всех отладок JTAG-интерфейс для подключения отладчика:
❯ Сеть
Данная плата также предоставляет обширные возможности для реализации сетевых сценариев. В первую очередь обратим внимание на два медных Ethernet-разъема. Первый – подключен к PS-части Zynq. Линии MDIO из раъема идут к PHY Ethernet от Realtek RTL8211F. От PHY к PS идёт подключение через интерфейс RGMII:
Второй подключен к программируемой логике по тому же принципу с тем же PHY Ethernet-контроллером:
Помимо этого на плате установлен разъём для подключения 2-ух SFP/SFP+ модулей. Оба SFP-разъема подключаются к PL-логике устройства:
Помимо этого имеется ещё генератор дифференциального тактового сигнала для работы трансиверов SiT9121AI-2B1-33E125.000000 с выходной тактовой частотой в 125МГц:
Помимо вполне стандартных сетевых интерфейсов на плате имеется подключение через SMA-разъемы к GTH-интерфейсам с возможностью передачи данных до 100 Гбит/с:
❯ Интерфейс FMC
На плате имеется FMC-разъем для подключения большого количества различных модулей, которые я перечислил в начале статьи. Схематик ввиду большого его размера – прикладывать тут не буду. Приведу лишь фото интерфейса:
❯ Интерфейсы USB
В части USB-подключений плата также предоставляет целую кучу возможностей. На плате установлен USB3.1 хаб GL3523T-QFN76, который подключен к соответствующей части PS-части Zynq MPSoC:
К хабу подключены 2 USB3.0 и 2 USB2.0 разъема. Правда, на схеме все 4 почему-то обозначены как USB3.0-разъема:
Помимо этого на плате установлен USB2.0 PHY контроллер USB3320C-EZK-TR, который подключен к USB-хабу:
❯ Интерфейс microSD
На плате имеется SD-разъём для подключения внешнего накопителя данных или источника загрузки. Разъём на плате подключается к Zynq, осуществляется через расширитель портов SDIO с преобразователем уровня логического сигнала 1TXS02612RTWR:
❯ Интерфейс SATA
Ещё одна интересная возможность, которая предоставляется платой – это возможность подключить до 2-х SATA устройств, будь то SSD или HDD:
❯ Интерфейс M.2
Приятная особенность платы – наличие M.2 разъёма с ключом М. Сюда возможно подключить любое подходящее PCI-e устройство, например, SSD-диск подходящего форм-фактора:
❯ Интерфейс Display Port
Для подключения внешнего дисплея вместо HDMI на плате использован интерфейс Display Port:
❯ Интерфейс MIPI
Для подключения внешних мультимедиа-устройств, будь то дисплей или камера – на плате предусмотрен интерфейс MIPI:
❯ Интерфейс CAN
В случае, если плата разрабатывается под какие-либо automotive-применения, – выведен интерфейс CAN с подключением в клеммный разъем HT3.96-4P к контроллеру SN65HVD232 через преобразователь логических уровней TXS0102DCU. Сигнальные линии подключаются к PS-части Zynq:
❯ Интерфейс RS-485
Для промышленных применений на плате реализован вывод интерфейса RS-485 через приемопередатчик MAX3485ESA. Подключается к PL-части Zynq:
❯ Температурный I2C сенсор
Для случаев, когда потребуется мониторинг внешней температуры, – на плате имеется I2C температурный сенсор LM75DM-33R2, который подключается к PS-части Zynq:
❯ Батарейка
На плате имеется батарейный держатель, который снабжает соответствующий банк питания в PS-части:
❯ EEPROM
Помимо всего прочего на плате имеется I2C EEPROM 24LC04 объёмом 4 Кбит, которая подключена к PS-части устройства:
❯ UART-интерфейсы
Для коммуникации с внешними устройствами и работы с консолью Zynq – на плате имеется два интерфейса UART: первый подключен к PS-части устройства, второй подключен к PL-части устройства. В обоих случаях подключение осуществляется с использованием USB-to-UART конвертера CP2102N-A01-GQFN28R по miniUSB-порту:
К PS-части UART-интерфейс подключается через преобразователь логических уровней 3.3V-to-1.8V TXS0102DCU:
❯ Интерфейсы GPIO
В дополнение к широчайшим возможностям отладки – на плате имеется стандартная 40-пиновая гребенка с GPIO-пинами:
❯ LED & Buttons
Для того, чтобы реализовать простую индикацию и базовое взаимодействие с пользователем – на плате имеется несколько LED-индикаторов и кнопок.
Первый – индикатор питания 3.3V и второй LED подключен к PS-части:
Имеется второй LED-индикатор, который подключен к PS-части:
Третий LED-индикатор подключен к PL-части:
Четвёртый, служебный, индикатор используется для того, чтобы обозначить, что загрузка bitstream в FPGA прошла успешно:
Плюсом к этому на плате расположено несколько кнопок. Первая – используется для включения питания платы, вторая – подключена к PL-части, а третья – подключена к PS-части:
В общем, достаточно стандартный набор. Теперь перейдём к рассмотрению того, что поставляется с платой в части примеров и SDK для работы с платой.
❯ BSP и примеры проектов идущие в комплекте
В комплекте с платой идёт архив размером 7.2 Гбайт, в котором представлено самое подробное описание отладки:
- Механические размеры и dxf-файлы плат;
- Схематики на каждый из компонент;
- Большое количество примеров.
Если просто перечислить набор примеров, то получится примерно следующий список.
Примеры для работы с периферией из ПЛИС и baremetal-приложений в PS-части:
- Подключение LED к PL-части с параллельным использованием логического анализатора ILA;
- Использование PLL в PL-части для генерации различных частот;
- PS RAM;
- ROM;
- FIFO;
- Кнопки и GPIO;
- PWM;
- UART PL;
- RS485 PL;
- PL DDR4 RAM;
- HDMI out (с использованием FMC-платы);
- HDMI in (с использованием FMC-платы);
- Примеры с семисегментным дисплеем;
- Ethernet BER тест;
- Пример использования GTH-интерфейса;
- PS Hello World;
- PS RTC;
- PS MIO;
- PS UART;
- PS CAN;
- PS I2C;
- PS Display Port;
- PS SD Card;
- PS Network;
- PS Network with remote applications;
- PS Sysmon;
- PS EMIO;
- PS AXI GPIO;
- PS RS485;
- PL Ethernet;
- Custom PWM IP;
- Dualcore AMP;
- FreeRTOS;
- PL read write PS DDR;
- BRAM test;
- DMA Loopback;
- AD7606 DMA;
- AD9708 DMA;
- AD9280 DMA with Display Port;
- AD9238 DMA with Display Port;
- AD7606 DMA with Display Port;
- AD9767;
- AN5642 + SD Card;
- AN5642 + LwIP;
- AN5641 + MIPI + Displya Port;
- LCD + Touch;
- AD9280 + LwIP;
- AD9238 + LwIP;
- AD7606 + LwIP;
- LED + QSPI + SDCard.
В комплекте также множество примеров работы с периферией из Linux:
- Сборка petalinux и куча примеров для него;
- Сборка драйверов для Linux;
- Драйверы для Char-устройств;
- Device Tree;
- Pinctl GPIO подсистема в Linux;
- Concurrent system calls;
- Чтение GPIO;
- Таймеры;
- Прерывания;
- Система ввода/вывода;
- Неблокируемый ввод/вывод;
- Асинхронный ввод/вывод;
- Работа с платформой с Device Tree;
- I2C;
- USB;
- SPI;
- UART;
- Работа с блочными устройствами;
- Работа с сетевыми устройствами;
- DMA Loop;
- Работа с тачсенсорами;
- Работа с LCD-дисплеями;
- Работа с ADC AD9238 и AD7606 в Linux;
- Работа с DAC AD9767 из Linux.
В теории по каждому из этих примером можно было бы написать целую книгу или цикл статей. Данный BSP я выложил в своем телеграм-канале по Zynq.
❯ Заключение
Долго думал, чем завершить данный обзор. Плата, конечно, стоит очень дорого и обычному энтузиасту недоступна, но объём возможностей и ресурсов, которые она предоставляет в итоге, – точно соответствует её цене. Мне показалось интересным заглянуть за пределы доступного, поковырять что-то недоступное и предоставить это общественности. Возможно, чуть позже напишу статью по теме сборки Linux под Ultrascale+ потому что там своих граблей оказалось навалено невероятно много и всё оказалось не настолько тривиально, как в Zynq-7000. И есть пара кейсов на рассмотрение, связанных с PL Ethernet и AXI ENET, но это уже предмет отдельного разговора.
Спасибо, что дочитали до конца. До встречи в следующих статьях! 🙂
Автор: Андрей