Начало работы с AXI4-потоковым интерфейсом в рабочем процессе Zynq

В этом примере показано, как использовать интерфейс AXI4-Stream, чтобы включить скоростную передачу данных между процессором и FPGA на оборудовании Zynq.

Прежде чем вы начнете

Чтобы запустить этот пример, необходимо было установить следующее программное и аппаратное обеспечение и настроить:

Чтобы установить Zedboard, отошлите к Набору оборудование Zynq и раздел инструментов в примере, Начинающем с Предназначением для Платформы Xilinx Zynq.

Введение

В этом примере показано, как к:

  1. Смоделируйте алгоритм потоковой передачи с помощью упрощенного протокола потоковой передачи.

  2. Сгенерируйте ядро IP HDL с интерфейсом AXI4-Stream.

  3. Интегрируйте сгенерированное ядро IP в исходный проект Zedboard с контроллером DMA.

  4. Используйте AXI4-потоковый блок драйверов, чтобы сгенерировать код С, который работает на процессоре 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 может также быть соединен с другим дюйм/с с интерфейсом AXI4-Stream, чтобы передать данные в FPGA.

Модель, передающая алгоритм потоком с упрощенным протоколом потоковой передачи

Предположим, что мы хотим развернуть простой симметричный КИХ-фильтр на 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 содержит данные (Данные) и управляющие сигналы, такие как данные, допустимые (Допустимый), (Готовое) противодавление, и контур данных (TLAST).

AXI4-потоковая функция генерации ядра IP требует, по крайней мере, чтобы Данные и Допустимые сигналы были смоделированы в DUT. Сигнал Данных является первичной полезной нагрузкой, чтобы отправить через интерфейс. Допустимый сигнал указывает, когда сигнал Данных допустим. Другие управляющие сигналы являются дополнительными.

Примечание: Для генерации ядра IP, Данные и Допустимый следуют упрощенному протоколу потоковой передачи. Вы не должны моделировать полный AXI4-потоковый протокол, который более сложен. HDL Coder автоматически генерирует модуль интерфейса потоковой передачи в ядре IP HDL, чтобы перевести упрощенный протокол потоковой передачи в полный AXI4-потоковый протокол. Как показано в изображении ниже, протокол прост: каждый раз, когда сигнал Данных допустим, Допустимый сигнал должен также утверждаться.

Так, для того, чтобы сопоставить sfir_fixed алгоритм к упрощенному протоколу потоковой передачи, Допустимый сигнал должен быть добавлен. Чтобы добавить Допустимый сигнал в вашу модель, мы рекомендуем следующий шаблон моделирования:

  1. Преобразуйте подсистему алгоритма в активированную подсистему.

  2. Добавьте порт элемента управления вводом, Valid_In, и порт элемента управления выводом, Valid_Out.

  3. Используйте 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-потоковой генерацией ядра IP можно опционально смоделировать другие управляющие сигналы потоковой передачи. Например, можно смоделировать сигнал противодавления, Готовый. Интерфейс AXI4-Stream связывается в основном/ведомом режиме, куда ведущее устройство отправляет данные в ведомое устройство. Готовый сигнал является сигналом противодавления с ведомого устройства на ведущее устройство, которое указывает, может ли ведомое устройство принять новые данные. Как показано в следующей схеме, Готовый сигнал утверждается, когда ведомое устройство может принять новые данные. Когда ведомое устройство больше не может принимать новые данные, ему нужен к de-assert Готовый сигнал. Когда ведущее устройство видит, что Готовый сигнал является deasserted, это останавливает передачу данных самое большее одна выборка позже. Этот демонстрационный допуск встроен в протокол.

Примечание: Эта схема иллюстрирует отношение между Данными, Допустимыми, и Готовыми сигналами согласно упрощенному протоколу потоковой передачи. Когда вы запускаете IP Core Generation рабочий процесс, генератор кода добавляет модуль интерфейса потоковой передачи в ядре IP HDL, которое переводит упрощенный протокол в полный протокол потоковой передачи.

Например, можно использовать Готовый сигнал, когда вы используете блок FIFO, чтобы собрать систему координат входящих данных о потоковой передаче, которые затем обрабатываются с вашим алгоритмом. Во время обработки данных, вы deassert Готовый сигнал предотвратить далее входящие данные.

Сгенерируйте ядро IP HDL с AXI4-потоковым Интерфейсом

Затем мы запускаем HDL Workflow Advisor и используем рабочий процесс элемента кода аппаратного программного обеспечения Zynq, чтобы развернуть этот проект на оборудовании Zynq. Для более подробного пошагового руководства можно обратиться к Началу работы с Предназначением для примера Платформы Xilinx Zynq.

1. Настройте инструмент path синтеза Xilinx Vivado используя следующую команду в окне команды MATLAB. Используйте свой собственный путь к установке Vivado, когда вы запустите команду.

  hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2019.1\bin\vivado.bat')

2. Запустите HDL Workflow Advisor с подсистемы DUT, hdlcoder_sfir_fixed_stream/DUT. Целевые интерфейсные настройки уже сохранены в этой модели в качестве примера, таким образом, настройки в Задаче 1.1 и 1.2 автоматически загружаются. Чтобы узнать больше о сохранении цели соединяют интерфейсом с настройками в модели, можно обратиться к Сохранять Настройкам Целевого компьютера в примере Модели.

