exponenta event banner

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

В этом примере показано, как проектировать путь передачи данных от встроенного процессора к аппаратной логике (FPGA) с использованием SoC Blockset™. Разработка и моделирование всего приложения, включающего алгоритмы FPGA и процессора, интерфейс памяти и планирование задач в соответствии с требованиями системы. Затем проверьте конструкцию на оборудовании, генерируя код из модели и реализуя его на устройстве System-on-Chip (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 определяет частоту сигнала посредством фильтрации и загорается светодиодом (LED) для индикации обнаружения. В этом примере моделируется путь передачи данных, аналогичный примеру потоковой передачи данных с оборудования на программное обеспечение. В этом примере поток данных изменяется на противоположный по сравнению с примером потоковой передачи данных от аппаратных средств к программному обеспечению.

Приложение имеет эти требования к производительности.

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

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

  • Потоковая передача данных: непрерывная

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

Создайте soc_swhw_stream_top модели SoC с использованием шаблона Поток от процессора к шаблону FPGA. Верхняя модель включает в себя модель FPGA soc_swhw_stream_fpga и модель процессора soc_swhw_stream_proc, созданную как ссылки на модель. Верхняя модель также включает блоки канала памяти и контроллера памяти, которые моделируют общую внешнюю память между FPGA и процессором.

Конструкция для удовлетворения требований к задержке: начните с нескольких возможных размеров кадра и рассчитайте период кадра для каждого размера кадра в Table-1. Период кадра - это время между двумя последовательными кадрами от FPGA к процессору. В этом примере время выборки выходного сигнала FPGA равно 1/10e6, или 1e-7, так как алгоритм FPGA работает на частоте 10 МГц. Период кадра рассчитывается как

$FramePeriod = Frame size * FPGAOutputSampleTime$

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

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

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

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

$3 <= NumFrameBuffers <= 64$

Случаи 5 и 6 нарушают минимальные требования к буферу.

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

$FramePeriod &#62; MeanTaskDuration$

Существуют различные способы получения средних длительностей задач, соответствующих размерам кадра для вашего алгоритма. Эти понятия рассматриваются в примере выполнения задачи. Средняя продолжительность задачи для различных размеров кадра фиксируется в следующих Table-2. Поскольку средняя продолжительность задачи больше вычисленного периода кадра, случаи # 1 и # 2 нарушают требования к пропускной способности.

Конструкция, отвечающая требованиям непрерывности данных: Чтобы соответствовать требованиям непрерывности данных, заполните буферы кадров в памяти перед началом потоковой передачи данных. Когда возникают временные прерывания из-за выполнения процессора, данные доступны из предварительно заполненных буферов кадров, заполненных ранее. Инициализация осуществляется путем проектирования программной логики в соответствии с soc_swhw_stream_proc/Writer/Priming подсистема, которая генерирует streamEnable команда FPGA запустить потоковую передачу данных после того, как память будет почти заполнена.

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

По умолчанию модель конфигурируется с параметрами варианта # 3 по умолчанию. Моделирование модели верхнего уровня и щелкните Инспектор данных (Data Inspector) на вкладке Моделирование (Simulation). ДобавитьbufAvail сигналы на виде сверху. В этом случае доступный сигнал программного буфера не падает до нуля, и validDropLED в верхней модели не загорается, что указывает на непрерывную потоковую передачу данных.

Установите модель для варианта № 4, как в этом коде, и снова смоделируйте модель.

soc_swhw_stream_set_parameters(4); % row # 4

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

Случай No4 нарушает требование непрерывности данных. Доказано, что вариант № 3 является оптимальным вариантом, отвечающим всем проектным требованиям. В этом Table-3 отображаются обновленные результаты.

Управляемый soc_swhw_stream_set_parameters(3) для восстановления модели с параметрами варианта 3 перед развертыванием модели.

Внедрение и выполнение модели на оборудовании

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

  • Coder™ ЛПВП

  • Встроенный кодер ®

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

Дополнительные сведения о пакетах поддержки см. в разделе Оборудование, поддерживаемое блоками SoC.

Для реализации модели на поддерживаемой плате SoC используйте инструмент SoC Builder. По умолчанию модель реализована на оценочном комплекте Xilinx ® Zynq ® ZC706 в конфигурации с этой платой. Чтобы открыть SoC Builder, нажмите кнопку «Настроить, построить и развернуть» на панели инструментов и выполните следующие действия.

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

  2. Нажмите кнопку Next на экране Review Task Map.

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

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

  5. Выберите Build, загрузите для внешнего режима на экране Select Build Action. Нажмите кнопку Далее.

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

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

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

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

  1. Закройте внешнюю оболочку для завершения синтеза.

  2. Скопируйте предварительно созданный битовый поток в папку проекта, запустив этот copyfile ниже.

  3. Щелкните Загрузить (Load) и Выполнить (Run), чтобы загрузить предварительно созданный поток битов и открыть сгенерированную модель программного обеспечения soc_swhw_stream_top_sw.

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

После загрузки битового потока запустите созданную модель программного обеспечения soc_swhw_stream_top_sw во внешнем режиме, щелкнув Монитор и Настройка на панели инструментов. При этом на плате загораются LED2, указывающие на обнаружение высокочастотного сигнала FPGA. Чтобы динамически изменять частоту синусоидального сигнала во время выполнения, замените блок конца SourceSelector блоком константы, а затем снова запустите модель во внешнем режиме. Измените постоянное значение от 0 до 1, чтобы изменить частоту сигнала с высокой на низкую соответственно.

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

  • На вкладке Оборудование щелкните Параметры оборудования, чтобы открыть окно Параметры конфигурации.

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

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

Затем откройте SoC Builder и выполните действия, описанные выше для ZC706 Xilinx ® Zynq ®. Изменение 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_swhw_stream_top-c5soc.rbf'), './soc_prj');

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

  • «soc _ swhw _ stream _ top-zc706.bit»

  • «soc _ swhw _ stream _ top-zedboard.bit.»

  • «soc _ swhw _ stream _ top-zcu102.bit»

  • 'soc_swhw_stream_top-XilinxZynqUltraScale_RFSoCZCU111EvaluationKit.bit'

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

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

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

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