Содержание
1 Общие сведения
2 Порты
2.1 MIO
2.2 EMIO
2.3 GP
2.4 HP
2.5 ACP
3 Периферия
3.1 Static Memory Controller
3.2 Quad-SPI Flash Controller
3.3 SD/SDIO Controller
3.4 General Purpose I/O (GPIO)
3.5 USB Host, Device, and OTG Controller
3.6 Gigabit Ethernet Controller
3.7 SPI Controller
3.8 CAN Controller
3.9 UART Controller
3.10 I2C Controller
3.11 XADC Interface
4 Процессорный модуль
5 Программируемая логика
6 Производительность
6.1 Теоретическая
6.2 Практическая
6.2.1 Обработка сетевых пакетов
6.2.2 Производительность порта HP
7 Передача данных между процессорным модулем и программируемой логикой
8 Загрузка SoC
9 Проблемы
10 Создание файла конфигурации
11 Заключение
12 Используемые источники
1 Общие сведения
Структурная схема Zynq.
Каждый Zynq состоит из одного или двух ядер ARM Cortex-A9 (ARM v7), кэш L1 у каждого ядра свой, кэш L2 общий. Поддерживаемая оперативная память имеет стандарты DDR3, DDR3L, DDR2, LPDDR-2. Максимальный объем оперативной памяти равен 1 Гбайт (2 микросхемы по 4 Гбит). Максимальная тактовая частота оперативной памяти 525 МГц. Операционные системы: Standalone (bare-metal) и Petalinux. Процессорный модуль общается с внешним миром и программируемой логикой с помощью портов, объединенных в группы:
- MIO (multiplexed I/O);
- EMIO (extended multiplexed I/O);
- GP (General-Purpose Ports);
- HP (High-Performance Ports);
- ACP (Accelerator coherency port).
Схема интерфейсов Zynq.
Буквы S и M у порта обозначают соответственно Slave и Master.
Так как, в одном корпусе Zynq реализованы и процессорный модуль и программируемая логика, есть выводы, которые относятся к процессорному модулю и выводы, которые относятся к программируемой логике.
2 Порты
2.1 MIO
Порты MIO подключены к выводам процессора. С помощью MIO могут быть подключены следующие периферийные устройства процессорного модуля:
- USB-контроллер 2 шт;
- Gigabit Ethernet контроллер 2 шт;
- SD/SDIO контроллер 2 шт;
- UART 2 шт;
- CAN 2 шт;
- I2C 2 шт;
- SPI 2 шт;
- GPIO. Все выводы можно использовать как выводы общего назначения.
Так же, к MIO могут быть подключены следующие устройства памяти процессорного модуля:
- QSPI контроллер;
- ONFI контроллер;
- SRAM/NOR контроллер.
Количество MIO портов равно 54 (за исключением некоторых микросхем в корпусе CLG225, там еще меньше). Поэтому все сразу включить не удастся. Для решения этой проблемы существует группа портов EMIO.
2.2 EMIO
EMIO представляет собой проброс периферийного устройства из процессорного модуля в программируемую логику и подключение периферийного устройства к выводам программируемой логики. Однако не все периферийные устройства можно перенести через EMIO, какие-то не переносятся совсем (USB), какие-то с изменением функциональности (Ethernet через EMIO имеет интерфейс GMII для подключения внешней микросхемы физического уровня). Между процессорным модулем и программируемой логикой по порту EMIO можно подключить 192 сигнала (64 входа и 128 выходов).
2.3 GP
Порты GP используют протокол Axi-Lite. Протокол подразумевает работу с данными шириной до 32 бит. За одну транзакцию осуществляется передача/прием данных, размером не больше 32 бит. Используется, как правило, для управления блоками в программируемой логике или при низкоскоростном обмене. Существует 2 порта Master и 2 порта Slave.
2.4 HP
Порты HP используют протокол AXI4. Протокол подразумевает работу с данными шириной 32 или 64 бита. Протокол поддерживает boost транзакции. За одну транзакцию осуществляется передача/прием произвольного размера данных. Используется, как правило, для организации высокоскоростного обмена данными между процессорным модулем и программируемой логикой. Существует 4 порта Slave.
Путь передачи данных с помощью порта HP
2.5 ACP
Порт ACP использует протокол AXI4. Протокол подразумевает работу с данными 64 бита. Протокол поддерживает boost транзакции. За одну транзакцию осуществляется передача/прием произвольного размера данных. Используется, как правило, для организации высокоскоростного обмена данными между процессорным модулем и программируемой логикой, причем данные дополнительно помещаются в L2 кэш. Существует один порт Slave.
Путь передачи данных с помощью порта ACP
3 Периферия
3.1 Static Memory Controller
SMC используется как контроллер памяти с технологией NAND или как контроллер памяти с параллельным интерфейсом. Поддерживает следующие типы памяти:
- NAND flash;
- NOR flash;
- асинхронная SRAM.
Контроллер памяти с технологией NAND характеризуется следующими пунктами:
- поддержка спецификации ONFI 1.0;
- поддержка микросхем памяти емкостью до 1 Гбайт;
- 1 бит ECC, считаемый аппаратно (используется в случае, если микросхема Flash-памяти не поддерживает ECC).
- 8 или 16 линий обмена данными и одна линия выбора микросхемы (Chip Select);
- асинхронный режим работы.
Контроллер памяти с параллельным интерфейсом характеризуется следующими пунктами:
- 8 линий обмена данными;
- 2 линии выбора микросхемы (Chip Select);
- 25 линий адреса;
- Асинхронный режим работы.
Подключение микросхемы NOR Flash с параллельным интерфейсом
Подключение микросхемы SRAM с параллельным интерфейсом
Подключение микросхемы NAND Flash
3.2 Quad-SPI Flash Controller
Реализует контроллер SPI для подключения внешних микросхем памяти по технологии NOR. Основные характеристики:
- поддержка Flash-памяти от Micron и Spansion;
- настраиваемая ширина шины (1x, 2x, 4x, 8x);
- тактовая частота до 100 МГц
Возможные режимы работы:
- один сигнал выбора микросхемы (Chip Select / Slave Select), 4 двунаправленных линии для данных;
- два сигнала выбора микросхемы (Chip Select / Slave Select), 8 двунаправленных линий для данных (параллельное включение);
- два сигнала выбора микросхемы (Chip Select / Slave Select), двунаправленных 4 линии для данных (общее включение);
- один сигнал выбора микросхемы (Chip Select / Slave Select), одна линия для передачи, одна линия для приема.
Одна микросхема, 4 двунаправленные линии для обмена данными
Две микросхемы, 8 двунаправленных линий обмена данными
Две микросхемы, 4 двунаправленные линии
Одна микросхема, каждая линия однонаправленная
3.3 SD/SDIO Controller
Заявлена поддержка устройств eMMC, но без гарантии, что все будет работать корректно (The Zynq-7000 SoC is expected to work with eMMC devices because the protocol is the same as SD, but this has not been extensively verified). Основные характеристики:
- поддержка спецификации SD Host Controller 2.0;
- поддержка карт стандартов SDHS и SDHC;
- поддержка стандарта MMC3.31;
- режим только Host;
- максимальная тактовая частота 50 МГц;
- режим SPI не поддерживается.
Подключение SD карты
3.4 General Purpose I/O (GPIO)
Каждый из портов можно использовать в следующе режиме:
- вход;
- выход;
- выход с третьим состоянием;
- вход, изменение данных на котором, генерирует прерывание.
Каждый порт можно перенастроить отдельно от других.
Структура блока GPIO
3.5 USB Host, Device, and OTG Controller
Требует внешнюю микросхему физического уровня с интерфейсом ULPI. Основные характеристики:
- поддержка интерфейса 2.0;
- до 12 конечных точек/ Endpoint (одна управляющая и 11 настраиваемых);
- OTG 1.3;
- все типы транзакций (Control, Bulk, Interrupt, Isochronous);
- поддерживаются режимы OTG, USB host, USB device.
Подключение контроллера USB
3.6 Gigabit Ethernet Controller
Требует внешнюю микросхему физического уровня с интерфейсом RGMII. Основные характеристики:
- поддержка работы со скоростями 10/100/1000 Мбит/с;
- поддержка режимов Full duplex и half duplex;
- подсчет контрольной суммы для IP, TCP, UDP в версиях протокола IPv4 и IPv6;
- Jumbo Frames не поддерживаются;
- Gigabit Half Duplex не поддерживается;
- поддержка VLAN;
- поддержка Wake-on-LAN.
У каждого контроллера есть свой интерфейс MDIO. Однако при использовании двух контроллеров нельзя использовать два MDIO интерфейса, поскольку они занимают одинаковые выводы MIO 52 и MIO 53. Возможно использование одного интерфейса, подключенного через MIO, а второго через EMIO.
Подключение сетевого контроллера.
3.7 SPI Controller
Основные характеристики:
- работа в режиме Master, Slave, Multi-Master;
- поддержка работы с тремя устройствами в режиме Master, по 3 линии SS (Slave Select);
- поддержка одновременной передачи и приема;
- тактовый сигнал до 50МГц при использовании MIO, до 25МГц при использовании EMIO;
- настраиваемые режимы фазы тактового сигнала и его полярности (CPHA, CPOL).
Фазы тактового сигнала и полярность
Подключение контроллера SPI в режиме Master
Подключение контроллера SPI в режиме Slave
3.8 CAN Controller
Основные характеристики:
- поддержка стандартов CAN 2.0A, and CAN 2.0B;
- поддержка кадров с длиной идентификатора в 11 и 29 бит;
- скорость до 1 Мбит/с.
Требует внешней микросхемы физического уровня.
3.9 UART Controller
Основные характеристики:
- настраиваемая скорость передачи;
- настраиваемое количество бит данных 6, 7, 8;
- настраиваемое количество стоп бит 1, 1.5, 2;
- контроль четности;
- передача данных в режимах Normal, Automatic Echo, Local Loopback, Remote Loopback.
Режимы работы контроллера UART
3.10 I2C Controller
Основные характеристики:
- скорость обмена до 400 Кбит/с;
- поддержка спецификации версии 2;
- работа в режиме Master и Slave.
3.11 XADC Interface
The Xilinx analog mixed signal module. Аналого-цифровой преобразователь. Имеет в своем составе 2 двенадцатиразрядных АЦП с частотой дискретизации 1 MSPS, аналоговый мультиплексор (до 17 внешних аналоговых каналов), и встроенные датчики температуры и напряжения микросхемы Zynq. Аналоговые входы поддерживают полосу пропускания сигнала до 500кГц при частоте дискретизации в 1 MSPS.
4 Процессорный модуль
Каждый Zynq, как уже было сказано выше, содержит в своем составе одно или два процессорных ядра. Максимальная тактовая частота ядер зависит от класса скорости микросхемы (Speed Grade) [1]. Возможно 5 классов скорости: -1, -1L, -2, -2L, -3. Классы с индексом L характеризуются пониженным напряжением питания.
Количество ядер и зависимость максимальной частоты от класса скорости микросхемы
Микросхема | Количество ядер | Максимальная тактовая частота, МГц | ||
---|---|---|---|---|
-1 | -2 | -3 | ||
Z-7007S | 1 | 667 | 766 | - |
Z-7012S | 1 | 667 | 766 | - |
Z-7014SS | 1 | 667 | 766 | - |
Z-7010 | 2 | 667 | 766 | 866 |
Z-7015 | 2 | 667 | 766 | 866 |
Z-7020 | 2 | 667 | 766 | 866 |
Z-7030 | 2 | 667 | 800 | 1000 |
Z-7035 | 2 | 667 | 800 | 1000 |
Z-7045 | 2 | 667 | 800 | 1000 |
Z-7100 | 2 | 667 | 800 | - |
5 Программируемая логика
Программируемая логика, используемая в Zynq основа на двух семействах FPGA: Artix-7 и Kintex-7. Artix позиционируется как менее производительное и с меньшим потреблением. Соответственно Kintex более производительно и с большим потреблением. На практике они различаются количеством доступных ресурсов и типом высокоскоростных приемопередатчиков (GTP со скоростью до 6,25 Гбит/с в Artix и GTX со скоростью до 12,5 Гбит/с в Kintex) [2].
Характеристики программируемой логики
Микросхема | Семейство | Логические ячейки | LUT | Триггеры | BRAM | DSP | GTP/GTX |
---|---|---|---|---|---|---|---|
Z-7007S | Artix | 23K | 14400 | 28800 | 50 | 66 | - |
Z-7012S | Artix | 55K | 34400 | 68800 | 72 | 120 | 4 |
Z-7014S | Artix | 65K | 40600 | 81200 | 107 | 170 | - |
Z-7010 | Artix | 28K | 17600 | 35200 | 60 | 80 | - |
Z-7015 | Artix | 74K | 46200 | 92400 | 95 | 160 | 4 |
Z-7020 | Artix | 85K | 53200 | 106400 | 140 | 220 | - |
Z-7030 | Kintex | 125K | 78600 | 157200 | 265 | 400 | 4 |
Z-7035 | Kintex | 275K | 171900 | 343800 | 500 | 900 | 16 |
Z-7045 | Kintex | 350K | 218600 | 437200 | 545 | 900 | 16 |
Z-7100 | Kintex | 444K | 277400 | 554800 | 755 | 2020 | 16 |
LUT (Look-Up Tables) используются для реализации логических функций.
BRAM (Block RAM) -используются для хранения данных. Размер одного BRAM = 36Кбит.
Примечание. Количество доступных GTP/GTX так же зависит от используемого корпуса. В таблице указано максимальное значение.
6 Производительность
6.1 Теоретическая
В таблицу ниже сведена теоретическая пропуская способность между процессорным модулем и программируемой логикой, а так же пропускная способность памяти. Следует понимать, производительность получена умножением тактового сигнала на ширину интерфейса и не отражает реальную картину передачи данных.
Теоретическая пропускная способность между процессорным модулем и программируемой логикой
Интерфейс | GP | GP | HP | ACP | DDR | OCM |
---|---|---|---|---|---|---|
Тип | PS Slave | PS Master | PS Slave | PS Slave | Внешняя память | Внутренняя память |
Ширина шины, бит | 32 | 32 | 64 | 64 | 32 | 64 |
Тактовый сигнал, МГц | 150 | 150 | 150 | 150 | 1066 | 222 |
Чтение, Мбайт/с | 600 | 600 | 1200 | 1200 | 4264 | 1779 |
Запись, Мбайт/с | 600 | 600 | 1200 | 1200 | 4264 | 1779 |
Чтение + запись, Мбайт/с | 1200 | 1200 | 2400 | 2400 | 4264 | 3557 |
Количество интерфейсов | 2 | 2 | 4 | 1 | 1 | 1 |
Общая пропускная способность, Мбайт/с | 2400 | 2400 | 9600 | 2400 | 4264 | 3557 |
DMA | DMAC | Контроллер Ethernet | Контроллер USB | Контроллер SD |
---|---|---|---|---|
Тип | ARM PL310 | PS Master | PS Master | PS Master |
Ширина шины, бит | 64 | 4 | 8 | 4 |
Тактовый сигнал, МГц | 222 | 250 | 60 | 50 |
Чтение, Мбайт/с | 1776 | 125 | 60 | 25 |
Запись, Мбайт/с | 1776 | 125 | 60 | 25 |
Чтение + запись, Мбайт/с | 3552 | 250 | 60 | 25 |
Количество интерфейсов | 1 | 2 | 2 | 2 |
Общая пропускная способность, Мбайт/с | 3552 | 500 | 120 | 50 |
Interconnect | Тактовый домен | Ширина, бит | Тактовый сигнал, МГц | Чтение, Мбайт/с | Запись, Мбайт/с | Чтение + запись, Мбайт/с |
---|---|---|---|---|---|---|
Central Interconnect | CPU_2x | 64 | 222 | 1776 | 1776 | 3552 |
Masters | CPU_1x | 32 | 111 | 444 | 444 | 888 |
Slaves | CPU_1x | 32 | 111 | 444 | 444 | 888 |
Master Interconnect | CPU_2x | 32 | 222 | 888 | 888 | 1776 |
Slave Interconnect | CPU_2x | 32 | 222 | 888 | 888 | 1776 |
Memory Interconnect | DDR_2x | 64 | 355 | 2840 | 2840 | 5680 |
6.2 Практическая
Производительность на практике, конечно, оказывается ниже, чем теоретическая. При разработке устройств на базе Zynq нас интересовала производительность обработки сетевых пакетов и производительность порта HP.
6.2.1 Обработка сетевых пакетов
Производительность обработки сетевых пакетов
Схема включения | Протокол | MTU | TX, Мбит/с | Загрузка процессора, % | RX, Мбит/с | Загрузка процессора, % |
---|---|---|---|---|---|---|
PL Ethernet | TCP | 1500 | 824 | 70.7 | 651 | 89.5 |
TCP | 8192 | 988 | 45.8 | 818 | 55.3 | |
UDP | 1500 | 583 | 54.4 | 565 | 66.2 | |
UDP | 8192 | 737 | 33.6 | 876 | 85.8 | |
PS EMIO | TCP | 1500 | 801 | - | 756 | - |
PS MIO | TCP | 1500 | 678 | - | 691 | - |
Подключение PL Ethernet
При использовании схемы включения PS EMIO, используется контроллер Ethernet, реализованный в процессорном модуле. Подключение приведено на схеме ниже. Подсчет контрольных сумм для протоколов IP, TCP, UDP выполняется ядром в процессорном модуле. Программируемая логика используется с целью преобразования интерфейсов для подключения внешней микросхемы физического уровня. Для теста использовалась операционная система Petalinux с версией ядра 4.6. Замер выполнялся на плате ZC706, на которой установлена микросхема Z-7045 с классом скорости -2. Согласно таблице выше, процессорный модуль содержит 2 ядра и работает на тактовой частоте до 800МГц [5].
Подключение PS EMIO
При использовании схемы включения PS MIO, используется контроллер Ethernet, реализованный в процессорном модуле. Подключение приведено на схеме ниже. Подсчет контрольных сумм для протоколов IP, TCP, UDP выполняется ядром в процессорном модуле. Подсчет контрольных сумм для протоколов IP, TCP, UDP выполняется ядром в процессорном модуле. Для теста использовалась операционная система Petalinux с версией ядра 4.0. Замер выполнялся на плате Zybo, на которой установлена микросхема Z-7010 с классом скорости -1. Согласно таблице выше, процессорный модуль содержит 2 ядра и работает на тактовой частоте до 667МГц.
Подключение PS MIO
Производительность сетевого контроллера в режиме Rx+Tx
Схема включения | Протокол | MTU | TX, Мбит/с | RX, Мбит/с |
---|---|---|---|---|
PS EMIO | TCP | 1500 | 470 | 218 |
Итого: если необходимо обеспечить обработку сетевых пакетов со скоростью 1Гбит/с, то Zynq не подходит для этой задачи.
6.2.2 Производительность порта HP
Теоретическая пропускная способность порта HP составляет 9,6Гбит/с. Для проверки пропускной способности использовалась плата Mini-ITX, на которой установлена микросхема Z-7100 с классом скорости -2. Согласно таблице выше, процессорный модуль содержит 2 ядра и работает на тактовой частоте до 800МГц. Операционная система Petalinux с версией ядра 3.19. Подключение приведено на схеме ниже.
Схема подключения для оценки скорости порта HP
Root Complex PCI-Express был реализован в программируемой логике с помощью ядра Axi PCIE. Процессорный модуль используется для обработки полученных пакетов. При таком подключении скорость чтения данных с флешки составляла чуть больше 100Мбайт/с.
При использовании порта HP для соединения двух микросхем Zynq по схеме ниже, скорость передачи данных скорость передачи достигает 2,5Гбит/с (ограничение блока Interface).
Схема соединения двух Zynq
Итого: порт HP позволяет организовать высокоскоростную передачу данных из процессорного модуля в программируемую логику и обратно.
7 Передача данных между процессорным модулем и программируемой логикой
Методы передачи данных
Метод | Преимущества | Недостатки | Используется для | Расчетная пропускная способность |
---|---|---|---|---|
CPU Programmed I/O (GP) | Простое программное обеспечение. Небольшое использование ресурсов в PL. Простые устройства в PL | Низкая пропускная способность | Функций управления | <25Мбайт/с |
PS DMAC | Небольшое использование ресурсов в PL. Средняя пропускная способность. Несколько каналов. Простые устройства в PL | Несколько сложное программирование DMA | Организации DMA при ограниченном количестве ресурсов в PL | 600 Мбайт/с |
PL AXI_HP DMA | Высокая пропускная способность. Несколько интерфейсов | Доступ только к OCM/DDR. Более сложные устройства в PL. | Высокопроизводительного DMA для больших наборов данных. | 1200 Мбайт/с на каждый канал |
PL AXI_ACP DMA | Высокая пропускная способность. Низкая задержка. Поддержка когерентности кэша. | Большой объем данных может переполнить кэш. Использует пропускную способность с CPU Interconnect. Более сложные устройства в PL | Высокопроизводительного DMA для небольших когерентных наборов данных. Уменьшения загрузки процессора. | 600 Мбайт/с |
PL AXI_GP DMA | Средняя пропускная способность | Более сложные устройства в PL. | Функций управления из PL в PS.Доступ к I/O. | 600 Мбайт/с |
На диаграммах ниже серым цветом выделены блоки, которые участвуют в передаче данных.
Путь передачи данных через Master GP (CPU Programmed I/O)
Путь передачи данных через Master GP (PS DMAC)
Путь передачи данных через HP (PL AXI_HP DMA)
Путь передачи данных для ACP (PL AXI_ACP DMA)
Из всех возможных методов передачи данных между процессорным модулем и программируемой логикой, мы используем только 2: CPU Programmed I/O и PL AXI_HP DMA о которых будет рассказано в отдельной статье.
8 Загрузка SoC
После снятия сигнала сброса (PS_POR_B), процессорный модуль считывает со специальных входов режим загрузки и запускает на выполнение код BootROM. BootROM предназначен для начальной настройки системы, копирования следующего загрузчика в OCM (On Chip Memory) и передачи управления следующему загрузчику.
Возможные режимы загрузки:
- Quad-SPI;
- SD Memory Card;
- NAND;
- NOR;
- JTAG.
Хорошая статья от Xilinx, в которой перечислены виды загрузки и протестированные варианты www.xilinx.com/support/answers/50991.html
Если режим загрузки не JTAG, то BootROM ищет на устройстве загрузки следующий загрузчик FSBL (First State Boot Loader). FSBL используется для дальнейшей настройки системы (инициализация DDR, инициализация MIO). Также, FSBL используется для загрузки файла конфигурации в программируемую логику, если это необходимо. Файл конфигурации считывается с устройства загрузки и через специальный интерфейс(PCAP) в режиме DMA передается в программируемую логику. После загрузки программируемой логики, FSBL ищет следующее приложение для передачи управления. Возможны несколько вариантов:
- следующего приложения нет, FSBL останавливается;
- следующее приложение приложение пользователя (Bare Metal). Оно вычитывается в DDR, и ему передается управление;
- следующее приложение U-BOOT. U-BOOT вычитывается в DDR и ему передается управление.
Таким образом, без процессорного модуля нельзя загрузить файл конфигурации в программируемую логику за исключением случая использования JTAG.
Временная шкала включения Zynq
Время выполнения BootROM сильно зависит от пропускной способности интерфейса устройства, на котором хранится файл конфигурации.
Сигнал INIT_B используется для указания, что начато конфигурирование программируемой логики (загрузка файла конфигурации).
Сигнал DONE используется для указания, что конфигурирование программируемой логики завершено.
Загрузка конфигурации в программируемую логику
9 Проблемы
При разработке устройств на базе Zynq столкнулись с несколькими проблемами. Возможно, в этом виновато плохое чтение документации.
- При работе с контроллером Ethernet, реализованном в процессорном модуле, напряжение питания банка должно быть +1,8В или +2,5В.
- При использовании Petalinux возможна загрузка только с использованием SD-карты.
- Не только Zynq, а вся седьмая серия от Xilinx (Artix, Kintex). Невозможно сформировать дифференциальный сигнал в банке с напряжением питания +3,3В.
10 Создание файла конфигурации
Как создать прошивку для Zynq? Для этого потребуется два инструмента от Xilinx: Vivado и Vitis. Так же добавим bare-metal приложение, которое передаст привет миру.
- Запустить Vivado. Создать проект для выбранной микросхемы. В примере будет использоваться плата Zybo, на которой установлена микросхема XC7Z010-1CLG400C.
- В меню слева (если его нет, то включить можно в View => Show
Flow Navigator) выбрать Create Block Design => ввести имя файла
=> OK.
- В открывшемся окне Diagram нажать на + или воспользоваться
сочетанием клавиш Ctrl + I. В появившимся окне выбрать блок Zynq7
Processing System.
- Вверху окна нажать на Run Block Automation, появившимся окне нажать OK.
- Двойной клик на Zynq7 Processing System (или правой кнопкой и
пункт Customize Block). Если создается прошивка для покупной платы,
то в комплекте с ней есть xml или tcl файл с настройками
процессорного модуля. Его можно загрузить через пункт Import XPS
Settings и указав путь к файлу. Иначе, необходимо по принципиальной
схеме на устройство выяснить, какие MIO используются и куда
подключены, какой тип памяти DDR и выставить соответствующие
настройки во вкладках Peripheral I/O Pins, MIO Configuration, Clock
Configuration и DDR Configuration.
- В принципе, этого достаточно. Но если сейчас запустить синтез, Vivado выдаст критическую ошибку о неподключенном входе. Потому что по умолчанию включен вход GP0. Снова двойной клик на Zynq7 Processing System => PS-PL Configuration => Axi Non Secure Enablement => GP Master AXI Interface => снять галку с M AXI GP0 Interface => OK.
- File => Save Block Design. Вкладку можно закрыть.
- В вкладке Sources выбрать созданный файл, правый клик, Create
HDL Wrapper. В окне выбрать нужный пункт (включить автообновление
файла или нет, неважно), OK.
- В меню слева выбрать Generate Bitstream => Yes => OK.
- После некоторого времени появится окно Bitstream Generation Completed, которое нужно закрыть.
- Необходимо создать каталог, в котором будут храниться FSBL и bare-metal приложение. Можно хранить их в папке с проектом или в другом месте.
- В Vivado File => Export => Export Hardware. Указать путь к созданному каталогу, галку Include bitsteam ставить не обязательно. В созданном каталоге появится файл .xsa
- Запустить Vitis (можно из Vivado => Tools => Launch
Vitis), указать путь к каталогу с .xsa файлом.
- В Vitis File => New => Application Project. В поле Project Name задать, например, Zybo_fsbl, нажать Next, выбрать вкладку Create a new platform form hardware (XSA), нажать +, указать путь к файлу .xsa, в поле Platform name ввести название, чтобы потом можно было отличить созданную платформу от платформ по-умолчанию, например ProcessingSystem_wrapper_hw, Next, снять галку Generate boot components => Next => в списке шаблонов выбрать Zynq FSBL => Finish.
- В окне слева (Explorer) развернуть каталог src, открыть файл
main.c. Можно добавить define, чтобы видеть, что процессорный
модуль запустился.
#define FSBL_DEBUG#include "fsbl.h"#include "qspi.h"
- Выбрать файл Zybo_fsbl, меню Project => Build Project.
- FSBL создан. Теперь приложение. File => New => Application Project. В поле Project Name задать, например, Zybo_hello, Next, во вкладке Select a platform from repository выбрать созданную ранее платформу ProcessingSystem_wrapper_hw, Next, Next, в списке шаблонов выбрать Hello World, Finish.
- Выбрать файл Zybo_hello, меню Project => Build Project.
- Приложение создано. Теперь необходимо собрать итоговый файл. В Vitis выбрать меню Xilinx => Create Boot Image. Оставить переключатель в положении Create new BIF file. В поле Output BIF file path с помощью кнопки Browse указать место хранение файла и имя файла.
- Выбрать выходной формат файла, mcs или bin и путь для хранения файла
- Нажать кнопку Add и указать путь к файлу Zybo_fsbl.elf (исполняемый файл FSBL). Он расположен в папке с проектом Zybo_fsbl, каталог Debug, остальные поля оставить без изменений.
- Нажать кнопку Add и указать путь к файлу bit. Если была установлена галка Include bitsteam, то bit файл можно найти в каталоге с файлом .xsa, далее каталог с названием платформы, далее каталог bitstream. Если галки не было, то bit файл расположен в каталоге проекта, каталог .runs, каталог impl_1. Остальные поля оставить без изменений.
- Нажать кнопку Add и указать путь к файлу Zybo_hello.elf, который расположен по аналогии с FSBL в каталоге Debug. Остальные поля оставить без изменений.
- Нажать кнопку Create Image. Файл конфигурации создан.
Если полученный файл конфигурации прошить в плату, подключиться монитором com-порта к отладочном порту Zynq, то в мониторе com-порта можно увидеть следующее:
Xilinx First Stage Boot Loader
Release 2019.2 Jun 26 2020-09:16:22
Silicon Version 3.1
Boot mode is QSPI
SUCCESSFUL_HANDOFF
FSBL Status = 0x1
Hello World
11 Заключение
Вывод: SoC Zynq подходит для решения задач, которые не требуют высокой производительности от процессорного модуля. Идеальный случай, когда алгоритм обработки данных реализован в программируемой логике, а процессорный модуль используется для загрузки данных, или обработки исключительных ситуаций, реализация которых трудоемка в программируемой логике.
12 Используемые источники
- www.xilinx.com/support/documentation/data_sheets/ds190-Zynq-7000-Overview.pdf
- www.xilinx.com/support/documentation/selection-guides/zynq-7000-product-selection-guide.pdf
- www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf
- xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842485/Linux+AXI+Ethernet+driver
- xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841613/XAPP1082+2017.4+Performance
- www.xilinx.com/support/answers/73065.html