Анализируйте пропускную способность памяти с помощью генераторов трафика

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

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

  • Набор для оценки ZC706 Xilinx ® Zynq ®

  • Плата для разработки KC705 Xilinx ® Kintex ® 7

Задача проекта

Рассмотрите приложение, выполняющее обработку HD-видео в FPGA на входе и выходе в реальном времени. Это приложение требует, чтобы четыре потребителя памяти одновременно искали доступ к DDR. Мастер 1 памяти записывает входящие видеокадры в память, а мастер 4 памяти считывает видеокадры из памяти и соединяется с выходным отображением. Мастер 2 памяти считывает данные из памяти для обработки в FPGA, а мастер 3 памяти записывает данные обратно в память.

Каждый мастер работает на HD видео со следующими характеристиками:

  • Формат кадра: 1920x1080p

  • Размер пикселя: 2 байта (формат YCbCr)

  • Период системы координат: 1/60 = 16,67 мс (для 60 FPS)

  • Системы координат: 1920x1080x2 = 4.1472MB

Каждый мастер требует следования минимальной пропускной способности памяти, чтобы получить частоту систем координат 60 FPS.

  • Пропускная способность памяти: Системы координат кадра = 4.1472e6/16.67e-3 = 248.8MBps

Предположим, что характеристики контроллера памяти следующие:

  • Тактовая частота: 200 МГц

  • Ширина данных: 32 бита

  • Длина пакетной транзакции: 128

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

Создайте модель с помощью контроллеров и Memory Traffic Generator, чтобы смоделировать четыре мастера памяти.

Контроллер памяти: Установите параметры контроллера памяти в Параметры конфигурации > Аппаратная реализация > Целевые аппаратные ресурсы. На вкладке FPGA Design (mem Controllers) установите тактовую частоту 200 МГц, а ширину данных 32. На вкладке FPGA Design (debug) выберите Include AXI interconnect monitor.

Генераторы трафика памяти 1 и 4: Характеристики трафика памяти для Master 1 и 4 те же, что и они представляют потоковую передачу видеокадров в память и из нее. Установите характеристики трафика памяти для мастеров 1 и 4 следующим образом:

  • Размер пакета (в байтах): длина транзакции пакета * (данные) = 128 * 32/8 = 512

  • Всего запросов пакета: 4 системы координат данные для симуляции = 4 * Данные трафика/Размер пакета = 4 * 8100 = 32400

Время пакетного доступа: Период Система координат пакетных запросов = 16.67e-3/8100 = 20.58e-7 сек. В качестве постоянного трафика данных данные постоянно принимаются с постоянной скоростью. Установите время пакетной передачи следующим образом:

  • Время первого пакета = 20.58e-7

  • Случайное время между пакетами = [20.58e-7 20.58e-7]

Обновите Generator1 трафика памяти и трафик памяти Generator4 блокируйте маску с вышеуказанными значениями. Установите тип Request for Memory Traffic Generator1 with writer и Memory Traffic Generator4 with reader. Очистите Wait for burst done опции в обеих масках блоков, так как эти мастера представляют мастера с непрерывным трафиком, таким как HDMI Camera и отображение.

Генераторы трафика памяти 2 и 3: Трафик памяти Generator2 представлять считыватель для алгоритма FPGA и трафика памяти Generator3 представлять средство записи из алгоритма FPGA. Установите характеристики трафика памяти для мастеров 2 и 3 следующим образом:

  • Размер пакета (в байтах): длина транзакции пакета * (данные) = 128 * 32/8 = 512

  • Всего запросов пакета: 4 * Данные трафика/Размер пакета = 4 * 8100 = 32400 (данные 4 кадров для симуляции)

Время пакетного доступа: (Длина пакета + 10 )/Период синхронизации = 6.9e-7 (0.69us). Чтобы разрешить некоторую случайность во времени пакета для запроса чтения и записи данных, из-за изменения требований алгоритма, установите время пакета как ниже:

  • Время первого всплеска: 7.2e-7

  • Случайное время между пакетами: [7.2e-7 7.4e-7]

Моделировать

Запустите модель. После завершения симуляции откройте блок Контроллер и нажмите View performance plots на вкладке Performance. Выберите все шаблоны на вкладке Bandwidth и нажмите Create Plot. Можно заметить, что все мастера примерно достигли пропускной способности 190 Мбит/с и не достигли требуемых 248 Мбит/с. Это также наблюдается предупреждениями в средстве просмотра диагностики.

Чтобы соответствовать необходимой пропускной способности, измените ширину данных контроллера с 32 до 64 в настройках параметров конфигурации в разделе Целевые аппаратные ресурсы. Это требует изменения настроек генератора трафика памяти следующим образом:

  • Размер пакета (в байтах): длина транзакции пакета * (данные) = 128 * 64/8 = 1024

  • Всего запросов пакета: 4 * Данные трафика/Размер пакета = 4 * 4050 = 16200 (4 кадра данных для симуляции)

