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

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

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

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

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

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

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

Создайте модель SoC soc_swhw_stream_top использование шаблона Stream from Processor к Шаблону FPGA. Топ-модель включает модель FPGA soc_swhw_stream_fpga и модель процессора soc_swhw_stream_proc инстанцированный как модели - ссылки. Топ-модель также включает блоки Контроллера канала и Контроллера памяти Памяти, что модель совместно использовала внешнюю память между FPGA и процессором.

Спроектируйте, чтобы Удовлетворить Требование Задержки: Начните с нескольких потенциальных форматов кадра и вычислите период системы координат для каждого формата кадра в Таблице 1. Период системы координат является временем между двумя последовательными системами координат с FPGA на процессор. В данном примере FPGA, шаг расчета выхода является 1/10e6 или 1e-7, как алгоритм FPGA, достигает 10 МГц. Период системы координат вычисляется как

$FramePeriod = Frame size * FPGAOutputSampleTime$

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

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

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

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

$3 <= NumFrameBuffers <= 64$

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

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

$FramePeriod &#62; MeanTaskDuration$

Различные способы существуют для получения средней длительности задачи, соответствующей форматам кадра для вашего алгоритма. Эти концепции покрыты примером Выполнения Задачи. Средняя длительность задачи для различных форматов кадра получена в следующей Таблице 2. Поскольку средняя длительность задачи больше расчетного периода системы координат, случай № 1 и № 2 нарушает требование пропускной способности.

Спроектируйте, чтобы Удовлетворить Требование Непрерывности Данных: Чтобы удовлетворить требование непрерывности данных, заполните кадровые буферы в памяти (воспламенение) прежде, чем начать передавать данные потоком. Когда временные разрушения происходят из-за выполнения процессора, данные доступны от драгоценно заполненных кадровых буферов, заполненных ранее. Воспламенение выполняется путем разработки логики программного обеспечения под soc_swhw_stream_proc/Writer/Priming подсистема, которая генерирует streamEnable команда для FPGA, чтобы начать передавать данные потоком после памяти почти полна.

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

По умолчанию модель сконфигурирована параметрами случая № 3 по умолчанию. Симулируйте топ-модель и Нажмите Data Inspector от вкладки Simulation. Добавьте bufAvail сигналы на виде сверху. В этом случае доступный буферный сигнал программного обеспечения не опускается до нуля, и validDropLED в топ-модели приводит в порядок не легкий, указывая, что данные передаются потоком постоянно.

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

soc_swhw_stream_set_parameters(4); % row # 4

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

Случай № 4 нарушает требование непрерывности данных. Случай № 3, как доказывают, является оптимальным случаем, которые соответствуют всем конструктивным требованиям. Эта Таблица 3 показывает обновленные результаты.

Запустите soc_swhw_stream_set_parameters(3) команда, чтобы восстановить модель параметрами случая № 3 перед развертыванием модели.

Реализуйте и запущенная модель на оборудовании

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

  • HDL Coder™

  • Embedded Coder®

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

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

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

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

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

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

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

  5. Выберите Build, загрузку для режима external mode на экране Select Build Action. Нажать Далее.

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

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

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

Синтез 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 в режиме external mode путем нажатия на Monitor и Tune на панели инструментов. Это осветит LED2 на плате, указывая на обнаружение высокочастотного сигнала FPGA. Чтобы изменить частоту синусоиды сигнализируют динамически во времени выполнения, заменяют блок терминатора строки SourceSelector на блок Constant, и затем запускают модель снова в режиме external mode. Измените постоянное значение от 0 до 1, чтобы изменить частоту сигнала от верхнего уровня до низкого соответственно.

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

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

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

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

Затем откройте Разработчика 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_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.