В этом примере показано, как использовать интерфейс AXI4-Stream для высокоскоростной передачи данных между процессором и FPGA на оборудовании Zynq.
Для выполнения этого примера необходимо установить и настроить следующее программное и аппаратное обеспечение:
Пакет поддержки кодера HDL для платформы Xilinx Zynq
Пакет поддержки встроенного кодера для платформы Xilinx Zynq
Xilinx Vivado Design Suite с поддерживаемой версией, указанной в документе Поддержка языка HDL и Поддерживаемые сторонние инструменты и оборудование
Zedboard
Для настройки платы Zedboard см. раздел Настройка оборудования и инструментов Zynq в примере Начало работы с платформой Targeting Xilinx Zynq.
В этом примере показано, как:
Моделирование алгоритма потоковой передачи с использованием упрощенного протокола потоковой передачи.
Создайте ядро IP HDL с AXI4-Stream интерфейсом.
Интеграция сгенерированного IP-ядра в эталонную конструкцию Zedboard с контроллером DMA.
Используйте блок драйвера AXI4-Stream для генерации кода C, который выполняется на процессоре ARM.

На рисунке выше представлена высокоуровневая схема архитектуры, которая показывает потоковую передачу данных между процессором и фабрикой FPGA на платформе Zynq. Обычно интерфейс AXI4-Stream используется вместе с контроллером DMA для передачи большого количества данных от процессора в FPGA. Данные обычно представлены в виде векторных данных на стороне программного обеспечения. Контроллер DMA считывает векторные данные из памяти и «направляет» их в IP FPGA через интерфейс AXI4-Stream. Процесс «потоковой передачи» отправляет один элемент данных на выборку, что означает, что путь данных алгоритма потоковой передачи в IP FPGA использует скалярный тип данных.
IP FPGA может также включать в себя интерфейс AXI4-Lite для управляющих сигналов или настройки параметров. По сравнению с AXI4-Lite интерфейсом AXI4-Stream интерфейс передает данные гораздо быстрее, что делает его более подходящим для пути передачи данных алгоритма.
Помимо подключения к процессору, IP-адрес FPGA с AXI4-Stream интерфейсом также может быть подключен к другим IP-адресам с AXI4-Stream интерфейсом для передачи данных внутри FPGA.
Предположим, мы хотим развернуть простой симметричный фильтр FIR на Zynq. Мы хотим реализовать фильтр на FPGA. Процессор ARM генерирует исходные данные для их передачи в FPGA через интерфейс AXI4-Stream.
Начнем с sfir_fixed модель.
open_system('sfir_fixed') set_param('sfir_fixed', 'SimulationCommand', 'Update')

Обратите внимание, что путь данных этой модели (от x_in до y_out) - это обработка скалярных входных данных, что подходит для потокового интерфейса.
Чтобы обеспечить передачу данных из программного обеспечения в алгоритм фильтрации, необходимо сопоставить порты пути данных с интерфейсом AXI4-Stream. Интерфейс AXI4-Stream содержит данные (Data) и управляющие сигналы, такие как действительные данные (Valid), обратное давление (Ready) и граница данных (TLAST).
Функция генерации ядра IP AXI4-Stream требует, по крайней мере, моделирования сигналов Data и Valid в DUT. Сигнал Data является основной полезной нагрузкой для передачи через интерфейс. Сигнал Valid указывает, когда сигнал Data является действительным. Другие управляющие сигналы являются необязательными.
Примечание.Для генерации IP-ядра, Data и Valid следуют упрощенному потоковому протоколу. Вам не нужно моделировать полный протокол AXI4-Stream, что сложнее. Кодер HDL автоматически генерирует модуль потокового интерфейса в IP-ядре HDL для преобразования упрощенного потокового протокола в протокол полного AXI4-Stream. Как показано на рисунке ниже, протокол прост: всякий раз, когда сигнал Data является действительным, также должен быть установлен сигнал Valid.

Итак, для того, чтобы отобразить sfir_fixed к упрощенному протоколу потоковой передачи необходимо добавить действительный сигнал. Чтобы добавить в модель действительный сигнал, рекомендуется использовать следующий шаблон моделирования:
Преобразуйте подсистему алгоритма в подсистему с включенной функцией.
Добавьте входной порт управления, Valid_Inи выходной управляющий порт, Valid_Out.
Использовать Valid_In для управления портом включения подсистемы алгоритма и Valid_Out.

В этом шаблоне как входной потоковый канал, так и выходной потоковый канал следуют упрощенному потоковому протоколу.
Теперь рассмотрим пример модели.
open_system('hdlcoder_sfir_fixed_stream');

