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

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

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

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

Приложение имеет эти требования к эффективности.

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

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

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

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

Создайте soc_swhw_stream_top модели SoC с помощью шаблона Stream from Processor to FPGA Template. Модель верхней части включает в себя модель FPGA soc_swhw_stream_fpga и модель процессора soc_swhw_stream_proc созданную как модели-ссылки. Верхняя часть модели также включает блоки Memory Channel и Memory Контроллера, которые модель общую внешнюю память между FPGA и процессором.

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

$FramePeriod = Frame size * FPGAOutputSampleTime$

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

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

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

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

По умолчанию модель сконфигурирована с параметрами case # 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) команда для восстановления модели с параметрами case # 3 перед развертыванием модели.

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

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

  • HDL Coder™

  • Embedded Coder ®

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

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

Для реализации модели на поддерживаемой плате SoC используйте инструмент SoC Builder. По умолчанию модель реализована на наборе для оценки ZC706 Xilinx ® Zynq ®, поскольку она сконфигурирована с этой платой. Чтобы открыть 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, загрузите для режима external mode на экране 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 and Запуска, чтобы загрузить предгенерированный битовый поток и открыть сгенерированное программное обеспечение 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. Чтобы динамически изменять частоту синусоидного сигнала во время исполнения, замените блок терминатор строки на блок Constant, а затем запустите модель снова во режиме external mode. Измените постоянное значение от 0 до 1, чтобы изменить частоту сигнала с высокого на низкий соответственно.

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

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

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

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

Затем откройте 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_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-устройстве.