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

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

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

  • Оценочный комплект Xilinx® Zynq® ZC706

  • Xilinx Zynq UltraScale™ + оценочный комплект MPSoC ZCU102

  • Макетная плата ZedBoard™ Zynq-7000

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

  • Altera комплект разработчика Arria® 10 SoC

Спроектируйте задачу и системные требования

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

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

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

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

  • Выборки пропущены: <1 в 10 000

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

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

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

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

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

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

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

Проект Используя SoC Blockset

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

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

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

$FramePeriod = Frame size * FPGAOutputSampleTime$

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

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

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

Чтобы визуализировать задержку, симулируйте модель и открытый блок Memory Channel, перейдите к вкладке Performance и кликните по выставленным для обозрения графикам производительности. Выберите все опции задержки под Средствами управления Графиком и нажмите Create Plot. Как получено в фигуре - 2, вы заметите, что составная задержка встречается <требование на 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 под вкладкой Performance, чтобы рассмотреть график пропускной способности памяти как в фигуре 4. Обратите внимание на то, что пропускная способность меньше необходимых 0,4 Мбайт/с. Поскольку шаг расчета выходных данных FPGA является 10e-6, и каждая выборка 4 байта шириной, необходимая пропускная способность потоковой передачи для системы равняется 4 bytes/10e-6 = 400 кБайт/с.

Спроектируйте, чтобы Удовлетворить Демонстрационное Требование Отбрасывания: Поскольку длительность задачи может варьироваться по многим причинам как различные пути к выполнению кода и изменение во время переключения ОС, возможно, что данные пропущены в канале памяти. Задайте среднюю длительность выполнения задачи и статистическое распределение на время задачи в маске блока Task Manager. Измерьте FIFO, эквивалентный одному кадровому буферу. Установите пакетный размер FIFO на 16 байтов и вычислите глубину FIFO:

$FIFO_depth = FrameSize / FIFOBurstSize$

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

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

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

Результаты симуляции для всех случаев № 3-7 и результирующая выборка, пропущенная на 10 000, сведены в таблицу в Таблице 3.

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

Реализуйте и работавший оборудование

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

  • HDL Coder™

  • Embedded Coder®

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

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

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

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

  • Выберите экран 'Build Model ' on ' Setup'. Нажмите 'Next'.

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

  • Задайте папку проекта на экране 'Select Project Folder'. Нажмите 'Next'.

  • Выберите экран 'Build, load and run ' on ' Select Build Action'. Нажмите 'Next'.

  • Нажмите 'Validate', чтобы проверять совместимость модели для реализации на экране 'Validate Model'. Нажмите 'Next'.

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

  • Кликните по экрану 'Test Connection ' on ' Connect Hardware', чтобы протестировать возможность соединения хоста - компьютера с платой SoC. Нажмите 'Next', чтобы перейти к экрану 'Run Application'.

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

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

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

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

copyfile(fullfile(matlabroot,'toolbox','soc','socexamples','bitstreams','soc_hwsw_stream_top-zc706.bit'), './soc_prj');

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

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

  • На вкладке Hardware нажмите Hardware Settings, чтобы открыть окно Configuration Parameters.

  • Во вкладке Hardware Implementation выберите свою плату из Аппаратной платы выпадающий список и на верхней части и на модели процессора.

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

  • Перейдите к ресурсам Целевого компьютера> проект FPGA (отладка) вкладка и включите, Включают Соединительный монитор AXI.

Затем откройте Разработчика SoC и выполните шаги, как ранее утверждено для Xilinx® Zynq® ZC706 выше. Измените copyfile команду, чтобы совпадать с потоком битов, соответствующим вашей плате. Доступные предсгенерированные потоки битов:

  • 'soc_hwsw_stream_top-zc706.bit'

  • 'soc_hwsw_stream_top-zedboard.bit'

  • 'soc_hwsw_stream_top-zcu102.bit'

  • 'soc_hwsw_stream_top-c5soc.sof'

  • 'soc_hwsw_stream_top-a10soc.sof'

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