Подсистема DUT - это аппаратная подсистема, предназначенная для матрицы FPGA. Внутри этой подсистемы symmetric_fir подсистема представляет алгоритм фильтрации. Порты ввода, x_in_data и x_in_valid, а также порты вывода, y_out_data и y_out_valid, являются портами пути данных фильтра. Другие входные порты, такие как h_in1, являются управляющими портами, которые настраивают параметры фильтра.
Модель следует шаблону моделирования для упрощенного потокового протокола. Подсистема symmetric_fir является включенной подсистемой. Входной управляющий сигнал, x_in_valid, управляет портом разрешения подсистемы symmetric_fir, а также управляет выходным управляющим сигналом, y_out_valid.
С помощью AXI4-Stream генерации ядра IP можно дополнительно моделировать другие сигналы управления потоковой передачей. Например, можно смоделировать сигнал противодавления «Готово». Интерфейс AXI4-Stream осуществляет связь в режиме ведущий/ведомый, где ведущее устройство передает данные ведомому устройству. Сигнал готовности - это сигнал противодавления от ведомого устройства к ведущему устройству, который указывает, может ли ведомое устройство принимать новые данные. Как показано на следующей диаграмме, сигнал Ready устанавливается, когда ведомое устройство может принимать новые данные. Когда ведомое устройство больше не может принимать новые данные, оно должно отменить передачу сигнала Ready. Когда ведущее устройство видит, что сигнал Ready отклонен, оно останавливает передачу данных максимум на одну выборку позже. Этот пробный допуск встроен в протокол.
Примечание.Эта диаграмма иллюстрирует взаимосвязь между сигналами Data, Valid и Ready в соответствии с упрощенным протоколом потоковой передачи. При запуске IP Core Generation , генератор кода добавляет модуль потокового интерфейса в ядро IP HDL, который преобразует упрощенный протокол в полный потоковый протокол.

Например, можно использовать сигнал Ready при использовании блока FIFO для сбора кадра входящих потоковых данных, который затем обрабатывается с помощью алгоритма. Во время обработки данных вы отменяете передачу сигнала Ready, чтобы предотвратить дальнейшее поступление данных.
Затем мы запускаем мастер рабочего процесса HDL и используем рабочий процесс совместного проектирования аппаратного и программного обеспечения Zynq для развертывания этого проекта на оборудовании Zynq. Более подробное пошаговое руководство см. в примере Начало работы с платформой Targeting Xilinx Zynq.
1. Настройте траекторию инструмента синтеза Xilinx Vivado с помощью следующей команды в окне команды MATLAB. При выполнении команды используйте собственный путь установки Vivado.
hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2019.1\bin\vivado.bat')2. Запустите помощник по рабочим процессам HDL из подсистемы DUT, hdlcoder_sfir_fixed_stream/DUT. Настройки целевого интерфейса уже сохранены в этой модели, поэтому настройки в заданиях 1.1 и 1.2 загружаются автоматически. Дополнительные сведения о сохранении настроек целевого интерфейса в модели см. в разделе Сохранение настроек целевого оборудования в примере модели.
В задаче 1.1 для целевого рабочего процесса выбирается поколение IP Core, а для целевой платформы - Zedboard. В задаче 1.2 для эталонного проектирования выбрана система по умолчанию с AXI4-Stream интерфейсом, и загружена таблица интерфейса целевой платформы, как показано на следующем рисунке. Порты пути данных, x_in_data, x_in_valid, y_out_data и y_out_valid, сопоставляются интерфейсам AXI4-Stream, а порты управляющих параметров, такие как h_in1, сопоставляются интерфейсу AXI4-Lite.

Интерфейс AXI4-Stream осуществляет связь в режиме ведущий/ведомый, где ведущее устройство передает данные ведомому устройству. Поэтому, если порт данных является портом ввода, назначьте его интерфейсу AXI4-Stream Slave, а если порт данных является портом вывода, назначьте его интерфейсу AXI4-Stream Master.
3. Щелкните правой кнопкой мыши Задание 3.2, Создать код RTL и ядро IP и выберите Выполнить до выбранного задания, чтобы создать ядро IP. Сопоставление адресов регистров и другую документацию по IP-ядру можно найти в созданном отчете по IP-ядру.
Затем в помощнике по рабочим процессам HDL мы выполняем задачи интеграции встроенных систем для развертывания созданного IP-ядра HDL на оборудовании Zynq.
1. Запустите задачу 4.1 «Создание проекта». Эта задача вставляет сгенерированное ядро IP в систему по умолчанию с AXI4-Stream эталонным дизайном интерфейса. Эта эталонная конструкция содержит Xilinx AXI DMA IP для обработки потоковой передачи данных процессора на фабрику FPGA. Как показано на первой диаграмме или в отчете о ядре IP, данные передаются из системы обработки ARM через контроллер DMA и интерфейс AXI4-Stream в сформированное ядро IP фильтра FIR HDL. Выходной сигнал IP-ядра фильтра затем отправляется обратно в систему обработки.
2. При необходимости щелкните ссылку на панели «Результат», чтобы открыть созданный проект Vivado. В инструменте Vivado щелкните Открыть дизайн блоков (Open Block Design), чтобы просмотреть схему проектирования Zynq, которая включает сгенерированное IP-ядро HDL, контроллер AXI DMA и процессор.

