Потоковая передача данных с оборудования на программное обеспечение

Этот пример представляет систематический подход к проектированию пути данных между аппаратной логикой (FPGA) и встраиваемым процессором с использованием SoC Blockset. Приложения часто разделяются между аппаратной логикой и встраиваемым процессором на устройствах на чипах (SoC), чтобы удовлетворить требования к пропускной способности, задержкам и обработке. Вы будете проектировать и моделировать все приложение, содержащее алгоритмы FPGA и процессора, интерфейс памяти и планирование задач, чтобы соответствовать системным требованиям. Затем вы подтвердите проект на оборудовании, сгенерировав код из модели и реализовав на однокристальном устройстве.

Поддерживаемые аппаратные платформы:

  • Набор для оценки ZC706 Xilinx ® Zynq ®

  • Набор для оценки ZCU102 Xilinx Zynq UltraScale™+ MPSoC

  • Набор для оценки ZCU111 Xilinx Zynq UltraScale™+ RFSoC

  • ZedBoard™ Zynq-7000 развития

  • Комплект для разработки Altera ® Cyclone ® V

  • Набор для разработки Altera Arria ® 10 SoC

Проект и системные требования

Рассмотрите приложение, которое постоянно обрабатывает данные на FPGA и встраиваемом процессоре. В этом примере алгоритм FPGA фильтрует входной сигнал и передает полученные данные в процессор. В soc_hwsw_stream_implementation модели реализации блок Buffer представляет передачу данных от FPGA к процессору. Процессор работает с буферизованными данными и классифицирует данные как высокую или низкую частоту в Подсистеме Алгоритма Процессора. FPGA генерирует тестовые данные синусоида низкой или высокой частоты на основе настройки DIP-переключателя в подсистеме Test Data Source.

Приложение имеет следующие требования к эффективности:

  • Пропускная способность: 10e6 образцов в секунду

  • Максимальная задержка: 100 мс

  • Выборки сброшены: < 1 в 10000

Проблемы разработки Datapath

FPGA обрабатывает выборку данных по выборке, в то время как процессор работает с системой координат данных за раз. Данные передаются асинхронно между FPGA и процессором, и длительность программной задачи может варьироваться для каждого выполнения. Поэтому необходима очередь для хранения данных между FPGA и процессором, чтобы предотвратить потерю данных. Эта очередь реализована в два этапа, один как FIFO пакетов выборок данных в памяти FPGA и другой как серия буферов систем координат во внешней памяти. Вам нужно будет задать три параметра, связанных с очередью: формат кадра (количество выборок в системе координат данных), количество буферов системы координат и размер FIFO (количество пакетов выборок в FIFO).

Эти расчётные параметры влияют на эффективность и использование ресурсов. Увеличение формата кадра позволяет увеличить время выполнения программной задачи и удовлетворить требования к пропускной способности за счет увеличения задержек. Обычно эти параметры устанавливаются только тогда, когда вы готовы к реализации на оборудовании, что создает следующие проблемы:

  • Трудно отлаживать проблемы, такие как сброс образцов в оборудовании, из-за отсутствия видимости.

  • Сложно спроектировать ваше приложение эффективно, не оценка предварительно эффекты оборудования интерфейсов. Это может занять много итераций проектирования-реализации, так как вы можете оценить эффективность только посредством реализации на оборудовании.

  • Трудно оптимизировать проект, поскольку эффективность и причинно-следственные связи трудно определить посредством реализации.

В идеале вы хотите принять во внимание эти аппаратные эффекты во время разработки приложения во время проекта, перед реализацией и запуском на оборудовании. Одним из способов удовлетворения этих требований является моделирование аппаратных эффектов во время проекта. Если можно симулировать изменение длительности задачи, использования буферов памяти/FIFO и задержек передачи внешней памяти, можно оценить их эффекты на разработку приложения и реализовать проверенный проект на оборудовании. SoC Blockset позволяет моделировать эти эффекты, чтобы можно было оценить эффективность развернутого приложения перед запуском на оборудовании.

