Выполнение аудиофильтра с несколькими AXI4-Stream каналами на ZedBoard

Этот пример показов, как смоделировать аудиосистему с несколькими каналами AXI4-Stream и развернуть ее на ZedBoard™ с помощью аудиосистемы исходного проекта.

Введение

В этом примере вы моделируете программируемый аудиофильтр со спектрограммой, используя несколько каналов AXI4-Stream и расширенные сигналы AXI4-Stream Ready и TLAST. Один AXI4-Stream канал передает данные между фильтром и аудиокодеком. Другой AXI4-Stream канал взаимодействует с системой обработки для программирования коэффициентов фильтрации и передачи данных спектрограммы на хост-компьютер для анализа.

Затем можно запустить IP Core Generation рабочий процесс для генерации HDL-ядра IP и развертывания алгоритма на ZedBoard с помощью аудио исходного проекта.

Архитектура системы

Этот рисунок показывает архитектуру системы высокого уровня.

IP Аудиокодека настраивают аудиокодек и передают аудиоданные между ZedBoard и аудиокодеком. Audio Processing IP, сгенерированный HDL- Coder™, выполняет фильтрацию и спектральный анализ. IP-адреса DMA передают AXI4-Stream данные между системой обработки и FPGA. Данные потока, переданные от системы обработки через MM2S DMA IP, программируют коэффициенты фильтра на FPGA. Данные потока, полученные системой обработки через S2MM IP DMA, содержат данные спектрограммы, вычисленные на FPGA. Система обработки также конфигурирует весовую кривую для спектрального анализа с помощью интерфейса AXI4-Lite.

Необходимые условия

Этот пример расширяет аудиофильтр в примере live входа, чтобы использовать несколько потоковых каналов. Сведения о примере использования одного потокового канала см. в разделе Выполнение аудиофильтра на Live Audio Input с использованием платы Zynq.

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

Для настройки платы ZedBoard см. раздел Set up Zynq hardware and tools в примере Начало работы with Targeting Xilinx Zynq Platform. Подключите звуковой вход от мобильного или MP3 проигрывателя к разъему LINE IN и наушникам или динамикам к разъему HPH OUT на ZedBoard, как показано ниже.

Моделируйте алгоритм обработки аудио

Откройте модель hdlcoder_audio_filter_multistream.

open_system('hdlcoder_audio_filter_multistream')
set_param('hdlcoder_audio_filter_multistream', 'SimulationCommand', 'Update')

Модель содержит подсистему DUT для обработки звука, исходный и приемный блоки для симуляции аудио, и модели объекта управления для DMA, которые передают потоковые данные между системой обработки и FPGA.

Факторы о скорости

Для аудиоприложений, работающих на FPGA, тактовая частота FPGA в несколько раз быстрее, чем частота дискретизации аудио. Отношение тактовой частоты FPGA к скорости выборки аудио данных является коэффициентом избыточной дискретизации. В этом примере коэффициент избыточной дискретизации моделируется с помощью блоков Repeat и Upsample.

Моделирование вашего проекта с тактовой частотой FPGA позволяет вам оптимизировать использование ресурсов на целевой аппаратной платформе, используя циклы простоя и повторно используя различные компоненты. Звуковое приложение, проиллюстрированное в этом примере, использует скорость дискретизации аудио 48kHz и тактовую частоту FPGA 96MHz. Коэффициент Избыточной дискретизации в этом случае 2000. Такое большое значение коэффициента Избыточной дискретизации значительно замедляет симуляцию Simulink.

Чтобы уменьшить время симуляции, вместо использования настройки коэффициента избыточной дискретизации, можно смоделировать проект с минимальным коэффициентом избыточной дискретизации, который требуется проекту. Минимальный необходимый коэффициент избыточной дискретизации для проекта может быть определен длиной звукового фильтра, которая 1001. Это значение уменьшает время симуляции вдвое и обеспечивает достаточные циклы простоя между выборками данных для логики последовательного фильтра.

Аудиофильтр

Внутри подсистемы DUT конечной импульсной характеристики фильтр обрабатывает данные из канала AXI4-Stream аудиокодека. Коэффициенты фильтра генерируются в MATLAB ® и программируются с помощью второго интерфейса AXI4-Stream, который взаимодействует с системой обработки. Отфильтрованный аудио выход передается обратно в аудиокодек.

Аудиофильтр является полностью последовательной реализацией конечной импульсной характеристики. Эта структура фильтра лучше всего подходит для аудио приложений, которые требуют большого коэффициента избыточной дискретизации, потому что фильтр использует операцию умножения накопления (MAC) для каждого канала. Фильтр также использует блоки ОЗУ, чтобы реализовать линию задержки данных и источник коэффициентов. Эта реализация экономит область, избегая использования высокоупорядоченных фильтров с высокой логикой среза.

Спектральный анализатор

