В этом примере показано, как использовать интерфейс AXI4-Stream, чтобы включить скоростную передачу данных между процессором и FPGA на оборудовании Zynq.
Чтобы запустить этот пример, необходимо было установить следующее программное и аппаратное обеспечение и настроить:
Пакет поддержки HDL Coder для платформы Xilinx Zynq
Пакет поддержки Embedded Coder для платформы Xilinx Zynq
Набор Проекта Xilinx Vivado, с поддерживаемой версией, перечисленной в Поддержке Языка HDL и Поддерживаемых Сторонних программах и Оборудовании
Zedboard
Чтобы установить Zedboard, отошлите к Набору оборудование Zynq и раздел инструментов в примере, Начинающем с Предназначением для Платформы Xilinx Zynq.
В этом примере показано, как к:
Смоделируйте алгоритм потоковой передачи с помощью упрощенного протокола потоковой передачи.
Сгенерируйте ядро IP HDL с интерфейсом AXI4-Stream.
Интегрируйте сгенерированное ядро IP в исходный проект Zedboard с контроллером DMA.
Используйте 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
алгоритм к упрощенному протоколу потоковой передачи, Допустимый сигнал должен быть добавлен. Чтобы добавить Допустимый сигнал в вашу модель, мы рекомендуем следующий шаблон моделирования:
Преобразуйте подсистему алгоритма в активированную подсистему.
Добавьте порт элемента управления вводом, 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-потоковой генерацией ядра IP можно опционально смоделировать другие управляющие сигналы потоковой передачи. Например, можно смоделировать сигнал противодавления, Готовый. Интерфейс AXI4-Stream связывается в основном/ведомом режиме, куда ведущее устройство отправляет данные в ведомое устройство. Готовый сигнал является сигналом противодавления с ведомого устройства на ведущее устройство, которое указывает, может ли ведомое устройство принять новые данные. Как показано в следующей схеме, Готовый сигнал утверждается, когда ведомое устройство может принять новые данные. Когда ведомое устройство больше не может принимать новые данные, ему нужен к de-assert Готовый сигнал. Когда ведущее устройство видит, что Готовый сигнал является deasserted, это останавливает передачу данных самое большее одна выборка позже. Этот демонстрационный допуск встроен в протокол.
Примечание: Эта схема иллюстрирует отношение между Данными, Допустимыми, и Готовыми сигналами согласно упрощенному протоколу потоковой передачи. Когда вы запускаете IP Core Generation
рабочий процесс, генератор кода добавляет модуль интерфейса потоковой передачи в ядре IP HDL, которое переводит упрощенный протокол в полный протокол потоковой передачи.
Например, можно использовать Готовый сигнал, когда вы используете блок FIFO, чтобы собрать систему координат входящих данных о потоковой передаче, которые затем обрабатываются с вашим алгоритмом. Во время обработки данных, вы deassert Готовый сигнал предотвратить далее входящие данные.
Затем мы запускаем 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.
Затем в 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.
Модель программного интерфейса сгенерирована в Задаче 4.2, Сгенерируйте Модель Программного интерфейса, как показано в следующем изображении.
Несмотря на то, что AXI4-облегченный драйвер автоматически сгенерирован в модели программного интерфейса, AXI4-потоковый блок драйверов не может быть автоматически сгенерирован. Причина состоит в том, что AXI4-потоковый блок драйверов ожидает быть соединенным с векторным портом на стороне программного обеспечения, но x_in_data порт DUT является скалярным портом.
1. Прежде чем вы сгенерируете код из модели программного интерфейса:
Добавьте AXI4-потоковые IIO блоки драйверов Записи Чтения и AXI4-потока IIO из Браузера Библиотеки Simulink-> Пакет поддержки Embedded Coder для библиотеки Xilinx Zynq Platform.
Используйте векторный источник данных, чтобы управлять x_in_data портом.
Соедините x_in_data порт с блоком драйверов.
Дважды щелкните по блоку 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:
В сгенерированной модели нажмите на панель Hardware и перейдите к настройкам Hardware, чтобы открыть диалоговое окно Configuration Parameter.
Выберите Solver и установите "Время остановки" на "inf".
От Аппаратной панели нажмите кнопку Monitor и Tune.
Щелкните по кнопке 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.