Проект с использованием SoC Blockset

Создайте модель SoC, soc_hwsw_stream_top из модели реализации soc_hwsw_stream_implementation используя Поток от FPGA к шаблону процессора. Модель верхней части включает в себя модель FPGA soc_hwsw_stream_fpga и модель процессора soc_hwsw_stream_proc созданную как модели-ссылки. Верхняя часть модели также включает блоки Memory Channel и Memory Контроллера, которые модель общую внешнюю память между FPGA и процессором. Они были ранее смоделированы с использованием буферного блока в модели реализации. Чтобы улучшить эффективность симуляции, алгоритм FPGA также моделируется для основанных на кадрах soc_hwsw_stream_fpga_frame обработки и включен в качестве подсистемы варианта модели на верхнем уровне. Можно выбрать модель для выполнения в обработке на основе фрейма или на основе сэмпла, выбрав из маски подсистемы FPGA.

Проект для удовлетворения требований к задержкам: Задержка в datapath от FPGA до процессора включает задержку через логику FPGA и время передачи данных от FPGA к процессору через канал памяти. В этом примере часы FPGA 10MHz, и задержка составляет порядка наносекунд. Это незначительно по сравнению с задержками в канале памяти, который находится в порядке миллисекунд. Поэтому давайте сосредоточимся на разработке задержки для передачи данных следующим образом.

Начните с нескольких потенциальных форматов кадра и вычислите период системы координат для каждого формата кадра в таблице -1. Система координат - это время между двумя последовательными системами координат от FPGA до процессора. В данном примере выходного шага расчета FPGA равен 10e-6, поскольку допустимые данные выводятся каждые 100 тактов из FPGA.

$FramePeriod = Frame size * FPGAOutputSampleTime$

Задержка канала памяти обусловлена временем, прошедшим от выборок в очереди буферов систем координат и FPGA FIFO. Давайте размер FPGA FIFO эквивалентный одной системе координат. Чтобы оставаться в пределах требования максимальной задержки, вычислите количество буферов систем координат для каждого формата кадра согласно:

$(NumFrameBuffers + 1) * FramePeriod <= MaxLatency$

Максимально допустимая задержка для этого примера составляет 100 мс. Поскольку количество буферов составляет максимальное требование задержки, для всех случаев в Таблица-1 требование задержки выполняется. Максимальное количество буферов систем координат, разрешенных драйвером DMA программного обеспечения, составляет 64. Для передачи данных во внешней памяти необходимо минимум 3 буфера систем координат. В то время как один из буферов системы координат записывается FPGA, другой буфер системы координат считывается процессором. Поэтому случай # 8-10 из приведенной ниже таблицы отклоняется, поскольку он нарушает минимальное требование к буферу.

Чтобы визуализировать задержку, симулируйте модель и откройте блок Memory Channel, перейдите на вкладку Performance и нажмите на View performance plots. Выберите все опции задержки в разделе Управление графиком (Plot Controls) и нажмите Создать график (Create Plot). Как показано на фигуре, вы заметите, что составная задержка соответствует требованию < 100 мс.

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

$FramePeriod &#62; MeanTaskDuration$

Существуют различные способы получения средних длительности задач, соответствующих форматам кадра для вашего алгоритма, которые описаны в примере выполнения задачи. Средние сроки выполнения задачи для различных форматов кадра указаны в таблице 2.

