В этом примере представлен систематический подход к проектированию пути передачи данных между аппаратной логикой (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 в 10000
FPGA обрабатывает выборку данных по выборке, в то время как процессор работает на кадре данных одновременно. Данные передаются асинхронно между FPGA и процессором, и продолжительность задачи программного обеспечения может изменяться для каждого выполнения. Поэтому требуется очередь для хранения данных между FPGA и процессором для предотвращения потери данных. Эта очередь реализуется в два этапа, один в виде FIFO пакетов выборок данных в памяти FPGA, а другой в виде серии буферов кадров во внешней памяти. Вам нужно будет задать три параметра, связанные с очередью: размер кадра (количество выборок в кадре данных), количество буферов кадра и размер FIFO (количество пакетов выборок в FIFO).
Эти параметры конструкции влияют на производительность и использование ресурсов. Увеличение размера кадра позволяет увеличить время выполнения задач программного обеспечения и удовлетворить требования к пропускной способности за счет увеличения времени задержки. Как правило, эти параметры устанавливаются только при готовности к внедрению на аппаратном обеспечении, что создает следующие проблемы:
Отладка таких проблем, как отбрасывание образцов в аппаратном обеспечении, затруднена из-за отсутствия видимости.
Трудно эффективно разработать приложение без предварительной оценки влияния аппаратных интерфейсов. Это может занять много итераций конструирования-внедрения, поскольку вы можете оценить производительность только с помощью внедрения на аппаратном обеспечении.
Трудно оптимизировать конструкцию, поскольку производительность и причинно-следственные связи трудно определить посредством реализации.
В идеале необходимо учитывать эти аппаратные эффекты при разработке приложения во время разработки, перед внедрением и запуском на оборудовании. Одним из способов удовлетворения этих требований является моделирование аппаратных эффектов во время проектирования. Если можно смоделировать изменение продолжительности задачи, использование буферов памяти/FIFO и задержки передачи внешней памяти, можно оценить их влияние на разработку приложений и реализовать проверенную конструкцию на оборудовании. SoC Blockset позволяет моделировать эти эффекты, чтобы оценить производительность развернутого приложения перед запуском на оборудовании.
Создайте soc_hwsw_stream_top модели SoC из модели реализации soc_hwsw_stream_implementation используя поток из FPGA в шаблон процессора. Верхняя модель включает в себя модель FPGA soc_hwsw_stream_fpga и модель процессора soc_hwsw_stream_proc, созданную как ссылки на модель. Верхняя модель также включает в себя блоки канала памяти и контроллера памяти, которые моделируют общую внешнюю память между FPGA и процессором. Ранее они были смоделированы с использованием буферного блока в модели реализации. Для повышения производительности моделирования алгоритм FPGA также моделируется для soc_hwsw_stream_fpga_frame обработки на основе кадров и включается в качестве подсистемы варианта модели на верхнем уровне. Можно выбрать модель для выполнения при обработке на основе кадров или образцов, выбрав ее из маски подсистемы FPGA.

Требования к задержке: Задержка в тракте данных от FPGA к процессору включает в себя задержку через логику FPGA и время для передачи данных от FPGA к процессору через канал памяти. В этом примере тактовый сигнал FPGA является 10MHz, а задержка составляет порядка наносекунд. Это ничтожно мало по сравнению с задержкой в канале памяти, которая составляет порядка миллисекунд. Поэтому давайте сосредоточимся на разработке для задержки передачи данных следующим образом.
Начните с нескольких возможных размеров кадра и рассчитайте Период кадра для каждого размера кадра в таблице -1. Период кадра - это время между двумя последовательными кадрами от FPGA до процессора. В этом примере время выборки выходного сигнала FPGA равно 10e-6, так как действительные данные выводятся каждые 100 тактовых циклов из FPGA.

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

Максимально допустимая задержка в этом примере составляет 100 мс. Поскольку максимальное количество буферов соответствует требованию к задержке, для всех случаев в Table-1 требование к задержке удовлетворяется. Максимальное количество буферов кадров, разрешенное программным драйвером DMA, составляет 64. Для передачи данных во внешней памяти требуется минимум 3 буфера кадров. В то время как один из буферов кадров записывается FPGA, другой буфер кадров считывается процессором. Поэтому варианты No 8-10 из приведенной ниже таблицы отклоняются, поскольку они нарушают минимальные требования к буферу.
Чтобы визуализировать задержку, смоделировать модель и открыть блок Канал памяти (Memory Channel), перейдите на вкладку Производительность (Performance) и щелкните Просмотр графиков производительности (View performance plots). Выберите все опции задержки в разделе Элементы управления графиком (Plot Controls) и щелкните Создать график (Create Plot). Как показано на рис. 2, вы заметите, что композитная задержка соответствует требованию < 100 мс.
Проектирование для удовлетворения требований к пропускной способности: В среднем обработка программных задач должна выполняться в течение периода кадра, так как в противном случае задача будет переполнена, что приведет к сбросу данных и нарушит требования к пропускной способности. т.е.

Существуют различные способы получения средних длительностей задач, соответствующих размерам кадра для вашего алгоритма, которые описаны в примере выполнения задач. Средние длительности задач для различных размеров кадра приведены в таблице 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 к процессору через память, это отражается как падение пропускной способности. Откройте блок контроллера памяти, перейдите на вкладку Производительность и нажмите кнопку График пропускной способности данных на вкладке Производительность, чтобы увидеть график пропускной способности памяти, как на рисунке 4. Следует отметить, что пропускная способность меньше требуемой 0,4 Мбит/с. Поскольку время выборки выходных данных FPGA составляет 10e-6, а ширина каждой выборки - 4 байта, требуемая пропускная способность потоковой передачи для системы составляет 4 байта/10e-6 = 400 Кбит/с.
Конструкция для удовлетворения требований к отбрасыванию выборок: поскольку продолжительность задачи может варьироваться по многим причинам, таким как различные пути выполнения кода и изменение времени переключения ОС, возможно, что данные будут отброшены в канале памяти. Укажите среднюю продолжительность выполнения задачи и статистическое распределение для длительности задачи в маске блока диспетчера задач. Размер FIFO, эквивалентный буферу одного кадра. Установите размер пакета FIFO равным 16 байтам и вычислите глубину FIFO:

Теперь смоделируйте модель в течение 100 секунд (10e6 выборок при 10e-6 выборок в секунду) для случаев # 3-7. Откройте анализатор Logic и запишите количество выборок, отброшенных на сигнал icFIFODroppedCount.
soc_hwsw_stream_set_parameters(3); % set the model parameters for #3
Откройте Simulation Data Inspector и добавьте сигналы из канала памяти, как показано на рисунке 5 ниже. Следует отметить, что по мере увеличения использования буферов (signal buffAvail) до максимального значения 11 начинает увеличиваться использование FIFO (signal isFIFOEntries). Когда FIFO полностью используется, выборки сбрасываются (сигнал isFIFODroppedCount)
Результаты моделирования для всех случаев No 3-7 и результирующая проба, падающая на 10000, представлены в таблице 3.
Выделенные записи (строки # 4 и # 5) являются допустимыми вариантами конструкции, поскольку они удовлетворяют требованиям к пропускной способности, задержке и отбрасыванию выборок.
Для этого раздела требуются следующие продукты:
Coder™ ЛПВП
Встроенный кодер ®
Пакет поддержки пакетов SoC для устройств Xilinx или
Пакет поддержки SoC Blockset для устройств Intel
Дополнительные сведения о пакетах поддержки см. в разделе Оборудование, поддерживаемое блоками SoC
Для реализации модели на поддерживаемой плате SoC используйте инструмент SoC Builder. Откройте маску подсистемы «FPGA» и выберите вариант модели «Sample based processing». По умолчанию модель будет реализована на оценочном комплекте Xilinx ® Zynq ® ZC706 в конфигурации с этой платой. Чтобы открыть SoC Builder, нажмите кнопку «Настроить, построить и развернуть» на панели инструментов и выполните следующие действия:
Выберите Build Model на экране Setup. Нажмите кнопку Далее.
Нажмите Next на экране Review Task Map.
Щелкните Просмотр/редактирование карты памяти, чтобы просмотреть карту памяти на экране Просмотр карты памяти. Нажмите кнопку Далее.
Укажите папку проекта на экране Select Project Folder. Нажмите кнопку Далее.
Выберите Build, загрузите и запустите на экране Select Build Action. Нажмите кнопку Далее.
Щелкните Проверить (Validate), чтобы проверить совместимость модели для реализации на экране Проверить модель (Validate Model). Нажмите кнопку Далее.
Щелкните Построить (Build), чтобы начать построение модели на экране Построить модель (Build Model). Внешняя оболочка откроется, когда начнется синтез FPGA. Нажмите кнопку Далее.
Нажмите Test Connection на экране Connect Hardware для проверки подключения хост-компьютера к плате SoC. Нажмите кнопку Next, чтобы перейти к экрану Run Application.
Синтез FPGA может занять более 30 минут. Чтобы сэкономить время, можно использовать предоставленный предварительно сгенерированный битовый поток, выполнив следующие действия.
Закройте внешнюю оболочку для завершения синтеза.
Скопируйте предварительно созданный битовый поток в папку проекта, выполнив приведенную ниже команду, а затем:
Нажмите кнопку Load and Run для загрузки предварительно созданного битового потока и запуска модели на плате SoC.
copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',... 'supportpackages','xilinxsoc','xilinxsocexamples','bitstreams',... 'soc_hwsw_stream_top-zc706.bit'), './soc_prj');
Во время работы приложения на аппаратном обеспечении переключите DIP-переключатель на плате для изменения тестовых данных с «низкой» на «высокую» частоту и обратите внимание на мигание соответствующего светодиода на плате. Можно также считать количество отброшенных проб в модели, работающей во внешнем режиме. Таким образом, выполняется проверка соответствия реализации из модели SoC Blockset моделированию и требованиям.
Реализация на других платах: для реализации модели на поддерживаемой плате, отличной от платы набора для оценки Xilinx ® Zynq ® ZC706, необходимо сначала сконфигурировать модель на поддерживаемой плате и задать параметры примера, как показано ниже.
На вкладке Оборудование щелкните Параметры оборудования, чтобы открыть окно Параметры конфигурации.
На вкладке Hardware Implementation выберите плату из выпадающего списка Hardware board как в верхней, так и в процессорной модели.
Перейдите на вкладку Target hardware resources > FPGA design (верхний уровень) и включите параметр Include MATLAB as AXI Master IP для взаимодействия с хостом и установите тактовую частоту ядра IP (МГц) равной 10 МГц.
Перейдите на вкладку Целевые аппаратные ресурсы > FPGA design (debug) и включите монитор Include AXI Interconnect.
Затем откройте 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_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'
Таким образом, в этом примере показан систематический подход к разработке пути передачи данных между аппаратной логикой и встроенным процессором с использованием SoC Blockset. Вы выбрали расчетные параметры размера кадра, количества буферов кадра и размера FIFO, чтобы соответствовать требованиям к производительности системы для отсчетов пропускной способности, задержки и отбрасывания. Моделируя и визуализируя влияние этих параметров на полную модель, содержащую аппаратную логику, алгоритмы процессора, продолжительность внешней памяти и задачи процессора, вы обнаружили такие проблемы, как потеря пропускной способности, задержка и отбрасывание выборок перед внедрением на аппаратном обеспечении. Этот рабочий процесс гарантирует, что конструкция работает на оборудовании до внедрения и позволяет избежать длительных итераций конструирования и реализации.