Время доступа пакета между генераторами трафика памяти 1 и 4: Период Система координат запросов пакета = 16.67e-3/4050 = 41.16e-7 сек. Установите время пакета как ниже:

  • Время первого всплеска: 41.16e-7

  • Случайное время между пакетами: [41.16e-7 41.16e-7]

Нет никакого изменения во времени первого пакета и случайном времени между пакетами для генераторов трафика памяти 2 и 3, поскольку они определяются на основе требований алгоритма.

Симулируйте модель и откройте график Bandwidth из Контроллер, как упоминалось ранее. Заметьте, что пропускная способность памяти, достигаемая генератором трафика памяти 1 и 4, составляет 248 Мбит/с. Пропускная способность памяти генератора 2 и 3 составляет около 500 Мбайт/с. Это соответствует требованию к проекту, так как все мастера могут соответствовать требованиям реального времени 248 МГц. Заметьте, что на средстве просмотра диагностики нет предупреждений, так как запросы пакетных вызовов не отбрасываются.

Реализация и запуск оборудования

SoC Blockset для устройств Xilinx необходим для данного раздела.

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

AXI Traffic Generator (ATG), аппаратный блок IP Core for Memory Traffic Generator не поддерживает время случайного пакетного доступа и дифференцирует мастера Reader и средство записи в арбитражной политике в отличие от блока Memory Traffic Generator для симуляции. Поэтому перед реализацией на оборудовании измените настройки блока Памяти следующим образом:

  • Сделайте все генераторы трафика памяти как 'Writers'

  • Для генератора трафика памяти 2 и 3 установите [7.2e-7 7.2 e-7] для случайного времени между пакетами, чтобы сделать его фиксированным между пакетным временем 7.2e-7

Чтобы открыть SoC Builder, перейдите на вкладку System on Chip на панели инструментов Simulink и нажмите кнопку Configure, Build, & Deploy. После открытия SoC Builder выполните следующие действия:

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

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

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

  • Выберите Build, load and run на экране Select Build Action. Нажмите кнопку Далее.

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

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

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

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

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

copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',...
        'supportpackages','xilinxsoc','xilinxsocexamples','bitstreams',...
        'soc_memory_traffic_generator-zc706.bit'), './soc_prj');
  • Нажмите кнопку Load, чтобы загрузить предварительно сгенерированный битовый поток.

Чтобы запустить этот пример, скопируйте испытательный стенд примера в папку проекта.

copyfile(fullfile(matlabroot,'toolbox','soc','socexamples',...
        'soc_memory_traffic_generator_aximaster.m'), './soc_prj','f');

Testbench конфигурирует сгенерированное оборудование ATG для генераторов трафика памяти. Чтобы запустить оборудование, увеличьте количество пакетных запросов в 100 раз, так как оно использует MATLAB ® в качестве AXI Master IP, чтобы вернуть выборки в MATLAB ®, что предполагает значительную задержку в доступе к оборудованию. Загрузите soc_memory_traffic_generator_zc706_aximaster.mat файл и увеличьте количество пакетных запросов для всех мастеров в строении ATG до 100 раз. Сохраните запросы .mat файла в строении ATG.

Введите следующую команду, чтобы запустить испытательный стенд soc_memory_traffic_generator_aximaster.

soc_memory_traffic_generator_aximaster

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

Реализация на плате разработки KC705 Xilinx ® Kintex ® 7: Чтобы реализовать модель на KC705 плате разработки, необходимо сначала сконфигурировать модель на плате разработки Xilinx ® Kintex ® 7 KC705 и задать следующие параметры примера. Откройте Model Configuration Parameters, перейдите на вкладку Аппаратная реализация и выполните следующее:

  • Выберите Xilinx ® Kintex ® 7 KC705 платы разработки из раскрывающегося списка в разделе Аппаратная плата.

  • Перейдите на целевой компьютер ресурсы > Проект FPGA (верхний уровень) и включите включить MATLAB как AXI Master IP для взаимодействия на основе хоста.

  • Перейдите к Целевому компьютеру ресурсам > вкладке проекта FPGA (mem контроллеров) и установите ширину (биты) данных контроллера равной 64.

  • Перейдите на целевой компьютер resources > FPGA design (debug) и включите Include AXI interconnect monitor.

Затем откройте SoC Builder и выполните действия, указанные выше для Xilinx ® Zynq ® ZC706. Измените команду copyfile так, чтобы она совпадала с битовым потоком платы разработки KC705 Kintex ® 7, как показано ниже.

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

Сводные данные, вы моделировали трафик памяти для предполагаемого проекта перед разработкой алгоритмов. Вы проанализировали пропускную способность памяти и изменили параметры памяти, чтобы удовлетворить требования проекта. Результаты проверки были проверены на оборудовании.