Чтобы симулировать модель с параметрами, соответствующими строкам (# 2- # 7) в таблице, используйте функцию set_hwsw_stream_set_parameters функция с строкой # в качестве аргумента. Установите параметры модели для строки # 2 как ниже:

soc_hwsw_stream_set_parameters(2); % row # 2

Поскольку средняя длительность задачи 1,06 мс больше, чем период системы координат 1,0 мс, данные отбрасываются в канале памяти. Откройте Logic Analyzer и заметьте, что сигнал icFIFODroppedCount увеличивается в течение всей симуляции, как показано на фигуре 3, что указывает на накопление количества сброшенных данных.

Поскольку данные сбрасываются во время передачи из FPGA в процессор через память, это отражается как падение пропускной способности. Откройте блок контроллер, перейдите на вкладку Performance и нажмите кнопку Plot data throughput на вкладке Performance, чтобы увидеть график производительности памяти, как показано на рисунке 4. Обратите внимание, что пропускная способность меньше требуемых 0,4 Мбит/с. Поскольку выходной шаг расчета FPGA составляет 10e-6, и каждая выборка имеет ширину 4 байта, необходимая пропускная способность потоковой передачи для системы составляет 4 байта/10e-6 = 400 Кбит/с.

Design to Meet Drop Samples Requirement: Поскольку продолжительность задачи может варьироваться по многим причинам, таким как различные пути выполнения кода и изменения во времени переключения ОС, возможно, что данные отбрасываются в канале памяти. Задайте среднюю длительность выполнения задачи и статистическое распределение длительности задачи в маске блока Task Manager. Размер FIFO, эквивалентного буферу с одной системой координат. Установите размер пакета FIFO в 16 байт и вычислите глубину пакета FIFO:

$FIFO_depth = FrameSize / FIFOBurstSize$

Теперь моделируйте модель в течение 100 секунд (10e6 образцов с 10e-6 выборками в секунду) для случаев # 3-7. Откройте анализатор Logic и отметьте количество выборок, сброшенных на сигнал icFIFODroppedCount.

soc_hwsw_stream_set_parameters(3); % set the model parameters for #3

Откройте Данные Моделирования Inspector и добавьте сигналы от канала памяти, как показано фигура 5 ниже. Обратите внимание, что когда использование буферов (signal buffAvail) увеличивается до максимальных 11, использование FIFO (signal isFIFOEntres) начинает увеличиваться. Когда FIFO используется полностью, выборки сбрасываются (сигнал isFIFODroppedCount)

Результаты симуляции для всех случаев # 3-7 и результирующей выборки, сброшенного на 10000, приведены в таблице 3.

Подсвеченные значения (строки # 4 и # 5) являются допустимыми вариантами проекта, так как они отвечают требованиям к пропускной способности, задержке и сбросу выборок.

Реализация и запуск оборудования

Для этого раздела требуются следующие продукты:

  • HDL Coder™

  • Embedded Coder ®

  • Пакет поддержки SoC Blockset для устройств Xilinx, или

  • Пакет поддержки SoC Blockset для устройств Intel

Для получения дополнительной информации о пакетах поддержки смотрите Поддерживаемые аппаратные средства SoC Blockset

Для реализации модели на поддерживаемой плате SoC используйте инструмент SoC Builder. Откройте маску подсистемы 'FPGA' и выберите вариант модели для 'Sample based processing'. По умолчанию модель будет реализована на наборе для оценки ZC706 Xilinx ® Zynq ®, так как она сконфигурирована с этой платой. Чтобы открыть SoC Builder, нажмите кнопку 'Configure, Build, & Deploy' на панели инструментов и выполните следующие действия:

  • Выберите Build Model on Setup. Нажмите кнопку Далее.

  • Нажмите Next на экране Review Task Map.

  • Нажмите View/Edit Memory Map, чтобы просмотреть карту памяти на экране Review Memory Map. Нажмите кнопку Далее.

  • Укажите папку проекта на экране Select Project Folder. Нажмите кнопку Далее.

  • Выберите Build, load and run на экране Select Build Action. Нажмите кнопку Далее.

  • Щелкните Валидация (Validate), чтобы проверить совместимость модели для реализации на экране Валидация модели (Validate Model). Нажмите кнопку Далее.

  • Нажмите Build, чтобы начать создание модели на экране Build Model. Внешний интерпретатор откроется, когда начнется синтез FPGA. Нажмите кнопку Далее.

  • Щелкните Тестовое подключение на экране Оборудования Connect, чтобы проверить связь хоста-компьютера с платой СнК. Нажмите кнопку Далее, чтобы перейти к экрану Запуск приложения.

Синтез FPGA может занять более 30 минут. Чтобы сэкономить время, вы можете захотеть использовать предоставленный предварительно сгенерированный битовый поток путем следующих шагов:

  • Закройте внешний интерпретатор, чтобы завершить синтез.

  • Скопируйте предварительно сгенерированный битовый поток в папку проекта, запустив команду ниже, а затем,

  • Нажмите Load and Кнопки Run, чтобы загрузить предварительно сгенерированный битовый поток и запустить модель на плате SoC

copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',...
        'supportpackages','xilinxsoc','xilinxsocexamples','bitstreams',...
        'soc_hwsw_stream_top-zc706.bit'), './soc_prj');