В Задаче 1.1, Генерация Ядра IP выбрана для Целевого рабочего процесса, и Zedboard выбран для Целевой платформы. В Задаче 1.2, система По умолчанию с интерфейсом AXI4-Stream выбрана для Исходного проекта, и таблица интерфейса Целевой платформы загружается как показано в следующем изображении. Порты информационного канала, x_in_data, x_in_valid, y_out_data, и y_out_valid, сопоставлены с AXI4-потоковыми интерфейсами, и порты параметра управления, такие как h_in1, сопоставлены с интерфейсом AXI4-Lite.

Интерфейс AXI4-Stream связывается в основном/ведомом режиме, куда ведущее устройство отправляет данные в ведомое устройство. Поэтому, если порт данных является входным портом, присвойте его интерфейсу AXI4-Stream Slave, и если порт данных является выходным портом, присвойте его интерфейсу AXI4-Stream Master.

3. Щелкните правой кнопкой по Task 3.2, Сгенерируйте Код RTL и Ядро IP, и выберите Run to Selected Task, чтобы сгенерировать ядро IP. Можно найти отображение адресов регистра и другую документацию для ядра IP в сгенерированном Отчете Ядра IP.

Интегрируйте IP в AXI4-поток совместимый исходный проект

Затем в HDL Workflow Advisor, мы запускаем задачи Интегрирования Встраиваемой системы развернуть сгенерированное ядро IP HDL на оборудовании Zynq.

1. Запустите Задачу 4.1, Создайте Проект. Эта задача вставляет сгенерированное ядро IP в систему По умолчанию с исходным проектом интерфейса AXI4-Stream. Этот исходный проект содержит Xilinx IP DMA AXI, чтобы обработать процессор к потоковой передаче данных о матрице FPGA. Как показано в первой схеме, или в отчете ядра IP, данные отправляются от системы обработки ARM, через контроллер DMA и интерфейс AXI4-Stream, к сгенерированному КИХ-ядру IP фильтра HDL. Выход ядра IP фильтра затем передают обратно в систему обработки.

2. Опционально щелкните по ссылке в панели Результата, чтобы открыть сгенерированный проект Vivado. В инструменте Vivado нажмите Open Block Design, чтобы просмотреть схему проекта Zynq, которая включает сгенерированное ядро IP HDL, контроллер DMA AXI и процессор.

3. В HDL Workflow Advisor запустите остальную часть задач сгенерировать модель программного интерфейса, и создать и загрузить поток битов FPGA.

Сгенерируйте исполняемый файл ARM Используя AXI4-потоковый Блок драйверов

Модель программного интерфейса сгенерирована в Задаче 4.2, Сгенерируйте Модель Программного интерфейса, как показано в следующем изображении.

Несмотря на то, что AXI4-облегченный драйвер автоматически сгенерирован в модели программного интерфейса, AXI4-потоковый блок драйверов не может быть автоматически сгенерирован. Причина состоит в том, что AXI4-потоковый блок драйверов ожидает быть соединенным с векторным портом на стороне программного обеспечения, но x_in_data порт DUT является скалярным портом.

1. Прежде чем вы сгенерируете код из модели программного интерфейса:

  1. Добавьте AXI4-потоковые IIO блоки драйверов Записи Чтения и AXI4-потока IIO из Браузера Библиотеки Simulink-> Пакет поддержки Embedded Coder для библиотеки Xilinx Zynq Platform.

  2. Используйте векторный источник данных, чтобы управлять x_in_data портом.

  3. Соедините x_in_data порт с блоком драйверов.

  4. Дважды щелкните по блоку AXI4-Stream IIO Write и установите Тайм-аут на 0 вместо inf. Это как показано ниже.

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

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

7. Приоритет блока AXI4-Stream IIO Read не должен быть установлен. Установка приоритета для блока записи к 1 один уже гарантирует, что запись происходит, прежде чем считано.

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

2. Сконфигурируйте и создайте модель программного интерфейса для режима external mode:

  1. В сгенерированной модели нажмите на панель Hardware и перейдите к настройкам Hardware, чтобы открыть диалоговое окно Configuration Parameter.

  2. Выберите Solver и установите "Время остановки" на "inf".

  3. От Аппаратной панели нажмите кнопку Monitor и Tune.

  4. Щелкните по кнопке Run на панели инструментов модели. Embedded Coder создает модель, загружает исполняемый файл ARM на оборудование Zedboard, выполняет его и соединяет модель с исполняемым файлом, работающим на оборудовании Zedboard.

3. Теперь оба аппаратные и программные части проекта работают на оборудовании Zynq. Процессор ARM отправляет исходные данные в IP FPGA через контроллер DMA и интерфейс AXI4-Stream. Процессор ARM получает данные о результате фильтра из IP FPGA и отправляет данные о результате в Simulink через режим external mode. Наблюдайте выходной сигнал КИХ-ядра IP фильтра от оборудования Zynq на Time Scope y_out.

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