Аудиосигнал подается в анализатор спектра после прохождения через конечную импульсную характеристику фильтр. Спектральный анализатор вычисляет БПФ фильтрованного сигнала, применяет функцию взвешивания и преобразует результат в дБм. Можно запрограммировать тип взвешивания, которое должно выполняться с помощью интерфейса AXI4-Lite, например, No-взвешивание, A-взвешивание, C-взвешивание или K-взвешивание. Фактические функции взвешивания реализуются с помощью интерполяционных таблиц, которые были сгенерированы при помощи функции Audio Toolbox™ weightingFilter.

Моделирование AXI4-Stream интерфейсов

Модель содержит два AXI4-Stream интерфейса. Один AXI4-Stream inteface взаимодействует с аудиокодеком. Другой AXI4-Stream интерфейс взаимодействует с системой обработки через DMA. Интерфейс аудиокодека требует только Data и Valid сигналы. Интерфейс DMA, с другой стороны, дополнительно использует Ready и TLAST сигналы протокола AXI4-Stream.

Чтобы узнать больше о сигналах, используемых в AXI4-Stream моделировании, смотрите Проект for AXI4-Stream Interface Generation.

Сигнал готовности

В AXI4-Stream интерфейсе вы используете Ready сигнал для подачи или ответа на задние давления. Модель использует Ready сигнал по главному каналу AXI4-Stream от FPGA в систему обработки для ответа на обратные давления от DMA. Когда нижестоящий DMA не может получить больше выборок спектрограмм, он отменяет вход Ready сигнал на AXI4-Stream канале Master. Чтобы убедиться, что выборки спектрограммы не сброшены, модель буферизует данные в FIFO до Ready заявлен сигнал, указывающий, что DMA готов снова принять выборки.

Канал AXI4-Stream Slave от системы обработки к FPGA не должен применять обратные давления, и, следовательно, его Ready сигнал всегда задается. Аудиокодек не обрабатывает назад давление и не использует свои Ready сигнал по любому каналу. Чтобы узнать больше о Ready сигнал в AXI4-Stream моделировании, см. Сигнал готовности (необязательно).

Сигнал TLAST

The TLAST сигнал используется для указания последней выборки системы координат. Модель использует TLAST сигнал на AXI4-Stream канале Slave как индикатор того, что он получил полный набор коэффициентов фильтра. На канале AXI4-Stream Master TLAST сигнал используется для указания конца системы координат спектрального анализатора. Чтобы узнать больше о TLAST сигнал в AXI4-Stream моделировании, см. «Другие протокольные сигналы» (необязательно).

Настройте модель для ZedBoard

Для реализации этой модели на ZedBoard необходимо сначала иметь исходный проект в Vivado, который получает аудио входа на ZedBoard и передает обработанные аудио данные из ZedBoard. Для получения дополнительной информации о том, как создать исходный проект, который взаимодействует с аудиокодеком на ZedBoard, смотрите Авторская разработка исходного проекта для аудиосистемы на плате Zynq. Этот пример расширяет исходный проект в этом примере путем добавления IP DMA для связи с системой обработки.

В исходном проекте, левом и правом каналах аудио данных объединяются, чтобы сформировать один канал, так что нижний 24 биты образуют левый канал и верхний 24 биты образуют правый канал. В модели Simulink ®, показанной выше, CODEC_data_in разделяется на левый и правый каналы. Фильтрация выполняется по каждому каналу индивидуально. Затем каналы конкатенируют, чтобы сформировать один канал для CODEC_data_out.

Генерация IP-ядра HDL с AXI4-Stream интерфейсами

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

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

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

2. Добавьте папку репозитория IP и файл регистрации ZedBoard в путь MATLAB с помощью следующих команд:

addpath(fullfile(matlabroot,'toolbox','hdlcoder','hdlcoderdemos','customboards','ipcore'));
addpath(fullfile(matlabroot,'toolbox','hdlcoder','hdlcoderdemos','customboards','ZedBoard'));

3. Откройте HDL Workflow Advisor из подсистемы DUT, hdlcoder_audio_filter_multistream/DUT или дважды щелкните по полю Launch HDL Workflow Advisor в модели.

Настройки целевого интерфейса уже сохранены для ZedBoard в этой модели примера, поэтому настройки в задачах с 1.1 по 1.3 загружаются автоматически. Чтобы узнать больше о сохранении настроек целевого интерфейса в модели, можно обратиться к примеру Save Target Hardware Settings in Model.

4. Запустите задачу Set Target Device и Synthesis Tool.

В этой задаче IP Core Generation выбран для целевого рабочего процесса и ZedBoard выбран для целевой платформы.

5. Выполните задачу Set Target Reference Design. Audio system with DMA Interface выбран в качестве Исходного проекта.

6. Запустите задачу Set Target Interface.

