В этом примере показано, как использовать рабочий процесс аппаратного совместного проектирования для мигания светодиодов на различных частотах на Xilinx ® Zynq ® UltraScale + MPSoC.
Этот пример является пошаговым руководством, которое помогает вам использовать программное обеспечение HDL- Coder™ для генерации пользовательского HDL-IP-ядра, которое мигает светодиодами на Xilinx Zynq UltraScale + MPSoC ZCU102 оценочном наборе и показывает, как использовать Embedded Coder ® для генерации кода С, который запускается
Можно использовать MATLAB ® и Simulink ®, чтобы проектировать, моделировать и проверять свое приложение, выполнять сценарии what-if с помощью алгоритмов и оптимизировать параметры. Затем вы можете подготовить свой проект для аппаратной и программной реализации на Xilinx Zynq UltraScale + MPSoC, определив, какие системные элементы будут выполняться по программируемой логике, а какие - по Cortex-A53 ARM.
Используя управляемый рабочий процесс, показанный в этом примере, вы автоматически генерируете HDL-код для программируемой логики с помощью HDL Coder, генерируете C-код для процессора ARM с помощью Embedded Coder и реализуете проект на платформе Xilinx Zynq UltraScale + MPS oC.
В этом рабочем процессе вы выполняете следующие шаги:
Настройте оборудование и инструменты Xilinx Zynq UltraScale + MPSoC ZCU102.
Разделите ваш проект на аппаратные и программные реализации.
Сгенерируйте ядро IP HDL с помощью HDL Workflow Advisor.
Интегрирование IP-ядра в проект Xilinx Vivado и программирование оборудования Xilinx Zynq UltraScale + MPSoC.
Сгенерируйте модель программного интерфейса.
Сгенерируйте код С из модели программного интерфейса и запустите его на процессоре ARM Cortex-A53.
Настройки параметров и захват результатов от оборудования Zynq с помощью Режима external mode.
Xilinx Vivado Design Suite с поддерживаемой версией, перечисленной в документации HDL Coder
Набор для оценки ZCU102 Xilinx Zynq UltraScale + MPSoC
HDL Coder поддержки платформы Xilinx Zynq
Пакет поддержки Embedded Coder для платформы Xilinx Zynq
1. Настройте комплект для оценки ZCU102 Xilinx Zynq UltraScale + MPSoC, как показано на рисунке ниже. Для получения дополнительной информации о настройке ZCU102 оборудования см. документацию Xilinx.
1.1. Убедитесь, что SW6
переключатель установлен как показано на рисунке ниже, поэтому вы можете загрузить Linux с SD-карты.
1.2 Подключите компьютер к разъему USB UART ZCU102 с помощью кабеля Micro-USB. Убедитесь, что драйверы USB-устройств, например, для Silicon Labs CP210x USB - UART Bridge, установлены правильно. Если нет, ищите драйверы онлайн и устанавливайте их.
1.3 Подключите плату Xilinx Zynq UltraScale + MPSoC к компьютеру с помощью кабеля Ethernet.
2. Установите пакеты HDL Coder и Embedded Coder поддержки для платформы Xilinx Zynq, если еще нет.
2.1 На вкладке MATLAB Home в Раздел Environment Нажатия кнопки Дополнений > Управление Дополнений.
2.2 В Add-On Manager запустите процесс настройки оборудования, нажав кнопку настройки для пакета Embedded Coder Support Package for Xilinx Zynq Platform.
3. Убедитесь, что вы используете изображение карты SD, предоставляемый пакетом поддержки Embedded Coder для платформы Xilinx Zynq.
4. Настройте аппаратное соединение Zynq путем ввода следующей команды в командном окне MATLAB:
h = zynq
The zynq
функция регистрируется на оборудовании через COM-порт и запускает ifconfig
команда для получения IP-адреса платы. Эта функция также проверяет подключение Ethernet.
5. Вы можете опционально протестировать последовательное соединение с помощью следующего строения с помощью такой программы, как PuTTY™. Скорость передачи данных: 115200
; Биты данных: 8
; Стоп-биты: 1
; Четность: None
; Управление потоком: None
. Вы должны иметь возможность наблюдать журнал загрузки Linux на последовательной консоли при включении питания платы MPSoC. Перед использованием zynq
необходимо закрыть это последовательное соединение снова функция.
6. Настройте путь инструмента синтеза Xilinx Vivado с помощью следующей команды в командном окне MATLAB. Используйте собственный путь установки Vivado при запуске команды.
hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2019.1\bin\vivado.bat');
Первый шаг рабочего процесса совместного проектирования аппаратного и программного обеспечения Zynq - решить, какие части вашего проекта реализовать на программируемой логике, а какие - на процессоре ARM.
Сгруппируйте все блоки, которые вы хотите реализовать на программируемой логике, в атомарную подсистему. Эта атомарная подсистема является контуром вашего аппаратно-программного раздела. Все блоки внутри этой подсистемы будут реализованы на программируемой логике, а все блоки за пределами этой подсистемы будут работать на процессоре ARM.
В этом примере подсистема led_counter является оборудованием подсистемой. Он моделирует счетчик, который мигает светодиодами на плате FPGA. Два входных порта, Blink_frequency и Blink_direction, являются портами управления, которые определяют частоту и направление мигания светодиода. Все блоки за пределами led_counter подсистемы используются для реализации программного обеспечения.
В Simulink можно использовать блок Slider Gain или Manual Switch, чтобы настроить значения входа подсистемы оборудования. В встроенное программное обеспечение это означает, что процессор ARM управляет сгенерированным IP-ядром путем записи в доступные регистры интерфейса AXI. Выходной порт аппаратной подсистемы, светодиодный, соединяется с оборудованием светодиодного индикатора. Порт выхода, Read_Back, может использоваться, чтобы считать данные обратно в процессор.
open_system('hdlcoder_led_blinking');
Использование рабочего процесса генерации IP-ядра в HDL Workflow Advisor позволяет автоматически сгенерировать резкий и переиспользуемый модуль IP-ядра из модели Simulink. Сгенерированное IP-ядро предназначено для подключения к встраиваемому процессору на устройстве FPGA. HDL Coder генерирует HDL-код из блоков Simulink, а также генерирует HDL-код для логики интерфейса AXI, соединяющий IP-ядро со встраиваемым процессором. HDL Coder упаковывает все сгенерированные файлы в IP-папку ядра. Затем можно интегрировать сгенерированное IP-ядро с большим встроенным FPGA- проекта в окружение Xilinx Vivado.
1. Запустите рабочий процесс генерации ядра IP.
1.1. Откройте HDL Workflow Advisor из hdlcoder_led_blinking/led_counter
подсистема щелчком правой кнопкой мыши по led_counter
и выбор HDL-кода > HDL Workflow Advisor.
1.2. В задаче Set Target > Set Target Device and Synthesis Tool для рабочего процесса Target выберите IP Core Generation.
1.3. Для целевой платформы выберите Xilinx Zynq UltraScale + MPSoC ZCU102 Evaluation Kit. Если у вас нет этой опции, выберите Получить больше, чтобы открыть программу установки пакета поддержки. Для завершения установки выберите Xilinx Zynq Platform и следуйте инструкциям установщика пакета поддержки.
1.4. Нажмите Run This Task, чтобы запустить задачу Set Target Device and Synthesis Tool.
1.5 В задаче Set Target > Set Target Reference Design выберите Default system.
1.6. Щелкните Запустить эту задачу, чтобы запустить задачу Задать исходный проект целевого объекта.
2. Сконфигурируйте целевой интерфейс.
Сопоставьте каждый порт в DUT с одним из базовых IP-интерфейсов. В этом примере входные порты Blink_frequency и Blink_direction сопоставлены с интерфейсом AXI4-Lite, поэтому HDL Coder генерирует для них доступные регистры интерфейса AXI. Выходной порт светодиода сопоставлен с внешним интерфейсом, светодиодами общего назначения [0:7], который соединяется с оборудованием светодиодов на плате Zynq.
2.1 В задаче Set Target > Set Target Interface выберите AXI4-Lite для Blink_frequency, Blink_direction и Read_back.
2.2 Выберите светодиодные индикаторы общего назначения [0:7] для светодиодных индикаторов.
2.3 В задаче Set Target > Set Target Frequency выберите Target Frequency как 50 МГц.
3. Сгенерируйте ядро IP.
Чтобы сгенерировать ядро IP, щелкните правой кнопкой мыши задачу Generate RTL Code and IP Core и выберите Run to Selected Task.
4. Сгенерируйте и просмотрите отчет ядра IP.
После генерации пользовательского IP-ядра файлы IP-ядра находятся в папке ipcore в папке проекта. Пользовательский отчет IP-ядра HTML создается вместе с пользовательским ядром IP. Отчет описывает поведение и содержимое сгенерированного пользовательского IP-ядра.
В этой части рабочего процесса вы вставляете сгенерированное IP-ядро в встраиваемую систему исходного проекта, генерируете битовый поток FPGA и загружаете битовый поток на оборудование Zynq.
Этот исходный проект является предопределенным проектом Xilinx Vivado. Он содержит все элементы программного обеспечения Xilinx, необходимые для развертывания вашего проекта на платформе Zynq, за исключением пользовательского IP-ядра и встроенного программного обеспечения, которое вы генерируете.
1. Для интеграции со окружением Xilinx Vivado выберите задачу Create Project в разделе Встраиваемая Система Integration и нажмите Run This Task. Сгенерирован проект Xilinx Vivado с встроенным дизайном IP Integrator, а в диалоговом окне предусмотрена ссылка на проект. Вы можете опционально открыть проект, чтобы взглянуть.
2. Если у вас есть лицензия Embedded Coder, можно сгенерировать модель программного интерфейса в следующей задаче, Generate Software Interface Model. Детали модели интерфейса программного обеспечения объяснены в следующем разделе этого примера «Сгенерируйте модель интерфейса программного обеспечения».
3. Создайте битовый поток FPGA в задаче Build FPGA Bitstream. Убедитесь, что процесс сборки Запуска, внешне опция, проверена, поэтому инструмент синтеза Xilinx будет запускаться в отдельном процессе от MATLAB. Дождитесь завершения выполнения процесса инструмента синтеза во внешнем командном окне.
4. После генерации битового потока выберите задачу Program Target Device. Выберите метод Download for Programming, чтобы загрузить битовый поток FPGA на карту SD на плате Xilinx Zynq UltraScale + MPSoC, поэтому ваш проект будет автоматически перезагружен при цикле включения платы Zynq. щелкните Запустить эту задачу, чтобы запрограммировать оборудование Zynq.
После того, как вы программируете оборудование FPGA, светодиодный индикатор начинает мигать на вашей плате ZCU102 Xilinx Zynq UltraScale + MPSoC.
Затем вы сгенерируете код С для запуска на процессоре ARM, чтобы контролировать частоту и направление мигания светодиода.
В HDL Workflow Advisor, после генерации IP-ядра, Можно создать проект vivado на шаге 4.1, можно опционально сгенерировать модель программного интерфейса в задаче Встраиваемая Система Integration > Generate Software Interface Model.
Модель интерфейса программного обеспечения содержит часть вашего проекта, которая запускается в программном обеспечении. Он включает все блоки за пределами подсистемы HDL и заменяет подсистему HDL блоками драйверов AXI. Если у вас есть лицензия Embedded Coder, можно автоматически сгенерировать встраиваемые Коды С из модели интерфейса программного обеспечения, создать его и запустить исполняемый файл на Linux на процессоре ARM. Сгенерированное встроенное программное обеспечение включает код драйвера AXI, сгенерированный из блоков драйверов AXI, который управляет HDL-ядром IP.
Запустите задачу Generate Software Interface Model и увидите, что новая модель сгенерирована. Диалоговое окно задачи показывает ссылку на модель.
В модели сгенерированного программного обеспечения интерфейса подсистема «led_counter» заменяется блоками драйверов AXI, которые генерируют логику интерфейса между процессором ARM и FPGA.
В этой части рабочего процесса вы конфигурируете модель сгенерированного программного обеспечения интерфейса, автоматически генерируете встроенные Коды С и запускаете свою модель на процессоре ARM в оборудование Zynq в Режим external mode.
Когда вы разрабатываете прототипы и разрабатываете алгоритм, полезно контролировать и настраивать алгоритм во время его работы на оборудовании. Функция режима external mode в Simulink включает эту возможность. В этом режиме ваш алгоритм сначала развертывается на процессоре ARM в оборудование Zynq, а затем связывается с моделью Simulink на хост-компьютер через соединение Ethernet.
Главная роль модели Simulink - настроить и контролировать алгоритм, работающий на оборудовании. Поскольку процессор ARM соединяется с IP-ядром HDL через интерфейс AXI, можно использовать Режим external mode для настройки параметров и сбора данных из FPGA.
В сгенерированной модели щелкните на панели Hardware и перейдите в Hardware settings, чтобы открыть диалоговое окно Параметр Конфигурации.
Выберите решатель и установите «Stop Time» на «inf».
Выберите Аппаратная Реализация и установите значение «Feature set for selected hardware board» на «Embedded Coder Hardware Support Package».
В меню HARDWARE нажмите кнопку Monitor & Tune на панели инструментов модели, чтобы запустить модель на процессоре ARM в оборудовании ZCU102 Zynq UltraScale + MPSoC в режиме external mode. Embedded Coder строит модель, загружает исполняемый файл ARM на оборудование ZCU102 Xilinx Zynq UltraScale + MPSoC, выполняет его и соединяет модель с исполняемым файлом, работающим на оборудовании Zynq.
Дважды кликните блок Slider Gain. Измените значение коэффициента усиления ползунка и наблюдайте изменение частоты мигания светодиодного массива на оборудовании Zynq. Дважды кликните блок Manual Switch, чтобы изменить направление мигающих светодиодов.
Дважды кликните возможности, подключенную к порту Read_back выхода, и заметьте, что выходы данные IP-ядра FPGA захватываются и отправляются обратно в Осциллограф Simulink.
Когда вы завершили изменение параметров модели, нажмите кнопку Stop на модели.
В этом примере показано, как рабочий процесс совместного проектирования аппаратного и программного обеспечения помогает автоматизировать развертывание вашего проекта MATLAB и Simulink на Xilinx Zynq Ultrascale + MPSoC. Можно исследовать лучшие способы разбиения и развертывания проекта путем итерации через рабочий процесс.
Следующая схема показывает высокоуровневую картину рабочего процесса, через который вы прошли в этом примере. Для получения дополнительной информации о рабочем процессе совместного проектирования аппаратного и программного обеспечения см. документацию HDL Coder.