Пока приложение работает на оборудовании, переключите переключатель DIP на вашей плате, чтобы изменить тестовые данные с 'low' на 'high' частоты и заметьте мигание соответствующего светодиода на плате. Можно также считать количество сброшенных выборок в модели, работающей во режиме external mode. Таким образом, вы проверяете, что ваша реализация из модели SoC Blockset соответствует симуляции и соответствует требованиям.

Реализация на других платах: Чтобы реализовать модель на поддерживаемой плате, отличной от платы набора для оценки ZC706 Xilinx ® Zynq ®, необходимо сначала сконфигурировать модель на поддерживаемой плате и задать параметры примера, как показано ниже.

  • На вкладке Hardware нажмите Hardware Settings, чтобы открыть окно Параметры Конфигурации.

  • На вкладке Аппаратная реализация выберите плату из раскрывающегося списка Аппаратная плата в верхней и процессорной модели.

  • Перейдите на целевой компьютер ресурсы > Проект FPGA (верхний уровень) и включите включить MATLAB в качестве AXI Master IP для взаимодействия на основе хоста и установите тактовую частоту IP-ядра (МГц) равной 10 МГц.

  • Перейдите на целевой компьютер resources > FPGA design (debug) и включите Include AXI Interconnect monitor.

Затем откройте SoC Builder и выполните действия, указанные выше для Xilinx ® Zynq ® ZC706. Измените команду copyfile, чтобы соответствовать битовому потоку, соответствующему вашей плате. В случае набора разработок Altera Arria ® 10 SoC и комплекта разработок Altera Cyclone ® V SoC используйте команду copyfile ниже, соответствующую вашей плате. В случае набора разработок Altera Arria ® 10, скопируйте файлы '.periph.rbf' и '.core.rbf'.

copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',...
         'supportpackages','intelsoc','intelsocexamples','bitstreams',...
         'soc_hwsw_stream_top-c5soc.rbf'), './soc_prj');

Ниже приведены доступные предварительно сгенерированные файлы битового потока:

  • 'soc _ hwsw _ stream _ top-zc706.bit'

  • 'soc _ hwsw _ stream _ top-zedboard.bit'

  • 'soc _ hwsw _ stream _ top-zcu102.bit'

  • 'soc _ hwsw _ stream _ top-XilinxZynqUltraScale _ RFSoCZCU111EvaluationKit.bit'

  • 'soc _ hwsw _ stream _ top-c5soc.rbf'

  • 'soc _ hwsw _ stream _ top-a10soc.periph.rbf'

  • 'soc _ hwsw _ stream _ top-a10soc.core.rbf'

Сводные данные, этот пример показал вам систематический подход к проектированию datapath между аппаратной логикой и встраиваемым процессором с использованием SoC Blockset. Вы выбрали расчётные параметры из формата кадра, количества системы координат буферов и размера FIFO, чтобы удовлетворить производительность системы требованиям пропускной способности, задержки и выборок сброса. Моделируя и визуализируя эффекты этих параметров на полной модели, содержащей аппаратную логику, алгоритмы процессора, длительность внешней памяти и задачи процессора, вы обнаружили такие проблемы, как потеря пропускной способности, задержка и падение выборок перед реализацией на оборудовании. Этот рабочий процесс гарантирует, что проект работает на оборудовании до реализации, и избегает длительных итераций проектирования и реализации.

Для просмотра документации необходимо авторизоваться на сайте