В этом примере показано, как использовать рабочий процесс совместного проектирования аппаратного и программного обеспечения для мигания светодиодов на различных частотах в наборе оценки ZC702 Xilinx ® Zynq ®.
Этот пример является пошаговым руководством, которое помогает вам использовать HDL- Coder™ для генерации пользовательского HDL-IP-ядра, которое мигает светодиодами на наборе для оценки ZC702 Xilinx Zynq и показывает, как использовать Embedded Coder ® для генерации кода С, который запускается на процессоре ARM ® для управления частотой мигания светодиода.
Можно использовать MATLAB ® и Simulink ®, чтобы проектировать, моделировать и проверять свое приложение, выполнять сценарии what-if с помощью алгоритмов и оптимизировать параметры. Затем можно подготовить проект к оборудованию и реализации программного обеспечения на Zynq-7000 AP SoC, определив, какие системные элементы будут выполняться программируемой логикой, а какие системные элементы будут запускаться на Cortex-A9 ARM.
Используя управляемый рабочий процесс, показанный в этом примере, вы автоматически генерируете HDL-код для программируемой логики с помощью HDL Coder, генерируете Код С для ARM с помощью Embedded Coder и реализуете проект на платформе Xilinx Zynq Platform.
В этом рабочем процессе вы выполняете следующие шаги:
Настройте оборудование и инструменты Zynq.
Разделите ваш проект на аппаратные и программные реализации.
Сгенерируйте ядро IP HDL с помощью HDL Workflow Advisor.
Интегрирование IP-ядра в проект Xilinx Vivado и программирование оборудования Zynq.
Сгенерируйте модель программного интерфейса.
Сгенерируйте код С из модели программного интерфейса и запустите его на процессоре ARM Cortex-A9.
Настройки параметров и захват результатов от оборудования Zynq с помощью Режима external mode.
Для получения дополнительной информации см. другие более расширенные примеры и документацию HDL Coder и Embedded Coder.
Xilinx Vivado Design Suite с поддерживаемой версией, перечисленной в документации HDL Coder
Набор Zynq-7000 оценки Xilinx ZC702 SoC
HDL Coder поддержки платформы Xilinx Zynq
Пакет поддержки Embedded Coder для платформы Xilinx Zynq
1. Настройте комплект для оценки ZC702 Xilinx Zynq, как показано на рисунке ниже. Для получения дополнительной информации о настройке ZC702 оборудования см. документацию Xilinx.
1.1. Убедитесь, что SW16
переключатель установлен как показано на рисунке ниже, поэтому вы можете загрузить Linux с SD-карты.
1.2. Убедитесь, что SW10
переключатель (вход цепи JTAG выберите двухпозиционный DIP переключатель) установлен как показано на рисунке ниже, поэтому можно использовать интерфейс Digilent USB-to-JTAG (U23). Положение 1: Off; Положение 2: Вкл.
1.3 Подключите компьютер к разъему USB UART с помощью кабеля Micro-USB. Убедитесь, что драйверы USB-устройств, например, для Silicon Labs CP210x USB - UART Bridge, установлены правильно. Если нет, ищите драйверы онлайн и устанавливайте их.
1.4 Подключите компьютер и плату Zynq с помощью кабеля Ethernet.
2. Установите пакеты HDL Coder и Embedded Coder поддержки для платформы Xilinx Zynq, если еще нет. Чтобы запустить инсталлятор, перейдите на панель инструментов MATLAB и нажмите Дополнения > Get Аппаратной поддержки Packages. Для получения дополнительной информации см. документацию по установке пакета поддержки.
3. Убедитесь, что вы используете изображение карты SD, предоставляемый пакетом поддержки Embedded Coder для платформы Xilinx Zynq. Если необходимо обновить изображение карты SD, обратитесь к разделу Оборудования Setup этого документа.
4. Настройте аппаратное соединение Zynq путем ввода следующей команды в командном окне MATLAB:
h = zynq
The zynq
функция регистрируется на оборудовании через COM-порт и запускает ifconfig
команда для получения IP-адреса платы. Эта функция также проверяет подключение Ethernet.
5. Вы можете опционально протестировать последовательное соединение с помощью следующего строения с помощью такой программы, как PuTTY™. Скорость передачи данных: 115200
; Биты данных: 8
; Стоп-биты: 1
; Четность: None
; Управление потоком: None
. Вы должны иметь возможность наблюдать журнал загрузки Linux на последовательной консоли при включении питания платы Zynq. Перед использованием 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 ZC702 комплект для оценки. Если у вас нет этой опции, выберите Получить больше, чтобы открыть программу установки пакета поддержки. Для завершения установки выберите 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 на плате Zynq, поэтому ваш проект будет автоматически перезагружен при цикле включения платы Zynq. щелкните Запустить эту задачу, чтобы запрограммировать оборудование Zynq.
После того, как вы программируете оборудование FPGA, светодиод начинает мигать на вашей плате Zynq.
Затем вы сгенерируете код С для запуска на процессоре ARM, чтобы контролировать частоту и направление мигания светодиода.
В HDL Workflow Advisor, после того, как вы сгенерируете IP-ядро и вставляете его в исходный проект Vivado, можно опционально сгенерировать модель программного интерфейса в задаче Встраиваемой системы Интегрирования > 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».
На панели HARDWARE нажмите кнопку Monitor & Tune на панели инструментов модели, чтобы запустить модель на процессоре ARM в оборудовании Zynq ZC702 в режиме external mode. Embedded Coder строит модель, загружает исполняемый файл ARM на оборудование Zynq ZC702, выполняет его и соединяет модель с исполняемым файлом, работающим на оборудовании Zynq ZC702.
Дважды кликните блок Slider Gain. Измените значение коэффициента усиления ползунка и наблюдайте изменение частоты мигания светодиодного массива на оборудовании Zynq ZC702. Дважды кликните блок Manual Switch, чтобы изменить направление мигающих светодиодов.
Дважды кликните возможности, подключенную к порту Read_back выхода, и заметьте, что выходы данные IP-ядра FPGA захватываются и отправляются обратно в Осциллограф Simulink.
Когда вы завершили изменение параметров модели, нажмите кнопку Stop на модели. Заметьте, что системное командное окно, открытое на предыдущем шаге, указывает, что модель остановлена. На данной точке можно закрыть системное командное окно.
В этом примере показано, как рабочий процесс совместного проектирования аппаратного и программного обеспечения помогает автоматизировать развертывание вашего проекта MATLAB и Simulink на Zynq-7000 All Programmable SoC. Можно исследовать лучшие способы разбиения и развертывания проекта путем итерации через рабочий процесс.
Следующая схема показывает высокоуровневую картину рабочего процесса, через который вы прошли в этом примере. Для получения дополнительной информации о рабочем процессе совместного проектирования аппаратного и программного обеспечения см. документацию HDL Coder.