В этой задаче порты подсистемы DUT сопоставляются с интерфейсами IP Core. Порты аудиокодека сопоставлены с Аудио Интерфейсом, а порты DMA сопоставлены с интерфейсом DMA AXI. Это оба AXI4-Stream интерфейса. Интерфейс AXI4-Stream сообщается в главном/ведомом режиме, где ведущее устройство отправляет данные в ведомое устройство. Поэтому, если порт данных является входом портом, он назначается AXI4-Stream Slave интерфейс, и если порт данных является выходным портом, он назначается AXI4-Stream Master интерфейс. Исключением из этого является сигнал Ready. The AXI4-Stream Master Ready сигнал является входом в модель, и AXI4-Stream Slave Ready сигнал является выходом модели. Порты управления анализатором спектра отображены на AXI4-Lite.

Выполнение этой задачи выдает предупреждение о том, что автоматическая генерация сигнала Ready отключена и что аудиоинтерфейс не назначает порт Ready. Можно игнорировать предупреждение для этого проекта, потому что обратное давление уже учтена. А именно, проект, адресованный назад, давление на интерфейсе DMA при помощи FIFO. На интерфейсе аудиокодека обратное давление не может быть приложено, поэтому логика сигнала Ready не требуется.

7. В задаче Set Target Frequency установите Целевую частоту (МГц) равной 96. Запустите эту задачу.

Это целевое значение частоты делает коэффициент Избыточной дискретизации четным целым числом относительно скорости дискретизации аудио 48kHz.

8. Щелкните правой кнопкой мыши задачу Generate RTL Code and IP Core и выберите Run to Selected Task.

В сгенерированном отчете IP Core Report можно найти отображение адресов регистров и другую документацию для ядра IP.

Интеграция IP-адресов с AXI4-Stream Audio-Compatible Исходный проект

Далее, в HDL Workflow Advisor, вы запускаете задачи интеграции встраиваемых систем, чтобы развернуть сгенерированное ядро IP HDL на оборудовании Zynq ®.

1. Запустите задачу Create Project.

Эта задача вставляет сгенерированное IP-ядро в Audio System with AXI DMA Interface исходный проект. Как показано на первой схеме, этот исходный проект содержит IP для обработки потоковых аудиоданных внутри и вне ZedBoard, а также для потоковой передачи данных внутри и вне системы обработки. Сгенерированный проект является полным дизайном ZedBoard. Он включает часть алгоритма, которая является сгенерированным алгоритмом DUT IP, и часть платформы, которая является исходным проектом.

2. Щелкните ссылку на панели результатов, чтобы открыть сгенерированный проект Vivado. В инструменте Vivado нажмите Open Блока Проекта, чтобы просмотреть схему Zynq проекта, которая включает сгенерированное IP-ядро HDL, другие IP обработки аудио и процессор Zynq.

3. В HDL Workflow Advisor запустите оставшиеся задачи, чтобы сгенерировать модель интерфейса программного обеспечения, и создайте и загрузите битовый поток FPGA. Выберите Download метод программирования в задаче Program Target Device для загрузки битового потока FPGA на карту SD на плате Zynq. Ваш проект затем автоматически перезагружается при включении питания платы Zynq.

Сгенерируйте исполняемый файл ARM для настройки параметров на FPGA Fabric

В задаче Generate Software Interface Model генерируется модель программного интерфейса.

В сгенерированной модели AXI4-Lite блоков драйверов были добавлены автоматически. Однако AXI4-Stream блоки драйверов не могут быть сгенерированы автоматически, потому что блоки драйверов ожидают векторных входов на стороне программного обеспечения, но порты DMA DUT являются скалярными портами. Для получения дополнительной информации о том, как обновить модель интерфейса программного обеспечения с помощью правильных блоков драйверов, смотрите Начало работы с AXI4-Stream интерфейсом в рабочем процессе Zynq.

В данном примере вы используете обновленную модель интерфейса программного обеспечения. Чтобы открыть эту модель, запустите:

open_system('hdlcoder_audio_filter_multistream_sw');

Чтобы настроить параметры:

1. Нажмите кнопку Monitor & Tune на вкладке Hardware панели инструментов модели. Embedded Coder создает модель, загружает исполняемый файл ARM ® на оборудование ZedBoard, выполняет его и соединяет модель с выполняемым исполняемым файлом. В то время как модель работает, различные параметры могут быть настроены.

2. Тип фильтра можно выбрать с помощью параметров блоков Тип фильтра блока Выбор фильтра. Коэффициенты фильтра вычисляются в этом блоке с помощью fir1 функция от Signal Processing Toolbox™. Коэффициенты передаются из системы обработки в FPGA с помощью блока AXI4-Stream IIO Write, который обменивается данными через MM2S IP DMA.

3. Весовая кривая, используемая анализатором спектра, может быть выбрана с помощью параметров блоков Curve блока Weighting Curve Select. Выбор передается из системы обработки в FPGA с помощью интерфейса AXI4-Lite.

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

Отфильтрованные аудио выходы можно услышать, подключив наушники или динамики к разъему HPH OUT на ZedBoard.

Похожие темы