3. В помощнике по рабочим процессам HDL выполните остальные задачи для создания модели интерфейса программного обеспечения, а также создайте и загрузите битовый поток FPGA.
Модель интерфейса программного обеспечения генерируется в задаче 4.2 «Создание модели интерфейса программного обеспечения», как показано на следующем рисунке.

Хотя драйвер AXI4-Lite автоматически генерируется в модели интерфейса программного обеспечения, блок драйвера AXI4-Stream не может быть сгенерирован автоматически. Причина в том, что блок драйвера AXI4-Stream ожидает подключения к векторному порту на стороне программного обеспечения, но x_in_data порт DUT является скалярным портом.
1. Перед созданием кода из модели интерфейса программного обеспечения:
Добавьте, что Прочитанный AXI4-поток IIO и AXI4-поток IIO Пишут блоки водителя от Браузера Библиотеки Simulink-> Вложенный Пакет Поддержки Кодера для библиотеки Платформы Xilinx Zynq.
Используйте векторный источник данных для управления портом x_in_data.
Подключите порт x_in_data к блоку драйвера.
Дважды щелкните по AXI4-потоку IIO, Пишут блок и устанавливают Перерыв в 0 вместо inf. Это как показано ниже.

5. Установите приоритет AXI4-потока IIO, Пишут блок 1, чтобы удостовериться, что пишут, происходит, прежде чем прочитано. Чтобы задать приоритет, щелкните правой кнопкой мыши блок и откройте свойства, установите приоритет равным 1. Это показано ниже.

6. Теперь дважды щелкните на AXI4-потоке IIO по Прочитанному блоку и установите тип телосложения в 100, Типовое время к Ts и Timeout к 10. Это показано ниже.

7. Приоритет AXI4-потока IIO Прочитанный блок не должен быть установлен. Установка для одного блока записи приоритета 1 уже гарантирует, что запись произойдет перед чтением.
В этом примере приводится обновленная модель интерфейса программного обеспечения: hdlcoder_sfir_fixed_stream_sw.slx. Векторный источник данных с 100 элементами данных используется в этой модели и связан с блоком водителя AXI4-потока DMA. Это означает, что для каждого времени выборки процессора контроллер DMA будет передавать 100 32-битных выборок данных в ядро IP ЛПВП через интерфейс AXI4-Stream и принимать 100 32-битных выборок потоковых данных.


2. Сконфигурируйте и создайте модель интерфейса программного обеспечения для внешнего режима:
В созданной модели щелкните панель Оборудование (Hardware) и перейдите в раздел Параметры оборудования (Hardware settings), чтобы открыть диалоговое окно Параметр конфигурации (Configuration Parameter).
Выберите Решатель и установите для параметра «Stop Time» значение «inf».
На панели «Оборудование» нажмите кнопку «Монитор и настройка».
Нажмите кнопку «Выполнить» на панели инструментов модели. Embedded Coder создает модель, загружает исполняемый файл ARM на оборудование Zedboard, выполняет его и подключает модель к исполняемому файлу, работающему на оборудовании Zedboard.
3. Теперь как аппаратные, так и программные части проекта работают на аппаратном обеспечении Zynq. Процессор ARM посылает исходные данные в IP FPGA через контроллер DMA и интерфейс AXI4-Stream. Процессор ARM получает данные результата фильтрации от IP FPGA и отправляет данные результата в Simulink через внешний режим. Проверьте выходные данные IP-ядра фильтра FIR от аппаратных средств Zynq на y_out временной области.

4. Настройте параметры фильтра FIR в модели интерфейса программного обеспечения и проверьте, как изменяется выходной сигнал фильтра FIR при настройке параметров. Значения параметров передаются в аппаратные средства Zynq через внешний режим и интерфейс AXI4-Lite.

