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

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

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

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

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

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

  • Макетная плата 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, удовлетворяется требование задержки. Максимальное количество кадровых буферов, позволенных драйвером программного обеспечения DMA, равняется 64. Минимум 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' в панели инструментов и выполнить эти шаги:

  • Выбор Создает Модель на экране Setup. Нажать Далее.

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

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

  • Задайте папку проекта на экране Select Project Folder. Нажать Далее.

  • Выберите Build, загрузку и работайте на экране Select Build Action. Нажать Далее.

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

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

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

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

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

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

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

copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',...
        'supportpackages','xilinxsoc','xilinxsocexamples','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 команду, чтобы совпадать с потоком битов, соответствующим вашей плате. В случае Altera комплект разработчика Arria® 10 SoC и Altera использование комплекта разработчика Cyclone® V SoC ниже copyfile команды, соответствующей вашей плате. В случае Altera комплект разработчика Arria® 10 SoC скопируйте '.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, чтобы удовлетворить требования производительности системы пропускной способности, задержки и выборок отбрасывания. Путем симуляции и визуализации эффектов этих параметров на полной модели, содержащей аппаратную логику, алгоритмы процессора, внешнюю память и длительность задачи процессора, вы раскрыли проблемы как потеря пропускной способности, задержки и отбрасывания выборок прежде, чем реализовать на оборудовании. Этот рабочий процесс гарантирует, что дизайнерские работы на оборудовании перед реализацией и избегают длинных итераций реализации проекта.

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